@@ -117,53 +117,21 @@ func (l *LexerRegistry) MatchMimeType(mimeType string) Lexer {
117117// Note that this iterates over all file patterns in all lexers, so is not fast.
118118func (l * LexerRegistry ) Match (filename string ) Lexer {
119119 filename = filepath .Base (filename )
120- matched := PrioritisedLexers {}
121120 // First, try primary filename matches.
121+ matched := PrioritisedLexers {}
122122 for _ , lexer := range l .Lexers {
123- config := lexer .Config ()
124- for _ , glob := range config .Filenames {
125- ok , err := filepath .Match (glob , filename )
126- if err != nil { // nolint
127- panic (err )
128- } else if ok {
129- matched = append (matched , lexer )
130- } else {
131- for _ , suf := range & ignoredSuffixes {
132- ok , err := filepath .Match (glob + suf , filename )
133- if err != nil {
134- panic (err )
135- } else if ok {
136- matched = append (matched , lexer )
137- break
138- }
139- }
140- }
123+ if matchGlobs (lexer .Config ().Filenames , filename ) {
124+ matched = append (matched , lexer )
141125 }
142126 }
143127 if len (matched ) > 0 {
144128 return slices .MinFunc (matched , compareLexersByPriority )
145129 }
146- matched = nil
147130 // Next, try filename aliases.
131+ matched = nil
148132 for _ , lexer := range l .Lexers {
149- config := lexer .Config ()
150- for _ , glob := range config .AliasFilenames {
151- ok , err := filepath .Match (glob , filename )
152- if err != nil { // nolint
153- panic (err )
154- } else if ok {
155- matched = append (matched , lexer )
156- } else {
157- for _ , suf := range & ignoredSuffixes {
158- ok , err := filepath .Match (glob + suf , filename )
159- if err != nil {
160- panic (err )
161- } else if ok {
162- matched = append (matched , lexer )
163- break
164- }
165- }
166- }
133+ if matchGlobs (lexer .Config ().AliasFilenames , filename ) {
134+ matched = append (matched , lexer )
167135 }
168136 }
169137 if len (matched ) > 0 {
@@ -172,6 +140,30 @@ func (l *LexerRegistry) Match(filename string) Lexer {
172140 return nil
173141}
174142
143+ // matchGlobs reports whether filename matches any of globs, either directly
144+ // or with one of the ignoredSuffixes appended.
145+ func matchGlobs (globs []string , filename string ) bool {
146+ for _ , glob := range globs {
147+ ok , err := filepath .Match (glob , filename )
148+ if err != nil { // nolint
149+ panic (err )
150+ }
151+ if ok {
152+ return true
153+ }
154+ for _ , suf := range & ignoredSuffixes {
155+ ok , err := filepath .Match (glob + suf , filename )
156+ if err != nil {
157+ panic (err )
158+ }
159+ if ok {
160+ return true
161+ }
162+ }
163+ }
164+ return false
165+ }
166+
175167// Analyse text content and return the "best" lexer..
176168func (l * LexerRegistry ) Analyse (text string ) Lexer {
177169 var picked Lexer
0 commit comments