github.com/vanstinator/golangci-lint@v0.0.0-20240223191551-cc572f00d9d1/pkg/golinters/bidichk.go (about) 1 package golinters 2 3 import ( 4 "strings" 5 6 "github.com/breml/bidichk/pkg/bidichk" 7 "golang.org/x/tools/go/analysis" 8 9 "github.com/vanstinator/golangci-lint/pkg/config" 10 "github.com/vanstinator/golangci-lint/pkg/golinters/goanalysis" 11 ) 12 13 func NewBiDiChkFuncName(cfg *config.BiDiChkSettings) *goanalysis.Linter { 14 a := bidichk.NewAnalyzer() 15 16 cfgMap := map[string]map[string]any{} 17 if cfg != nil { 18 var opts []string 19 20 if cfg.LeftToRightEmbedding { 21 opts = append(opts, "LEFT-TO-RIGHT-EMBEDDING") 22 } 23 if cfg.RightToLeftEmbedding { 24 opts = append(opts, "RIGHT-TO-LEFT-EMBEDDING") 25 } 26 if cfg.PopDirectionalFormatting { 27 opts = append(opts, "POP-DIRECTIONAL-FORMATTING") 28 } 29 if cfg.LeftToRightOverride { 30 opts = append(opts, "LEFT-TO-RIGHT-OVERRIDE") 31 } 32 if cfg.RightToLeftOverride { 33 opts = append(opts, "RIGHT-TO-LEFT-OVERRIDE") 34 } 35 if cfg.LeftToRightIsolate { 36 opts = append(opts, "LEFT-TO-RIGHT-ISOLATE") 37 } 38 if cfg.RightToLeftIsolate { 39 opts = append(opts, "RIGHT-TO-LEFT-ISOLATE") 40 } 41 if cfg.FirstStrongIsolate { 42 opts = append(opts, "FIRST-STRONG-ISOLATE") 43 } 44 if cfg.PopDirectionalIsolate { 45 opts = append(opts, "POP-DIRECTIONAL-ISOLATE") 46 } 47 48 cfgMap[a.Name] = map[string]any{ 49 "disallowed-runes": strings.Join(opts, ","), 50 } 51 } 52 53 return goanalysis.NewLinter( 54 a.Name, 55 "Checks for dangerous unicode character sequences", 56 []*analysis.Analyzer{a}, 57 cfgMap, 58 ).WithLoadMode(goanalysis.LoadModeSyntax) 59 }