pikeman 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.travis.yml +21 -0
  4. data/CONTRIBUTING.md +15 -0
  5. data/Gemfile +6 -0
  6. data/Gemfile.lock +36 -0
  7. data/LICENSE +27 -0
  8. data/LICENSE.txt +21 -0
  9. data/Makefile +39 -0
  10. data/README.md +85 -0
  11. data/Rakefile +10 -0
  12. data/VERSION +1 -0
  13. data/bin/console +14 -0
  14. data/bin/pikeman +15 -0
  15. data/bin/setup +8 -0
  16. data/golint/golint.go +213 -0
  17. data/golint/import.go +309 -0
  18. data/golint/version.go +3 -0
  19. data/lib/pikeman.rb +34 -0
  20. data/lib/pikeman/version.rb +3 -0
  21. data/lint.go +1708 -0
  22. data/lint_test.go +317 -0
  23. data/misc/emacs/golint.el +54 -0
  24. data/misc/vim/ftplugin/go/lint.vim +31 -0
  25. data/pikeman.gemspec +28 -0
  26. data/testdata/4.go +38 -0
  27. data/testdata/5_test.go +17 -0
  28. data/testdata/blank-import-lib.go +39 -0
  29. data/testdata/blank-import-lib_test.go +25 -0
  30. data/testdata/blank-import-main.go +14 -0
  31. data/testdata/broken.go +9 -0
  32. data/testdata/common-methods.go +16 -0
  33. data/testdata/const-block.go +36 -0
  34. data/testdata/context.go +24 -0
  35. data/testdata/contextkeytypes.go +38 -0
  36. data/testdata/else-multi.go +18 -0
  37. data/testdata/else.go +23 -0
  38. data/testdata/error-return.go +43 -0
  39. data/testdata/errorf.go +40 -0
  40. data/testdata/errors.go +38 -0
  41. data/testdata/iferr.go +101 -0
  42. data/testdata/import-dot.go +8 -0
  43. data/testdata/inc.go +14 -0
  44. data/testdata/names.go +116 -0
  45. data/testdata/pkg-caps.go +4 -0
  46. data/testdata/pkg-doc1.go +3 -0
  47. data/testdata/pkg-doc2.go +5 -0
  48. data/testdata/pkg-doc3.go +7 -0
  49. data/testdata/pkg-doc4.go +7 -0
  50. data/testdata/pkg-doc5.go +9 -0
  51. data/testdata/pkg-main.go +5 -0
  52. data/testdata/range.go +43 -0
  53. data/testdata/receiver-names.go +49 -0
  54. data/testdata/sort.go +20 -0
  55. data/testdata/stutter.go +25 -0
  56. data/testdata/time.go +13 -0
  57. data/testdata/unexp-return.go +46 -0
  58. data/testdata/var-decl.go +86 -0
  59. metadata +172 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a49c667ba4a3471544800af686a17eebc5fad019
