aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/tetafro
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2025-01-22 16:07:17 +0100
committerTaras Madan <tarasmadan@google.com>2025-01-23 10:42:36 +0000
commit7b4377ad9d8a7205416df8d6217ef2b010f89481 (patch)
treee6fec4fd12ff807a16d847923f501075bf71d16c /vendor/github.com/tetafro
parent475a4c203afb8b7d3af51c4fd32bb170ff32a45e (diff)
vendor: delete
Diffstat (limited to 'vendor/github.com/tetafro')
-rw-r--r--vendor/github.com/tetafro/godot/.gitignore5
-rw-r--r--vendor/github.com/tetafro/godot/.godot.yaml16
-rw-r--r--vendor/github.com/tetafro/godot/.golangci.yml79
-rw-r--r--vendor/github.com/tetafro/godot/.goreleaser.yml11
-rw-r--r--vendor/github.com/tetafro/godot/LICENSE21
-rw-r--r--vendor/github.com/tetafro/godot/Makefile25
-rw-r--r--vendor/github.com/tetafro/godot/README.md84
-rw-r--r--vendor/github.com/tetafro/godot/checks.go299
-rw-r--r--vendor/github.com/tetafro/godot/getters.go285
-rw-r--r--vendor/github.com/tetafro/godot/godot.go129
-rw-r--r--vendor/github.com/tetafro/godot/settings.go29
11 files changed, 0 insertions, 983 deletions
diff --git a/vendor/github.com/tetafro/godot/.gitignore b/vendor/github.com/tetafro/godot/.gitignore
deleted file mode 100644
index 0b17eac4c..000000000
--- a/vendor/github.com/tetafro/godot/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-/dist/
-/tmp/
-/vendor/
-/godot
-/profile.out
diff --git a/vendor/github.com/tetafro/godot/.godot.yaml b/vendor/github.com/tetafro/godot/.godot.yaml
deleted file mode 100644
index af36858f9..000000000
--- a/vendor/github.com/tetafro/godot/.godot.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-# Which comments to check:
-# declarations - for top level declaration comments (default);
-# toplevel - for top level comments;
-# all - for all comments.
-scope: declarations
-
-# List of regexps for excluding particular comment lines from check.
-# Example: exclude comments which contain numbers.
-exclude:
- # - '[0-9]+'
-
-# Check periods at the end of sentences.
-period: true
-
-# Check that first letter of each sentence is capital.
-capital: false
diff --git a/vendor/github.com/tetafro/godot/.golangci.yml b/vendor/github.com/tetafro/godot/.golangci.yml
deleted file mode 100644
index b9e443581..000000000
--- a/vendor/github.com/tetafro/godot/.golangci.yml
+++ /dev/null
@@ -1,79 +0,0 @@
-run:
- concurrency: 2
- timeout: 5m
-
-linters:
- disable-all: true
- enable:
- - asciicheck
- - bodyclose
- - cyclop
- - dogsled
- - durationcheck
- - err113
- - errcheck
- - errname
- - errorlint
- - exhaustive
- - exportloopref
- - exportloopref
- - gochecknoinits
- - gocognit
- - goconst
- - gocritic
- - gocyclo
- - godot
- - gofmt
- - gofumpt
- - goimports
- - goprintffuncname
- - gosec
- - gosimple
- - govet
- - importas
- - ineffassign
- - lll
- - misspell
- - nakedret
- - nestif
- - noctx
- - nolintlint
- - prealloc
- - revive
- - rowserrcheck
- - sqlclosecheck
- - sqlclosecheck
- - staticcheck
- - stylecheck
- - typecheck
- - unconvert
- - unparam
- - unused
- - wastedassign
- - whitespace
- - wrapcheck
-
-linters-settings:
- godot:
- scope: toplevel
-
-issues:
- exclude-use-default: false
- exclude:
- - "do not define dynamic errors, use wrapped static errors instead"
- exclude-files:
- - ./testdata/
- exclude-rules:
- - path: _test\.go
- linters:
- - dupl
- - errcheck
- - funlen
- - gocognit
- - cyclop
- - gosec
- - noctx
- - path: main\.go
- linters:
- - cyclop
- - gomnd
diff --git a/vendor/github.com/tetafro/godot/.goreleaser.yml b/vendor/github.com/tetafro/godot/.goreleaser.yml
deleted file mode 100644
index c0fc2b6b1..000000000
--- a/vendor/github.com/tetafro/godot/.goreleaser.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-builds:
- - dir: ./cmd/godot
-checksum:
- name_template: checksums.txt
-snapshot:
- name_template: "{{ .Tag }}"
-changelog:
- sort: asc
- filters:
- exclude:
- - '^Merge pull request'
diff --git a/vendor/github.com/tetafro/godot/LICENSE b/vendor/github.com/tetafro/godot/LICENSE
deleted file mode 100644
index 120c6d502..000000000
--- a/vendor/github.com/tetafro/godot/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2020 Denis Krivak
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/vendor/github.com/tetafro/godot/Makefile b/vendor/github.com/tetafro/godot/Makefile
deleted file mode 100644
index f167051e8..000000000
--- a/vendor/github.com/tetafro/godot/Makefile
+++ /dev/null
@@ -1,25 +0,0 @@
-.PHONY: dep
-dep:
- go mod tidy && go mod verify
-
-.PHONY: test
-test:
- go test ./...
-
-.PHONY: cover
-cover:
- go test -coverprofile cover.out ./...
- go tool cover -html=cover.out
- rm -f cover.out
-
-.PHONY: lint
-lint:
- golangci-lint run
-
-.PHONY: build
-build:
- go build -o godot ./cmd/godot
-
-.PHONY: release
-release:
- goreleaser release --rm-dist
diff --git a/vendor/github.com/tetafro/godot/README.md b/vendor/github.com/tetafro/godot/README.md
deleted file mode 100644
index 6b2e530b9..000000000
--- a/vendor/github.com/tetafro/godot/README.md
+++ /dev/null
@@ -1,84 +0,0 @@
-# godot
-
-[![License](http://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://raw.githubusercontent.com/tetafro/godot/master/LICENSE)
-[![Github CI](https://img.shields.io/github/actions/workflow/status/tetafro/godot/push.yml)](https://github.com/tetafro/godot/actions)
-[![Go Report](https://goreportcard.com/badge/github.com/tetafro/godot)](https://goreportcard.com/report/github.com/tetafro/godot)
-[![Codecov](https://codecov.io/gh/tetafro/godot/branch/master/graph/badge.svg)](https://codecov.io/gh/tetafro/godot)
-
-Linter that checks if all top-level comments contain a period at the
-end of the last sentence if needed.
-
-[CodeReviewComments](https://github.com/golang/go/wiki/CodeReviewComments#comment-sentences) quote:
-
-> Comments should begin with the name of the thing being described
-> and end in a period
-
-## Install
-
-*NOTE: Godot is available as a part of [GolangCI Lint](https://github.com/golangci/golangci-lint)
-(disabled by default).*
-
-Build from source
-
-```sh
-go install github.com/tetafro/godot/cmd/godot@latest
-```
-
-or download binary from [releases page](https://github.com/tetafro/godot/releases).
-
-## Config
-
-You can specify options using config file. Use default name `.godot.yaml`, or
-set it using `-c filename.yaml` argument. If no config provided the following
-defaults are used:
-
-```yaml
-# Which comments to check:
-# declarations - for top level declaration comments (default);
-# toplevel - for top level comments;
-# all - for all comments.
-scope: declarations
-
-# List of regexps for excluding particular comment lines from check.
-exclude:
-
-# Check periods at the end of sentences.
-period: true
-
-# Check that first letter of each sentence is capital.
-capital: false
-```
-
-## Run
-
-```sh
-godot ./myproject
-```
-
-Autofix flags are also available
-
-```sh
-godot -f ./myproject # fix issues and print the result
-godot -w ./myproject # fix issues and replace the original file
-```
-
-See all flags with `godot -h`.
-
-## Example
-
-Code
-
-```go
-package math
-
-// Sum sums two integers
-func Sum(a, b int) int {
- return a + b // result
-}
-```
-
-Output
-
-```sh
-Comment should end in a period: math/math.go:3:1
-```
diff --git a/vendor/github.com/tetafro/godot/checks.go b/vendor/github.com/tetafro/godot/checks.go
deleted file mode 100644
index d30766358..000000000
--- a/vendor/github.com/tetafro/godot/checks.go
+++ /dev/null
@@ -1,299 +0,0 @@
-package godot
-
-import (
- "go/token"
- "regexp"
- "strings"
- "unicode"
-)
-
-// Error messages.
-const (
- noPeriodMessage = "Comment should end in a period"
- noCapitalMessage = "Sentence should start with a capital letter"
-)
-
-var (
- // List of valid sentence ending.
- // A sentence can be inside parenthesis, and therefore ends with parenthesis.
- lastChars = []string{".", "?", "!", ".)", "?)", "!)", "。", "?", "!", "。)", "?)", "!)", specialReplacer}
-
- // Abbreviations to exclude from capital letters check.
- abbreviations = []string{"i.e.", "i. e.", "e.g.", "e. g.", "etc."}
-
- // Special tags in comments like "//nolint:", or "//+k8s:".
- tags = regexp.MustCompile(`^\+?[a-z0-9]+:`)
-
- // Special hashtags in comments like "// #nosec".
- hashtags = regexp.MustCompile(`^#[a-z]+($|\s)`)
-
- // URL at the end of the line.
- endURL = regexp.MustCompile(`[a-z]+://[^\s]+$`)
-)
-
-// position is a position inside a comment (might be multiline comment).
-type position struct {
- line int // starts at 1
- column int // starts at 1, byte count
-}
-
-// checkComments checks every comment accordings to the rules from
-// `settings` argument.
-func checkComments(comments []comment, settings Settings) []Issue {
- var issues []Issue
- for _, c := range comments {
- if settings.Period {
- if iss := checkPeriod(c); iss != nil {
- issues = append(issues, *iss)
- }
- }
- if settings.Capital {
- if iss := checkCapital(c); len(iss) > 0 {
- issues = append(issues, iss...)
- }
- }
- }
- return issues
-}
-
-// checkPeriod checks that the last sentense of the comment ends
-// in a period.
-func checkPeriod(c comment) *Issue {
- // Check last non-empty line
- var found bool
- var line string
- var pos position
- lines := strings.Split(c.text, "\n")
- for i := len(lines) - 1; i >= 0; i-- {
- line = strings.TrimRightFunc(lines[i], unicode.IsSpace)
- if line == "" {
- continue
- }
- found = true
- pos.line = i + 1
- break
- }
- // All lines are empty
- if !found {
- return nil
- }
- // Correct line
- if hasSuffix(line, lastChars) {
- return nil
- }
-
- pos.column = len(line) + 1
-
- // Shift position to its real value. `c.text` doesn't contain comment's
- // special symbols: /* or //, and line indentations inside. It also
- // contains */ in the end in case of block comment.
- pos.column += strings.Index(
- c.lines[pos.line-1],
- strings.Split(c.text, "\n")[pos.line-1],
- )
-
- iss := Issue{
- Pos: token.Position{
- Filename: c.start.Filename,
- Offset: c.start.Offset,
- Line: pos.line + c.start.Line - 1,
- Column: pos.column,
- },
- Message: noPeriodMessage,
- }
-
- // Make a replacement. Use `pos.line` to get an original line from
- // attached lines. Use `iss.Pos.Column` because it's a position in
- // the original line.
- original := c.lines[pos.line-1]
- if len(original) < iss.Pos.Column-1 {
- // This should never happen. Avoid panics, skip this check.
- return nil
- }
- iss.Replacement = original[:iss.Pos.Column-1] + "." +
- original[iss.Pos.Column-1:]
-
- // Save replacement to raw lines to be able to combine it with
- // further replacements
- c.lines[pos.line-1] = iss.Replacement
-
- return &iss
-}
-
-// checkCapital checks that each sentense of the comment starts with
-// a capital letter.
-//
-//nolint:cyclop,funlen
-func checkCapital(c comment) []Issue {
- // Remove common abbreviations from the comment
- for _, abbr := range abbreviations {
- repl := strings.ReplaceAll(abbr, ".", "_")
- c.text = strings.ReplaceAll(c.text, abbr, repl)
- }
-
- // List of states during the scan: `empty` - nothing special,
- // `endChar` - found one of sentence ending chars (.!?),
- // `endOfSentence` - found `endChar`, and then space or newline.
- const empty, endChar, endOfSentence = 1, 2, 3
-
- var pp []position
- pos := position{line: 1}
- state := endOfSentence
- if c.decl {
- // Skip first
- state = empty
- }
- for _, r := range c.text {
- s := string(r)
-
- pos.column++
- if s == "\n" {
- pos.line++
- pos.column = 0
- if state == endChar {
- state = endOfSentence
- }
- continue
- }
- if s == "." || s == "!" || s == "?" {
- state = endChar
- continue
- }
- if s == ")" && state == endChar {
- continue
- }
- if s == " " {
- if state == endChar {
- state = endOfSentence
- }
- continue
- }
- if state == endOfSentence && unicode.IsLower(r) {
- pp = append(pp, position{
- line: pos.line,
- column: runeToByteColumn(c.lines[pos.line-1], pos.column),
- })
- }
- state = empty
- }
- if len(pp) == 0 {
- return nil
- }
-
- issues := make([]Issue, len(pp))
- for i, pos := range pp {
- // Shift position by the length of comment's special symbols: /* or //
- isBlock := strings.HasPrefix(c.lines[0], "/*")
- if (isBlock && pos.line == 1) || !isBlock {
- pos.column += 2
- }
-
- iss := Issue{
- Pos: token.Position{
- Filename: c.start.Filename,
- Offset: c.start.Offset,
- Line: pos.line + c.start.Line - 1,
- Column: pos.column + c.start.Column - 1,
- },
- Message: noCapitalMessage,
- }
-
- // Make a replacement. Use `pos.original` to get an original original from
- // attached lines. Use `iss.Pos.Column` because it's a position in
- // the original original.
- original := c.lines[pos.line-1]
- col := byteToRuneColumn(original, iss.Pos.Column) - 1
- rep := string(unicode.ToTitle([]rune(original)[col])) // capital letter
- if len(original) < iss.Pos.Column-1+len(rep) {
- // This should never happen. Avoid panics, skip this check.
- continue
- }
- iss.Replacement = original[:iss.Pos.Column-1] + rep +
- original[iss.Pos.Column-1+len(rep):]
-
- // Save replacement to raw lines to be able to combine it with
- // further replacements
- c.lines[pos.line-1] = iss.Replacement
-
- issues[i] = iss
- }
-
- return issues
-}
-
-// isSpecialBlock checks that given block of comment lines is special and
-// shouldn't be checked as a regular sentence.
-func isSpecialBlock(comment string) bool {
- // Skip cgo code blocks
- // TODO: Find a better way to detect cgo code
- if strings.HasPrefix(comment, "/*") && (strings.Contains(comment, "#include") ||
- strings.Contains(comment, "#define")) {
- return true
- }
- // This should only be skipped in test files, but we don't have this
- // information here, so - always skip
- if strings.HasPrefix(comment, "// Output:") ||
- strings.HasPrefix(comment, "// Unordered output:") {
- return true
- }
- return false
-}
-
-// isSpecialLine checks that given comment line is special and
-// shouldn't be checked as a regular sentence.
-func isSpecialLine(comment string) bool {
- // Skip cgo export tags: https://golang.org/cmd/cgo/#hdr-C_references_to_Go
- if strings.HasPrefix(comment, "//export ") {
- return true
- }
-
- comment = strings.TrimPrefix(comment, "//")
- comment = strings.TrimPrefix(comment, "/*")
-
- // Don't check comments starting with space indentation - they may
- // contain code examples, which shouldn't end with period
- if strings.HasPrefix(comment, " ") ||
- strings.HasPrefix(comment, " \t") ||
- strings.HasPrefix(comment, "\t") {
- return true
- }
-
- // Skip tags and URLs
- comment = strings.TrimSpace(comment)
- if tags.MatchString(comment) ||
- hashtags.MatchString(comment) ||
- endURL.MatchString(comment) ||
- strings.HasPrefix(comment, "+build") {
- return true
- }
-
- return false
-}
-
-func hasSuffix(s string, suffixes []string) bool {
- for _, suffix := range suffixes {
- if strings.HasSuffix(s, suffix) {
- return true
- }
- }
- return false
-}
-
-// The following two functions convert byte and rune indexes.
-//
-// Example:
-// text: a b c Ш e f
-// runes: 1 2 3 4 5 6
-// bytes: 0 1 2 3 5 6
-// The reason of the difference is that the size of "Ш" is 2 bytes.
-// NOTE: Works only for 1-based indexes (line columns).
-
-// byteToRuneColumn converts byte index inside the string to rune index.
-func byteToRuneColumn(s string, i int) int {
- return len([]rune(s[:i-1])) + 1
-}
-
-// runeToByteColumn converts rune index inside the string to byte index.
-func runeToByteColumn(s string, i int) int {
- return len(string([]rune(s)[:i-1])) + 1
-}
diff --git a/vendor/github.com/tetafro/godot/getters.go b/vendor/github.com/tetafro/godot/getters.go
deleted file mode 100644
index de3d06e10..000000000
--- a/vendor/github.com/tetafro/godot/getters.go
+++ /dev/null
@@ -1,285 +0,0 @@
-package godot
-
-import (
- "errors"
- "fmt"
- "go/ast"
- "go/token"
- "os"
- "regexp"
- "strings"
-)
-
-var (
- errEmptyInput = errors.New("empty input")
- errUnsuitableInput = errors.New("unsuitable input")
-)
-
-// specialReplacer is a replacer for some types of special lines in comments,
-// which shouldn't be checked. For example, if comment ends with a block of
-// code it should not necessarily have a period at the end.
-const specialReplacer = "<godotSpecialReplacer>"
-
-type parsedFile struct {
- fset *token.FileSet
- file *ast.File
- lines []string
-}
-
-func newParsedFile(file *ast.File, fset *token.FileSet) (*parsedFile, error) {
- if file == nil || fset == nil || len(file.Comments) == 0 {
- return nil, errEmptyInput
- }
-
- pf := parsedFile{
- fset: fset,
- file: file,
- }
-
- var err error
-
- // Read original file. This is necessary for making a replacements for
- // inline comments. I couldn't find a better way to get original line
- // with code and comment without reading the file. Function `Format`
- // from "go/format" won't help here if the original file is not gofmt-ed.
- pf.lines, err = readFile(file, fset)
- if err != nil {
- return nil, fmt.Errorf("read file: %w", err)
- }
-
- // Dirty hack. For some cases Go generates temporary files during
- // compilation process if there is a cgo block in the source file. Some of
- // these temporary files are just copies of original source files but with
- // new generated comments at the top. Because of them the content differs
- // from AST. For some reason it differs only in golangci-lint. I failed to
- // find out the exact description of the process, so let's just skip files
- // generated by cgo.
- if isCgoGenerated(pf.lines) {
- return nil, errUnsuitableInput
- }
-
- // Check consistency to avoid checking slice indexes in each function.
- // Note that `PositionFor` is used with `adjusted=false` to skip `//line`
- // directives that can set references to other files (e.g. templates)
- // instead of the real ones, and break consistency here.
- // Issue: https://github.com/tetafro/godot/issues/32
- lastComment := pf.file.Comments[len(pf.file.Comments)-1]
- if p := pf.fset.PositionFor(lastComment.End(), false); len(pf.lines) < p.Line {
- return nil, fmt.Errorf("inconsistency between file and AST: %s", p.Filename)
- }
-
- return &pf, nil
-}
-
-// getComments extracts comments from a file.
-func (pf *parsedFile) getComments(scope Scope, exclude []*regexp.Regexp) []comment {
- var comments []comment
- decl := pf.getDeclarationComments(exclude)
- switch scope {
- case AllScope:
- // All comments
- comments = pf.getAllComments(exclude)
- case TopLevelScope:
- // All top level comments and comments from the inside
- // of top level blocks
- comments = append(
- pf.getBlockComments(exclude),
- pf.getTopLevelComments(exclude)...,
- )
- case DeclScope:
- // Top level declaration comments and comments from the inside
- // of top level blocks
- comments = append(pf.getBlockComments(exclude), decl...)
- }
-
- // Set `decl` flag
- setDecl(comments, decl)
-
- return comments
-}
-
-// getBlockComments gets comments from the inside of top level blocks:
-// var (...), const (...).
-func (pf *parsedFile) getBlockComments(exclude []*regexp.Regexp) []comment {
- var comments []comment
- for _, decl := range pf.file.Decls {
- d, ok := decl.(*ast.GenDecl)
- if !ok {
- continue
- }
- // No parenthesis == no block
- if d.Lparen == 0 {
- continue
- }
- for _, c := range pf.file.Comments {
- if c == nil || len(c.List) == 0 {
- continue
- }
- // Skip comments outside this block
- if d.Lparen > c.Pos() || c.Pos() > d.Rparen {
- continue
- }
- // Skip comments that are not top-level for this block
- // (the block itself is top level, so comments inside this block
- // would be on column 2)
- //nolint:gomnd
- if pf.fset.Position(c.Pos()).Column != 2 {
- continue
- }
- firstLine := pf.fset.Position(c.Pos()).Line
- lastLine := pf.fset.Position(c.End()).Line
- comments = append(comments, comment{
- lines: pf.lines[firstLine-1 : lastLine],
- text: getText(c, exclude),
- start: pf.fset.Position(c.List[0].Slash),
- })
- }
- }
- return comments
-}
-
-// getTopLevelComments gets all top level comments.
-func (pf *parsedFile) getTopLevelComments(exclude []*regexp.Regexp) []comment {
- var comments []comment //nolint:prealloc
- for _, c := range pf.file.Comments {
- if c == nil || len(c.List) == 0 {
- continue
- }
- if pf.fset.Position(c.Pos()).Column != 1 {
- continue
- }
- firstLine := pf.fset.Position(c.Pos()).Line
- lastLine := pf.fset.Position(c.End()).Line
- comments = append(comments, comment{
- lines: pf.lines[firstLine-1 : lastLine],
- text: getText(c, exclude),
- start: pf.fset.Position(c.List[0].Slash),
- })
- }
- return comments
-}
-
-// getDeclarationComments gets top level declaration comments.
-func (pf *parsedFile) getDeclarationComments(exclude []*regexp.Regexp) []comment {
- var comments []comment //nolint:prealloc
- for _, decl := range pf.file.Decls {
- var cg *ast.CommentGroup
- switch d := decl.(type) {
- case *ast.GenDecl:
- cg = d.Doc
- case *ast.FuncDecl:
- cg = d.Doc
- }
-
- if cg == nil || len(cg.List) == 0 {
- continue
- }
-
- firstLine := pf.fset.Position(cg.Pos()).Line
- lastLine := pf.fset.Position(cg.End()).Line
- comments = append(comments, comment{
- lines: pf.lines[firstLine-1 : lastLine],
- text: getText(cg, exclude),
- start: pf.fset.Position(cg.List[0].Slash),
- })
- }
- return comments
-}
-
-// getAllComments gets every single comment from the file.
-func (pf *parsedFile) getAllComments(exclude []*regexp.Regexp) []comment {
- var comments []comment //nolint:prealloc
- for _, c := range pf.file.Comments {
- if c == nil || len(c.List) == 0 {
- continue
- }
- firstLine := pf.fset.Position(c.Pos()).Line
- lastLine := pf.fset.Position(c.End()).Line
- comments = append(comments, comment{
- lines: pf.lines[firstLine-1 : lastLine],
- start: pf.fset.Position(c.List[0].Slash),
- text: getText(c, exclude),
- })
- }
- return comments
-}
-
-// getText extracts text from comment. If the comment is a special block
-// (e.g., CGO code), a block of empty lines is returned. If comment contains
-// special lines (e.g., tags or indented code examples), they are replaced
-// with `specialReplacer` to skip checks for them.
-// The result can be multiline.
-func getText(comment *ast.CommentGroup, exclude []*regexp.Regexp) (s string) {
- if len(comment.List) > 0 && isSpecialBlock(comment.List[0].Text) {
- return ""
- }
-
- for _, c := range comment.List {
- text := c.Text
- isBlock := false
- if strings.HasPrefix(c.Text, "/*") {
- isBlock = true
- text = strings.TrimPrefix(text, "/*")
- text = strings.TrimSuffix(text, "*/")
- }
- for _, line := range strings.Split(text, "\n") {
- if isSpecialLine(line) {
- s += specialReplacer + "\n"
- continue
- }
- if !isBlock {
- line = strings.TrimPrefix(line, "//")
- }
- if matchAny(line, exclude) {
- s += specialReplacer + "\n"
- continue
- }
- s += line + "\n"
- }
- }
- if len(s) == 0 {
- return ""
- }
- return s[:len(s)-1] // trim last "\n"
-}
-
-// readFile reads file and returns its lines as strings.
-func readFile(file *ast.File, fset *token.FileSet) ([]string, error) {
- fname := fset.File(file.Package)
- f, err := os.ReadFile(fname.Name())
- if err != nil {
- return nil, err //nolint:wrapcheck
- }
- return strings.Split(string(f), "\n"), nil
-}
-
-// setDecl sets `decl` flag to comments which are declaration comments.
-func setDecl(comments, decl []comment) {
- for _, d := range decl {
- for i, c := range comments {
- if d.start == c.start {
- comments[i].decl = true
- break
- }
- }
- }
-}
-
-// matchAny checks if string matches any of given regexps.
-func matchAny(s string, rr []*regexp.Regexp) bool {
- for _, re := range rr {
- if re.MatchString(s) {
- return true
- }
- }
- return false
-}
-
-func isCgoGenerated(lines []string) bool {
- for i := range lines {
- if strings.Contains(lines[i], "Code generated by cmd/cgo") {
- return true
- }
- }
- return false
-}
diff --git a/vendor/github.com/tetafro/godot/godot.go b/vendor/github.com/tetafro/godot/godot.go
deleted file mode 100644
index e825e9a6d..000000000
--- a/vendor/github.com/tetafro/godot/godot.go
+++ /dev/null
@@ -1,129 +0,0 @@
-// Package godot checks if comments contain a period at the end of the last
-// sentence if needed.
-package godot
-
-import (
- "errors"
- "fmt"
- "go/ast"
- "go/token"
- "os"
- "regexp"
- "sort"
- "strings"
-)
-
-// NOTE: Line and column indexes are 1-based.
-
-// NOTE: Errors `invalid line number inside comment...` should never happen.
-// Their goal is to prevent panic, if there's a bug with array indexes.
-
-// Issue contains a description of linting error and a recommended replacement.
-type Issue struct {
- Pos token.Position
- Message string
- Replacement string
-}
-
-// comment is an internal representation of AST comment entity with additional
-// data attached. The latter is used for creating a full replacement for
-// the line with issues.
-type comment struct {
- lines []string // unmodified lines from file
- text string // concatenated `lines` with special parts excluded
- start token.Position // position of the first symbol in comment
- decl bool // whether comment is a declaration comment
-}
-
-// Run runs this linter on the provided code.
-func Run(file *ast.File, fset *token.FileSet, settings Settings) ([]Issue, error) {
- pf, err := newParsedFile(file, fset)
- if errors.Is(err, errEmptyInput) || errors.Is(err, errUnsuitableInput) {
- return nil, nil
- }
- if err != nil {
- return nil, fmt.Errorf("parse input file: %w", err)
- }
-
- exclude := make([]*regexp.Regexp, len(settings.Exclude))
- for i := 0; i < len(settings.Exclude); i++ {
- exclude[i], err = regexp.Compile(settings.Exclude[i])
- if err != nil {
- return nil, fmt.Errorf("invalid regexp: %w", err)
- }
- }
-
- comments := pf.getComments(settings.Scope, exclude)
- issues := checkComments(comments, settings)
- sortIssues(issues)
-
- return issues, nil
-}
-
-// Fix fixes all issues and returns new version of file content.
-func Fix(path string, file *ast.File, fset *token.FileSet, settings Settings) ([]byte, error) {
- // Read file
- content, err := os.ReadFile(path) //nolint:gosec
- if err != nil {
- return nil, fmt.Errorf("read file: %w", err)
- }
- if len(content) == 0 {
- return nil, nil
- }
-
- issues, err := Run(file, fset, settings)
- if err != nil {
- return nil, fmt.Errorf("run linter: %w", err)
- }
-
- // slice -> map
- m := map[int]Issue{}
- for _, iss := range issues {
- m[iss.Pos.Line] = iss
- }
-
- // Replace lines from issues
- fixed := make([]byte, 0, len(content))
- for i, line := range strings.Split(string(content), "\n") {
- newline := line
- if iss, ok := m[i+1]; ok {
- newline = iss.Replacement
- }
- fixed = append(fixed, []byte(newline+"\n")...)
- }
- fixed = fixed[:len(fixed)-1] // trim last "\n"
-
- return fixed, nil
-}
-
-// Replace rewrites original file with its fixed version.
-func Replace(path string, file *ast.File, fset *token.FileSet, settings Settings) error {
- info, err := os.Stat(path)
- if err != nil {
- return fmt.Errorf("check file: %w", err)
- }
- mode := info.Mode()
-
- fixed, err := Fix(path, file, fset, settings)
- if err != nil {
- return fmt.Errorf("fix issues: %w", err)
- }
-
- if err := os.WriteFile(path, fixed, mode); err != nil {
- return fmt.Errorf("write file: %w", err)
- }
- return nil
-}
-
-// sortIssues sorts by filename, line and column.
-func sortIssues(iss []Issue) {
- sort.Slice(iss, func(i, j int) bool {
- if iss[i].Pos.Filename != iss[j].Pos.Filename {
- return iss[i].Pos.Filename < iss[j].Pos.Filename
- }
- if iss[i].Pos.Line != iss[j].Pos.Line {
- return iss[i].Pos.Line < iss[j].Pos.Line
- }
- return iss[i].Pos.Column < iss[j].Pos.Column
- })
-}
diff --git a/vendor/github.com/tetafro/godot/settings.go b/vendor/github.com/tetafro/godot/settings.go
deleted file mode 100644
index b71bf5d58..000000000
--- a/vendor/github.com/tetafro/godot/settings.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package godot
-
-// Settings contains linter settings.
-type Settings struct {
- // Which comments to check (top level declarations, top level, all).
- Scope Scope
-
- // Regexp for excluding particular comment lines from check.
- Exclude []string
-
- // Check periods at the end of sentences.
- Period bool
-
- // Check that first letter of each sentence is capital.
- Capital bool
-}
-
-// Scope sets which comments should be checked.
-type Scope string
-
-// List of available check scopes.
-const (
- // DeclScope is for top level declaration comments.
- DeclScope Scope = "declarations"
- // TopLevelScope is for all top level comments.
- TopLevelScope Scope = "toplevel"
- // AllScope is for all comments.
- AllScope Scope = "all"
-)