Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork45
Vim's quickfix errorformat implementation in Go
License
reviewdog/errorformat
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
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.
Try errorformat onthe Playground!
The playground usesgopherjs to tryerrorformat implementation in Go with JavaScript ✨
import"github.com/reviewdog/errorformat"
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))fors.Scan() {fmt.Println(s.Entry())}
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 ..."go get -u github.com/reviewdog/errorformat/cmd/errorformatUsage: 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] ^"]}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"}
- reviewdog/reviewdog - A code review dog who keeps your codebase healthy
- mattn/efm-langserver - General purpose Language Server
haya14busa (https://github.com/haya14busa)
About
Vim's quickfix errorformat implementation in Go
Topics
Resources
License
Code of conduct
Contributing
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.