errorformat
packagemoduleThis package is not in the latest version of its module.
Details
Validgo.mod file
The Go module system was introduced in Go 1.11 and is the official dependency management solution for Go.
Redistributable license
Redistributable licenses place minimal restrictions on how software can be used, modified, and redistributed.
Tagged version
Modules with tagged versions give importers more predictable builds.
Stable version
When a project reaches major version v1 it is considered stable.
- Learn more about best practices
Repository
Links
README¶
errorformat - Vim 'errorformat' implementation in Go
errorformat is Vim's quickfixerrorformat implementation in golang.
errorformat provides default errorformats for major tools.You can see defined errorformatshere.Also, it's easy toadd new errorformat in a similar way to Vim's errorformat.
Note that it's highly compatible with Vim implementation, but it doesn't support Vim regex.
▶ Playground ▶
Try errorformat onthe Playground!
The playground usesgopherjs to tryerrorformat implementation in Go with JavaScript ✨
Usage
import "github.com/reviewdog/errorformat"Example
Code:
in := `golint.new.go:3:5: exported var V should have comment or be unexportedgolint.new.go:5:5: exported var NewError1 should have comment or be unexportedgolint.new.go:7:1: comment on exported function F should be of the form "F ..."golint.new.go:11:1: comment on exported function F2 should be of the form "F2 ..."`efm, _ := errorformat.NewErrorformat([]string{`%f:%l:%c: %m`, `%-G%.%#`})s := efm.NewScanner(strings.NewReader(in))for s.Scan() { fmt.Println(s.Entry())}Output:
golint.new.go|3 col 5| exported var V should have comment or be unexportedgolint.new.go|5 col 5| exported var NewError1 should have comment or be unexportedgolint.new.go|7 col 1| comment on exported function F should be of the form "F ..."golint.new.go|11 col 1| comment on exported function F2 should be of the form "F2 ..."CLI tool
Installation
go get -u github.com/reviewdog/errorformat/cmd/errorformatUsage
Usage: errorformat [flags] [errorformat ...]errorformat reads compiler/linter/static analyzer result from STDIN, formatsthem by given 'errorformat' (90% compatible with Vim's errorformat. :herrorformat), and outputs formated result to STDOUT.Example: $ echo '/path/to/file:14:28: error message\nfile2:3:4: msg' | errorformat "%f:%l:%c: %m" /path/to/file|14 col 28| error message file2|3 col 4| msg $ golint ./... | errorformat -name=golintThe -f flag specifies an alternate format for the entry, using thesyntax of package template. The default output is equivalent to -f'{{.String}}'. The struct being passed to the template is: type Entry struct { // name of a file Filename string // line number Lnum int // column number (first column is 1) Col int // true: "col" is visual column // false: "col" is byte index Vcol bool // error number Nr int // search pattern used to locate the error Pattern string // description of the error Text string // type of the error, 'E', '1', etc. Type rune // true: recognized error message Valid bool // Original error lines (often one line. more than one line for multi-line // errorformat. :h errorformat-multi-line) Lines []string }Flags: -f string format template for -w=template (default "{{.String}}") -list list defined errorformats -name string defined errorformat name -sarif.tool-name string Tool name for Sarif writer format. Use -name flag if available. -w string writer format (template|checkstyle|jsonl|sarif) (default "template")$ cat testdata/sbt.in[warn] /path/to/F1.scala:203: local val in method f is never used: (warning smaple 3)[warn] val x = 1[warn] ^[warn] /path/to/F1.scala:204: local val in method f is never used: (warning smaple 2)[warn] val x = 2[warn] ^[error] /path/to/F2.scala:1093: error: value ++ is not a member of Int[error] val x = 1 ++ 2[error] ^[warn] /path/to/dir/F3.scala:83: local val in method f is never used[warn] val x = 4[warn] ^[error] /path/to/dir/F3.scala:84: error: value ++ is not a member of Int[error] val x = 5 ++ 2[error] ^[warn] /path/to/dir/F3.scala:86: local val in method f is never used[warn] val x = 6[warn] ^$ errorformat "%E[%t%.%+] %f:%l: error: %m" "%A[%t%.%+] %f:%l: %m" "%Z[%.%+] %p^" "%C[%.%+] %.%#" "%-G%.%#" < testdata/sbt.in/path/to/F1.scala|203 col 13 warning| local val in method f is never used: (warning smaple 3)/path/to/F1.scala|204 col 7 warning| local val in method f is never used: (warning smaple 2)/path/to/F2.scala|1093 col 15 error| value ++ is not a member of Int/path/to/dir/F3.scala|83 col 13 warning| local val in method f is never used/path/to/dir/F3.scala|84 col 19 error| value ++ is not a member of Int/path/to/dir/F3.scala|86 col 13 warning| local val in method f is never used$ cat fmts/testdata/sbt.in | errorformat -name=sbt -w=checkstyle<?xml version="1.0" encoding="UTF-8"?><checkstyle version="1.0"> <file name="/home/haya14busa/src/github.com/reviewdog/errorformat/fmts/testdata/resources/scala/scalac.scala"> <error column="3" line="6" message="missing argument list for method error in object Predef" severity="error"></error> <error column="15" line="4" message="private val in object F is never used" severity="warning"></error> <error column="15" line="5" message="private method in object F is never used" severity="warning"></error> </file></checkstyle>$ cat fmts/testdata/sbt.in | errorformat -name=sbt -w=jsonl{"filename":"/home/haya14busa/src/github.com/reviewdog/errorformat/fmts/testdata/resources/scala/scalac.scala","lnum":6,"col":3,"vcol":true,"nr":0,"pattern":"","text":"missing argument list for method error in object Predef","type":101,"valid":true,"lines":["[error] /home/haya14busa/src/github.com/reviewdog/errorformat/fmts/testdata/resources/scala/scalac.scala:6: missing argument list for method error in object Predef","[error] Unapplied methods are only converted to functions when a function type is expected.","[error] You can make this conversion explicit by writing `error _` or `error(_)` instead of `error`.","[error] error","[error] ^"]}{"filename":"/home/haya14busa/src/github.com/reviewdog/errorformat/fmts/testdata/resources/scala/scalac.scala","lnum":4,"col":15,"vcol":true,"nr":0,"pattern":"","text":"private val in object F is never used","type":119,"valid":true,"lines":["[warn] /home/haya14busa/src/github.com/reviewdog/errorformat/fmts/testdata/resources/scala/scalac.scala:4: private val in object F is never used","[warn] private val unused = 1","[warn] ^"]}{"filename":"/home/haya14busa/src/github.com/reviewdog/errorformat/fmts/testdata/resources/scala/scalac.scala","lnum":5,"col":15,"vcol":true,"nr":0,"pattern":"","text":"private method in object F is never used","type":119,"valid":true,"lines":["[warn] /home/haya14busa/src/github.com/reviewdog/errorformat/fmts/testdata/resources/scala/scalac.scala:5: private method in object F is never used","[warn] private def unusedF = {}","[warn] ^"]}SARIF Support (experimental)
It supportsSARIF (Static Analysis Results Interchange Format) as output experimentally. Use-w=sarif to give it a shot.
Example: errorformat -w=sarif
$ cat fmts/testdata/sbt.in | errorformat -name=sbt -w=sarif{ "$schema": "http://json.schemastore.org/sarif-2.1.0-rtm.4", "runs": [ { "results": [ { "level": "error", "locations": [ { "physicalLocation": { "artifactLocation": { "uri": "fmts/testdata/resources/scala/scalac.scala", "uriBaseId": "%SRCROOT%" }, "region": { "startColumn": 3, "startLine": 6 } } } ], "message": { "text": "missing argument list for method error in object Predef" } }, { "level": "warning", "locations": [ { "physicalLocation": { "artifactLocation": { "uri": "fmts/testdata/resources/scala/scalac.scala", "uriBaseId": "%SRCROOT%" }, "region": { "startColumn": 15, "startLine": 4 } } } ], "message": { "text": "private val in object F is never used" } }, { "level": "warning", "locations": [ { "physicalLocation": { "artifactLocation": { "uri": "fmts/testdata/resources/scala/scalac.scala", "uriBaseId": "%SRCROOT%" }, "region": { "startColumn": 15, "startLine": 5 } } } ], "message": { "text": "private method in object F is never used" } } ], "tool": { "driver": { "name": "sbt" } } } ], "version": "2.1.0"}Use cases of 'errorformat' outside Vim
- reviewdog/reviewdog - A code review dog who keeps your codebase healthy
- mattn/efm-langserver - General purpose Language Server
🐦 Author
haya14busa (https://github.com/haya14busa)
Documentation¶
Overview¶
Package errorformat provides 'errorformat' functionality of Vim. :herrorformat
Index¶
Examples¶
Constants¶
This section is empty.
Variables¶
This section is empty.
Functions¶
This section is empty.
Types¶
typeEfm¶
type Efm struct {// contains filtered or unexported fields}Efm represents a errorformat.
typeEntry¶
type Entry struct {// name of a fileFilenamestring `json:"filename"`// line numberLnumint `json:"lnum"`// End of line number if the item is multilineEndLnumint `json:"end_lnum"`// column number (first column is 1)Colint `json:"col"`// End of column number if the item has rangeEndColint `json:"end_col"`// true: "col" is visual column// false: "col" is byte indexVcolbool `json:"vcol"`// error numberNrint `json:"nr"`// search pattern used to locate the errorPatternstring `json:"pattern"`// description of the errorTextstring `json:"text"`// type of the error, 'E', '1', etc.Typerune `json:"type"`// true: recognized error messageValidbool `json:"valid"`// Original error lines (often one line. more than one line for multi-line// errorformat. :h errorformat-multi-line)Lines []string `json:"lines"`}Entry represents matched entry of errorformat, equivalent to Vim's quickfixlist item.
typeErrorformat¶
type Errorformat struct {Efms []*Efm}Errorformat provides errorformat feature.
Example¶
package mainimport ("fmt""strings""github.com/reviewdog/errorformat")func main() {in := `golint.new.go:3:5: exported var V should have comment or be unexportedgolint.new.go:5:5: exported var NewError1 should have comment or be unexportedgolint.new.go:7:1: comment on exported function F should be of the form "F ..."golint.new.go:11:1: comment on exported function F2 should be of the form "F2 ..."`efm, _ := errorformat.NewErrorformat([]string{`%f:%l:%c: %m`, `%-G%.%#`})s := efm.NewScanner(strings.NewReader(in))for s.Scan() {fmt.Println(s.Entry())}}Output:golint.new.go|3 col 5| exported var V should have comment or be unexportedgolint.new.go|5 col 5| exported var NewError1 should have comment or be unexportedgolint.new.go|7 col 1| comment on exported function F should be of the form "F ..."golint.new.go|11 col 1| comment on exported function F2 should be of the form "F2 ..."
funcNewErrorformat¶
func NewErrorformat(efms []string) (*Errorformat,error)
NewErrorformat compiles given errorformats string (efms) and returns a newErrorformat. It returns error if the errorformat is invalid.
func (*Errorformat)NewScanner¶
func (errorformat *Errorformat) NewScanner(rio.Reader) *Scanner
NewScanner returns a new Scanner to read from r.
typeMatch¶
type Match struct {Fstring// (%f) file nameNint// (%n) error numberLint// (%l) line numberCint// (%c) column numberTbyte// (%t) error typeMstring// (%m) error messageRstring// (%r) the "rest" of a single-line file messagePstring// (%p) pointer lineVint// (%v) virtual column numberSstring// (%s) search text// ExtensionsEint// (%e) end line numberKint// (%k) end column number}Match represents match of Efm. ref: Basic items in :h errorformat
typeScanner¶
type Scanner struct {*Errorformat// contains filtered or unexported fields}Scanner provides a interface for scanning compiler/linter/static analyzerresult using Errorformat.
Directories¶
| Path | Synopsis |
|---|---|
cmd | |
errorformatcommand | |
Package fmts holds defined errorformats. | Package fmts holds defined errorformats. |
Package writer provides error result writers. | Package writer provides error result writers. |