.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / honnef.co / go / tools@v0.1.1 / analysis / edit / edit.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/honnef.co/go/tools@v0.1.1/analysis/edit/edit.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/honnef.co/go/tools@v0.1.1/analysis/edit/edit.go
new file mode 100644 (file)
index 0000000..90bc5f8
--- /dev/null
@@ -0,0 +1,74 @@
+package edit
+
+import (
+       "bytes"
+       "go/ast"
+       "go/format"
+       "go/token"
+
+       "golang.org/x/tools/go/analysis"
+       "honnef.co/go/tools/pattern"
+)
+
+type Ranger interface {
+       Pos() token.Pos
+       End() token.Pos
+}
+
+type Range [2]token.Pos
+
+func (r Range) Pos() token.Pos { return r[0] }
+func (r Range) End() token.Pos { return r[1] }
+
+func ReplaceWithString(fset *token.FileSet, old Ranger, new string) analysis.TextEdit {
+       return analysis.TextEdit{
+               Pos:     old.Pos(),
+               End:     old.End(),
+               NewText: []byte(new),
+       }
+}
+
+func ReplaceWithNode(fset *token.FileSet, old Ranger, new ast.Node) analysis.TextEdit {
+       buf := &bytes.Buffer{}
+       if err := format.Node(buf, fset, new); err != nil {
+               panic("internal error: " + err.Error())
+       }
+       return analysis.TextEdit{
+               Pos:     old.Pos(),
+               End:     old.End(),
+               NewText: buf.Bytes(),
+       }
+}
+
+func ReplaceWithPattern(pass *analysis.Pass, after pattern.Pattern, state pattern.State, node Ranger) analysis.TextEdit {
+       r := pattern.NodeToAST(after.Root, state)
+       buf := &bytes.Buffer{}
+       format.Node(buf, pass.Fset, r)
+       return analysis.TextEdit{
+               Pos:     node.Pos(),
+               End:     node.End(),
+               NewText: buf.Bytes(),
+       }
+}
+
+func Delete(old Ranger) analysis.TextEdit {
+       return analysis.TextEdit{
+               Pos:     old.Pos(),
+               End:     old.End(),
+               NewText: nil,
+       }
+}
+
+func Fix(msg string, edits ...analysis.TextEdit) analysis.SuggestedFix {
+       return analysis.SuggestedFix{
+               Message:   msg,
+               TextEdits: edits,
+       }
+}
+
+func Selector(x, sel string) *ast.SelectorExpr {
+       return &ast.SelectorExpr{
+               X:   &ast.Ident{Name: x},
+               Sel: &ast.Ident{Name: sel},
+       }
+}