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  }