@@ -14,6 +14,11 @@ import (
14
14
"github.com/golangci/gofmt/gofmt/internal/diff"
15
15
)
16
16
17
+ type Options struct {
18
+ NeedSimplify bool
19
+ RewriteRules []RewriteRule
20
+ }
21
+
17
22
var parserModeMu sync.RWMutex
18
23
19
24
type RewriteRule struct {
@@ -73,6 +78,32 @@ func RunRewrite(filename string, needSimplify bool, rewriteRules []RewriteRule)
73
78
return diff .Diff (oldName , src , newName , res ), nil
74
79
}
75
80
81
+ func Source (filename string , src []byte , opts Options ) ([]byte , error ) {
82
+ fset := token .NewFileSet ()
83
+
84
+ parserModeMu .Lock ()
85
+ initParserMode ()
86
+ parserModeMu .Unlock ()
87
+
88
+ file , sourceAdj , indentAdj , err := parse (fset , filename , src , false )
89
+ if err != nil {
90
+ return nil , err
91
+ }
92
+
93
+ file , err = rewriteFileContent (fset , file , opts .RewriteRules )
94
+ if err != nil {
95
+ return nil , err
96
+ }
97
+
98
+ ast .SortImports (fset , file )
99
+
100
+ if opts .NeedSimplify {
101
+ simplify (file )
102
+ }
103
+
104
+ return format (fset , file , sourceAdj , indentAdj , src , printer.Config {Mode : printerMode , Tabwidth : tabWidth })
105
+ }
106
+
76
107
func rewriteFileContent (fset * token.FileSet , file * ast.File , rewriteRules []RewriteRule ) (* ast.File , error ) {
77
108
for _ , rewriteRule := range rewriteRules {
78
109
pattern , err := parseExpression (rewriteRule .Pattern , "pattern" )
0 commit comments