4
+ data.tar.gz: fe270b436382ff0bc2d150477ec2575e61de23e1
5
+ SHA512:
6
+ metadata.gz: 85f330d4e73e55f5a883e5f77fdcc831f2de4026de83641365dbb0493cd9567cdbafd4f16c8ae7cb4fbaf40f45e831db7bb03a2a7c498225ee50b0a6577332ce
7
+ data.tar.gz: 577ba7f5d54a2807ba4d31196da854369c94d9eb69aedb7d863fc77ae7303bd8d51bf1785ae96239cb3127dcbe8d738b37fe20f921cb1d124db3e93ba3acd74e
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ /build/
@@ -0,0 +1,21 @@
1
+ sudo: false
2
+ language: go
3
+ go:
4
+ - 1.8.x
5
+ - 1.9.x
6
+ - 1.10.x
7
+ - master
8
+ ruby:
9
+ - 2.3.3
10
+ before_install: gem install bundler -v 1.16.0
11
+
12
+ install:
13
+ - go get -t -v ./...
14
+
15
+ script:
16
+ - make test
17
+
18
+ matrix:
19
+ allow_failures:
20
+ - go: master
21
+ fast_finish: true
@@ -0,0 +1,15 @@
1
+ # Contributing to Golint
2
+
3
+ ## Before filing an issue:
4
+
5
+ ### Are you having trouble building golint?
6
+
7
+ Check you have the latest version of its dependencies. Run
8
+ ```
9
+ go get -u github.com/golang/lint
10
+ ```
11
+ If you still have problems, consider searching for existing issues before filing a new issue.
12
+
13
+ ## Before sending a pull request:
14
+
15
+ Have you understood the purpose of golint? Make sure to carefully read `README`.
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in pikeman.gemspec
6
+ gemspec
@@ -0,0 +1,36 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ pikeman (0.1.0)
5
+ cli-kit
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ byebug (10.0.0)
11
+ cli-kit (3.0.0)
12
+ cli-ui (>= 1.1.0)
13
+ cli-ui (1.1.0)
14
+ coderay (1.1.2)
15
+ method_source (0.9.0)
16
+ minitest (5.11.3)
17
+ pry (0.11.3)
18
+ coderay (~> 1.1.0)
19
+ method_source (~> 0.9.0)
20
+ pry-byebug (3.6.0)
21
+ byebug (~> 10.0)
22
+ pry (~> 0.10)
23
+ rake (10.5.0)
24
+
25
+ PLATFORMS
26
+ ruby
27
+
28
+ DEPENDENCIES
29
+ bundler (~> 1.16)
30
+ minitest (~> 5.0)
31
+ pikeman!
32
+ pry-byebug
33
+ rake (~> 10.0)
34
+
35
+ BUNDLED WITH
36
+ 1.16.0
data/LICENSE ADDED
@@ -0,0 +1,27 @@
1
+ Copyright (c) 2013 The Go Authors. All rights reserved.
2
+
3
+ Redistribution and use in source and binary forms, with or without
4
+ modification, are permitted provided that the following conditions are
5
+ met:
6
+
7
+ * Redistributions of source code must retain the above copyright
8
+ notice, this list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above
10
+ copyright notice, this list of conditions and the following disclaimer
11
+ in the documentation and/or other materials provided with the
12
+ distribution.
13
+ * Neither the name of Google Inc. nor the names of its
14
+ contributors may be used to endorse or promote products derived from
15
+ this software without specific prior written permission.
16
+
17
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 Maxime Bedard
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,39 @@
1
+ NAME=pikeman
2
+ GO_PACKAGE=github.com/maximebedard/pikeman
3
+ RUBY_MODULE=Pikeman
4
+ VERSION=$(shell cat VERSION)
5
+ GOFILES=$(shell find . -type f -name '*.go')
6
+ GEM=$(NAME)-$(VERSION).gem
7
+
8
+ .PHONY: all
9
+
10
+ default: release
11
+ release: $(GEM)
12
+ test: gotest rbtest
13
+ binaries: build/linux-amd64/pikeman build/darwin-amd64/pikeman
14
+
15
+ build/linux-amd64/pikeman: $(GOFILES) golint/version.go
16
+ GOOS=linux GOARCH=amd64 go build -o "$@" ./golint
17
+
18
+ build/darwin-amd64/pikeman: $(GOFILES) golint/version.go
19
+ GOOS=darwin GOARCH=amd64 go build -o "$@" ./golint
20
+
21
+ gotest:
22
+ go test -race -v ./...
23
+
24
+ rbtest:
25
+ bundle exec rake test
26
+
27
+ $(GEM): \
28
+ lib/$(NAME)/version.rb \
29
+ build/linux-amd64/pikeman \
30
+ build/darwin-amd64/pikeman
31
+ gem build pikeman.gemspec && gem push $@ && rm $@
32
+
33
+ golint/version.go: VERSION
34
+ mkdir -p $(@D)
35
+ echo 'package main\n\nconst VERSION string = "$(VERSION)"' > $@
36
+
37
+ lib/$(NAME)/version.rb: VERSION
38
+ mkdir -p $(@D)
39
+ echo 'module $(RUBY_MODULE)\n VERSION = "$(VERSION)"\nend' > $@
@@ -0,0 +1,85 @@
1
+ Golint is a linter for Go source code.
2
+
3
+ [![Build Status](https://travis-ci.org/golang/lint.svg?branch=master)](https://travis-ci.org/golang/lint)
4
+
5
+ ## Installation
6
+
7
+ Golint requires Go 1.6 or later.
8
+
9
+ go get -u golang.org/x/lint/golint
10
+
11
+ ## Usage
12
+
13
+ Invoke `golint` with one or more filenames, directories, or packages named
14
+ by its import path. Golint uses the same
15
+ [import path syntax](https://golang.org/cmd/go/#hdr-Import_path_syntax) as
16
+ the `go` command and therefore
17
+ also supports relative import paths like `./...`. Additionally the `...`
18
+ wildcard can be used as suffix on relative and absolute file paths to recurse
19
+ into them.
20
+
21
+ The output of this tool is a list of suggestions in Vim quickfix format,
22
+ which is accepted by lots of different editors.
23
+
24
+ ## Purpose
25
+
26
+ Golint differs from gofmt. Gofmt reformats Go source code, whereas
27
+ golint prints out style mistakes.
28
+
29
+ Golint differs from govet. Govet is concerned with correctness, whereas
30
+ golint is concerned with coding style. Golint is in use at Google, and it
31
+ seeks to match the accepted style of the open source Go project.
32
+
33
+ The suggestions made by golint are exactly that: suggestions.
34
+ Golint is not perfect, and has both false positives and false negatives.
35
+ Do not treat its output as a gold standard. We will not be adding pragmas
36
+ or other knobs to suppress specific warnings, so do not expect or require
37
+ code to be completely "lint-free".
38
+ In short, this tool is not, and will never be, trustworthy enough for its
39
+ suggestions to be enforced automatically, for example as part of a build process.
40
+ Golint makes suggestions for many of the mechanically checkable items listed in
41
+ [Effective Go](https://golang.org/doc/effective_go.html) and the
42
+ [CodeReviewComments wiki page](https://golang.org/wiki/CodeReviewComments).
43
+
44
+ ## Scope
45
+
46
+ Golint is meant to carry out the stylistic conventions put forth in
47
+ [Effective Go](https://golang.org/doc/effective_go.html) and
48
+ [CodeReviewComments](https://golang.org/wiki/CodeReviewComments).
49
+ Changes that are not aligned with those documents will not be considered.
50
+
51
+ ## Contributions
52
+
53
+ Contributions to this project are welcome provided they are [in scope](#scope),
54
+ though please send mail before starting work on anything major.
55
+ Contributors retain their copyright, so we need you to fill out
56
+ [a short form](https://developers.google.com/open-source/cla/individual)
57
+ before we can accept your contribution.
58
+
59
+ ## Vim
60
+
61
+ Add this to your ~/.vimrc:
62
+
63
+ set rtp+=$GOPATH/src/github.com/golang/lint/misc/vim
64
+
65
+ If you have multiple entries in your GOPATH, replace `$GOPATH` with the right value.
66
+
67
+ Running `:Lint` will run golint on the current file and populate the quickfix list.
68
+
69
+ Optionally, add this to your `~/.vimrc` to automatically run `golint` on `:w`
70
+
71
+ autocmd BufWritePost,FileWritePost *.go execute 'Lint' | cwindow
72
+
73
+
74
+ ## Emacs
75
+
76
+ Add this to your `.emacs` file:
77
+
78
+ (add-to-list 'load-path (concat (getenv "GOPATH") "/src/github.com/golang/lint/misc/emacs"))
79
+ (require 'golint)
80
+
81
+ If you have multiple entries in your GOPATH, replace `$GOPATH` with the right value.
82
+
83
+ Running M-x golint will run golint on the current file.
84
+
85
+ For more usage, see [Compilation-Mode](http://www.gnu.org/software/emacs/manual/html_node/emacs/Compilation-Mode.html).
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList["test/**/*_test.rb"]
8
+ end
9
+
10
+ task :default => :test
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "pikeman"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ platform = `uname -sm`
3
+
4
+ dir =
5
+ case platform
6
+ when /^Darwin/ ; "darwin-amd64"
7
+ when /^Linux.*64/ ; "linux-amd64"
8
+ else
9
+ abort "pikeman is not supported on your platform."
10
+ end
11
+
12
+ bindir = File.expand_path("../../build/#{dir}", __FILE__)
13
+ puts bindir
14
+ ENV["PATH"] = "#{bindir}:#{ENV["PATH"]}"
15
+ exec "pikeman", *ARGV
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,213 @@
1
+ // Copyright (c) 2013 The Go Authors. All rights reserved.
2
+ //
3
+ // Use of this source code is governed by a BSD-style
4
+ // license that can be found in the LICENSE file or at
5
+ // https://developers.google.com/open-source/licenses/bsd.
6
+
7
+ // golint lints the Go source files named on its command line.
8
+ package main
9
+
10
+ import (
11
+ "encoding/json"
12
+ "flag"
13
+ "fmt"
14
+ "go/build"
15
+ "io/ioutil"
16
+ "os"
17
+ "path/filepath"
18
+ "strings"
19
+
20
+ "golang.org/x/lint"
21
+ )
22
+
23
+ var (
24
+ minConfidence = flag.Float64("min_confidence", 0.8, "minimum confidence of a problem to print it")
25
+ setExitStatus = flag.Bool("set_exit_status", false, "set exit status to 1 if any issues are found")
26
+ formatterType = flag.String("format", "text", "set the format. Available: text, json.")
27
+ suggestions int
28
+ formatter problemFormatter
29
+ )
30
+
31
+ func usage() {
32
+ fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])
33
+ fmt.Fprintf(os.Stderr, "\tgolint [flags] # runs on package in current directory\n")
34
+ fmt.Fprintf(os.Stderr, "\tgolint [flags] [packages]\n")
35
+ fmt.Fprintf(os.Stderr, "\tgolint [flags] [directories] # where a '/...' suffix includes all sub-directories\n")
36
+ fmt.Fprintf(os.Stderr, "\tgolint [flags] [files] # all must belong to a single package\n")
37
+ fmt.Fprintf(os.Stderr, "Version: %s\n", VERSION)
38
+ fmt.Fprintf(os.Stderr, "Flags:\n")
39
+ flag.PrintDefaults()
40
+ }
41
+
42
+ func main() {
43
+ flag.Usage = usage
44
+ flag.Parse()
45
+
46
+ switch *formatterType {
47
+ case "json":
48
+ formatter = &jsonFormatter{}
49
+ default:
50
+ formatter = &textFormatter{}
51
+ }
52
+
53
+ if flag.NArg() == 0 {
54
+ lintDir(".")
55
+ } else {
56
+ // dirsRun, filesRun, and pkgsRun indicate whether golint is applied to
57
+ // directory, file or package targets. The distinction affects which
58
+ // checks are run. It is no valid to mix target types.
59
+ var dirsRun, filesRun, pkgsRun int
60
+ var args []string
61
+ for _, arg := range flag.Args() {
62
+ if strings.HasSuffix(arg, "/...") && isDir(arg[:len(arg)-len("/...")]) {
63
+ dirsRun = 1
64
+ for _, dirname := range allPackagesInFS(arg) {
65
+ args = append(args, dirname)
66
+ }
67
+ } else if isDir(arg) {
68
+ dirsRun = 1
69
+ args = append(args, arg)
70
+ } else if exists(arg) {
71
+ filesRun = 1
72
+ args = append(args, arg)
73
+ } else {
74
+ pkgsRun = 1
75
+ args = append(args, arg)
76
+ }
77
+ }
78
+
79
+ if dirsRun+filesRun+pkgsRun != 1 {
80
+ usage()
81
+ os.Exit(2)
82
+ }
83
+ switch {
84
+ case dirsRun == 1:
85
+ for _, dir := range args {
86
+ lintDir(dir)
87
+ }
88
+ case filesRun == 1:
89
+ lintFiles(args...)
90
+ case pkgsRun == 1:
91
+ for _, pkg := range importPaths(args) {
92
+ lintPackage(pkg)
93
+ }
94
+ }
95
+ }
96
+
97
+ if *setExitStatus && suggestions > 0 {
98
+ fmt.Fprintf(os.Stderr, "Found %d lint suggestions; failing.\n", suggestions)
99
+ os.Exit(1)
100
+ }
101
+ }
102
+
103
+ type textFormatter struct{}
104
+
105
+ func (tf *textFormatter) Write(p lint.Problem) {
106
+ fmt.Printf("%v: %s\n", p.Position, p.Text)
107
+ }
108
+
109
+ type problemFormatter interface {
110
+ Write(p lint.Problem)
111
+ }
112
+
113
+ type jsonFormatter struct{}
114
+
115
+ type jsonProblem struct {
116
+ Filename string `json:"filename"`
117
+ Line int `json:"line"`
118
+ Column int `json:"column"`
119
+ Text string `json:"text"`
120
+ Link string `json:"link"`
121
+ Confidence float64 `json:"confidence"`
122
+ LineText string `json:"linetext"`
123
+ Category string `json:"category"`
124
+ }
125
+
126
+ func (jf *jsonFormatter) Write(p lint.Problem) {
127
+ b, err := json.Marshal(jsonProblem{
128
+ Filename: p.Position.Filename,
129
+ Line: p.Position.Line,
130
+ Column: p.Position.Column,
131
+ Text: p.Text,
132
+ Link: p.Link,
133
+ Confidence: p.Confidence,
134
+ LineText: p.LineText,
135
+ Category: p.Category,
136
+ })
137
+
138
+ if err != nil {
139
+ fmt.Fprintf(os.Stderr, "an unknown error as occured: %s", err.Error())
140
+ os.Exit(1)
141
+ }
142
+
143
+ os.Stdout.Write(b)
144
+ }
145
+
146
+ func isDir(filename string) bool {
147
+ fi, err := os.Stat(filename)
148
+ return err == nil && fi.IsDir()
149
+ }
150
+
151
+ func exists(filename string) bool {
152
+ _, err := os.Stat(filename)
153
+ return err == nil
154
+ }
155
+
156
+ func lintFiles(filenames ...string) {
157
+ files := make(map[string][]byte)
158
+ for _, filename := range filenames {
159
+ src, err := ioutil.ReadFile(filename)
160
+ if err != nil {
161
+ fmt.Fprintln(os.Stderr, err)
162
+ continue
163
+ }
164
+ files[filename] = src
165
+ }
166
+
167
+ l := new(lint.Linter)
168
+ ps, err := l.LintFiles(files)
169
+ if err != nil {
170
+ fmt.Fprintf(os.Stderr, "%v\n", err)
171
+ return
172
+ }
173
+ for _, p := range ps {
174
+ if p.Confidence >= *minConfidence {
175
+ formatter.Write(p)
176
+ suggestions++
177
+ }
178
+ }
179
+ }
180
+
181
+ func lintDir(dirname string) {
182
+ pkg, err := build.ImportDir(dirname, 0)
183
+ lintImportedPackage(pkg, err)
184
+ }
185
+
186
+ func lintPackage(pkgname string) {
187
+ pkg, err := build.Import(pkgname, ".", 0)
188
+ lintImportedPackage(pkg, err)
189
+ }
190
+
191
+ func lintImportedPackage(pkg *build.Package, err error) {
192
+ if err != nil {
193
+ if _, nogo := err.(*build.NoGoError); nogo {
194
+ // Don't complain if the failure is due to no Go source files.
195
+ return
196
+ }
197
+ fmt.Fprintln(os.Stderr, err)
198
+ return
199
+ }
200
+
201
+ var files []string
202
+ files = append(files, pkg.GoFiles...)
203
+ files = append(files, pkg.CgoFiles...)
204
+ files = append(files, pkg.TestGoFiles...)
205
+ if pkg.Dir != "." {
206
+ for i, f := range files {
207
+ files[i] = filepath.Join(pkg.Dir, f)
208
+ }
209
+ }
210
+ // TODO(dsymonds): Do foo_test too (pkg.XTestGoFiles)
211
+
212
+ lintFiles(files...)
213
+ }