Skip to content

Commit fbf2531

Browse files
alecthomasclaude
andcommitted
refactor: extract glob matching in LexerRegistry.Match
The glob-plus-ignored-suffix matching block was duplicated verbatim for Filenames and AliasFilenames; matchGlobs now implements it once with the nesting flattened. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 05563d0 commit fbf2531

1 file changed

Lines changed: 30 additions & 38 deletions

File tree

registry.go

Lines changed: 30 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
118118
func (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..
176168
func (l *LexerRegistry) Analyse(text string) Lexer {
177169
var picked Lexer

0 commit comments

Comments
 (0)