Page MenuHomePhabricator

D12120.id29144.diff
No OneTemporary

D12120.id29144.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -89,6 +89,8 @@
'ArcanistGoLintLinterTestCase' => 'lint/linter/__tests__/ArcanistGoLintLinterTestCase.php',
'ArcanistGoTestResultParser' => 'unit/parser/ArcanistGoTestResultParser.php',
'ArcanistGoTestResultParserTestCase' => 'unit/parser/__tests__/ArcanistGoTestResultParserTestCase.php',
+ 'ArcanistGoVetLinter' => 'lint/linter/ArcanistGovetLinter.php',
+ 'ArcanistGoVetLinterTestCase' => 'lint/linter/__tests__/ArcanistGovetLinterTestCase.php',
'ArcanistHLintLinter' => 'lint/linter/ArcanistHLintLinter.php',
'ArcanistHLintLinterTestCase' => 'lint/linter/__tests__/ArcanistHLintLinterTestCase.php',
'ArcanistHelpWorkflow' => 'workflow/ArcanistHelpWorkflow.php',
@@ -288,6 +290,8 @@
'ArcanistGoLintLinterTestCase' => 'ArcanistExternalLinterTestCase',
'ArcanistGoTestResultParser' => 'ArcanistTestResultParser',
'ArcanistGoTestResultParserTestCase' => 'ArcanistTestCase',
+ 'ArcanistGoVetLinter' => 'ArcanistExternalLinter',
+ 'ArcanistGoVetLinterTestCase' => 'ArcanistExternalLinterTestCase',
'ArcanistHLintLinter' => 'ArcanistExternalLinter',
'ArcanistHLintLinterTestCase' => 'ArcanistExternalLinterTestCase',
'ArcanistHelpWorkflow' => 'ArcanistWorkflow',
diff --git a/src/lint/linter/ArcanistGoVetLinter.php b/src/lint/linter/ArcanistGoVetLinter.php
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/ArcanistGoVetLinter.php
@@ -0,0 +1,67 @@
+<?php
+
+final class ArcanistGoVetLinter extends ArcanistExternalLinter {
+
+ public function getInfoName() {
+ return 'Go vet';
+ }
+
+ public function getInfoURI() {
+ return 'https://godoc.org/golang.org/x/tools/cmd/vet';
+ }
+
+ public function getInfoDescription() {
+ return pht(
+ 'Vet examines Go source code and reports suspicious constructs.');
+ }
+
+ public function getLinterName() {
+ return 'GOVET';
+ }
+
+ public function getLinterConfigurationName() {
+ return 'govet';
+ }
+
+ public function getDefaultBinary() {
+ return 'go';
+ }
+ public function getInstallInstructions() {
+ return pht('Install Go vet using `go get golang.org/x/tools/cmd/vet`.');
+ }
+
+ public function shouldExpectCommandErrors() {
+ return true;
+ }
+
+ protected function canCustomizeLintSeverities() {
+ return true;
+ }
+
+ protected function getMandatoryFlags() {
+ return ['tool', 'vet'];
+ }
+
+ protected function parseLinterOutput($path, $err, $stdout, $stderr) {
+ $lines = phutil_split_lines($stderr, false);
+
+ $messages = array();
+ foreach ($lines as $line) {
+ $matches = explode(':', $line, 3);
+
+ if (count($matches) === 3) {
+ $message = new ArcanistLintMessage();
+ $message->setPath($path);
+ $message->setLine($matches[1]);
+ $message->setCode($this->getLinterName());
+ $message->setDescription(ucfirst(trim($matches[2])));
+ $message->setSeverity(ArcanistLintSeverity::SEVERITY_WARNING);
+
+ $messages[] = $message;
+ }
+ }
+
+ return $messages;
+ }
+
+}
diff --git a/src/lint/linter/__tests__/ArcanistGoVetLinterTestCase.php b/src/lint/linter/__tests__/ArcanistGoVetLinterTestCase.php
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/__tests__/ArcanistGoVetLinterTestCase.php
@@ -0,0 +1,10 @@
+<?php
+
+final class ArcanistGoVetLinterTestCase
+ extends ArcanistExternalLinterTestCase {
+
+ public function testLinter() {
+ $this->executeTestsInDirectory(dirname(__FILE__).'/govet/');
+ }
+
+}
diff --git a/src/lint/linter/__tests__/govet/fmt.lint-test b/src/lint/linter/__tests__/govet/fmt.lint-test
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/__tests__/govet/fmt.lint-test
@@ -0,0 +1,9 @@
+package main
+
+import "fmt"
+
+func main() {
+ fmt.Println("%d", 1)
+}
+~~~~~~~~~~
+warning:6

File Metadata

Mime Type
text/plain
Expires
Thu, Apr 3, 5:22 PM (3 d, 19 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7730946
Default Alt Text
D12120.id29144.diff (3 KB)

Event Timeline