Movatterモバイル変換


[0]ホーム

URL:


errorformat

packagemodule
v0.0.0-...-223c26dLatest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 20, 2025 License:MITImports:8Imported by:16

Details

Repository

github.com/reviewdog/errorformat

Links

README

errorformat - Vim 'errorformat' implementation in Go

TestscodecovGo Report CardLICENSEGo Reference

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/errorformat
Usage
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 &#43;&#43; 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 &#43;&#43; 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

🐦 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.

funcNewEfm

func NewEfm(errorformatstring) (*Efm,error)

NewEfm converts a 'errorformat' string to regular expression pattern withflags and returns Efm.

quickfix.c: efm_to_regpat

func (*Efm)Match

func (efm *Efm) Match(sstring) *Match

Match returns match against given string.

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.

func (*Entry)String

func (e *Entry) String()string

|| message/path/to/file|| message/path/to/file|1| message/path/to/file|1 col 14| message/path/to/file|1 col 14 error 8| message/path/to/file|1-2 col 14-28| message{filename}|{lnum}[-{end_lnum}][ col {col}[-{end_col}]][ {type} [{nr}]]| {text}

func (*Entry)Types

func (e *Entry) Types()string

Types makes a nice message out of the error character and the error number:

qf_types in src/quickfix.c

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.

func (*Scanner)Entry

func (s *Scanner) Entry() *Entry

Entry returns the most recent entry generated by a call to Scan.

func (*Scanner)Scan

func (s *Scanner) Scan()bool

Scan advances the Scanner to the next entry matched with errorformat, whichwill then be available through the Entry method. It returns falsewhen the scan stops by reaching the end of the input.

Source Files

View all Source files

Directories

PathSynopsis
cmd
Package fmts holds defined errorformats.
Package fmts holds defined errorformats.
Package writer provides error result writers.
Package writer provides error result writers.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f orF : Jump to
y orY : Canonical URL
go.dev uses cookies from Google to deliver and enhance the quality of its services and to analyze traffic.Learn more.

[8]ページ先頭

©2009-2025 Movatter.jp