@@ -14,6 +14,11 @@ import (
1414 "github.com/golangci/gofmt/gofmt/internal/diff"
1515)
1616
17+ type Options struct {
18+ NeedSimplify bool
19+ RewriteRules []RewriteRule
20+ }
21+
1722var parserModeMu sync.RWMutex
1823
1924type RewriteRule struct {
@@ -73,6 +78,32 @@ func RunRewrite(filename string, needSimplify bool, rewriteRules []RewriteRule)
7378 return diff .Diff (oldName , src , newName , res ), nil
7479}
7580
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+
76107func rewriteFileContent (fset * token.FileSet , file * ast.File , rewriteRules []RewriteRule ) (* ast.File , error ) {
77108 for _ , rewriteRule := range rewriteRules {
78109 pattern , err := parseExpression (rewriteRule .Pattern , "pattern" )
0 commit comments