buffer: Refactor UpdateRules() by creating parseDefFromFile()

This will reduce the length of this function and thus improves the
readability.
This commit is contained in:
Jöran Karl 2024-04-14 18:01:12 +02:00
parent ed993a4021
commit 089160a7e4

View file

@ -682,6 +682,36 @@ func calcHash(b *Buffer, out *[md5.Size]byte) error {
return nil return nil
} }
func parseDefFromFile(f config.RuntimeFile, header *highlight.Header) *highlight.Def {
data, err := f.Data()
if err != nil {
screen.TermMessage("Error loading syntax file " + f.Name() + ": " + err.Error())
return nil
}
if header == nil {
header, err = highlight.MakeHeaderYaml(data)
if err != nil {
screen.TermMessage("Error parsing header for syntax file " + f.Name() + ": " + err.Error())
return nil
}
}
file, err := highlight.ParseFile(data)
if err != nil {
screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error())
return nil
}
syndef, err := highlight.ParseDef(file, header)
if err != nil {
screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error())
return nil
}
return syndef
}
// UpdateRules updates the syntax rules and filetype for this buffer // UpdateRules updates the syntax rules and filetype for this buffer
// This is called when the colorscheme changes // This is called when the colorscheme changes
func (b *Buffer) UpdateRules() { func (b *Buffer) UpdateRules() {
@ -850,23 +880,11 @@ func (b *Buffer) UpdateRules() {
// we found a syntax file using a syntax header file // we found a syntax file using a syntax header file
for _, f := range config.ListRuntimeFiles(config.RTSyntax) { for _, f := range config.ListRuntimeFiles(config.RTSyntax) {
if f.Name() == syntaxFile { if f.Name() == syntaxFile {
data, err := f.Data() syndef := parseDefFromFile(f, header)
if err != nil { if syndef == nil {
screen.TermMessage("Error loading syntax file " + f.Name() + ": " + err.Error())
continue continue
} }
file, err := highlight.ParseFile(data)
if err != nil {
screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error())
continue
}
syndef, err := highlight.ParseDef(file, header)
if err != nil {
screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error())
continue
}
b.SyntaxDef = syndef b.SyntaxDef = syndef
break break
} }
@ -916,29 +934,11 @@ func (b *Buffer) UpdateRules() {
// search for the default file in the user's custom syntax files // search for the default file in the user's custom syntax files
for _, f := range config.ListRealRuntimeFiles(config.RTSyntax) { for _, f := range config.ListRealRuntimeFiles(config.RTSyntax) {
if f.Name() == "default" { if f.Name() == "default" {
data, err := f.Data() syndef := parseDefFromFile(f, nil)
if err != nil { if syndef == nil {
screen.TermMessage("Error loading syntax file " + f.Name() + ": " + err.Error())
continue continue
} }
header, err = highlight.MakeHeaderYaml(data)
if err != nil {
screen.TermMessage("Error parsing header for syntax file " + f.Name() + ": " + err.Error())
continue
}
file, err := highlight.ParseFile(data)
if err != nil {
screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error())
continue
}
syndef, err := highlight.ParseDef(file, header)
if err != nil {
screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error())
continue
}
b.SyntaxDef = syndef b.SyntaxDef = syndef
break break
} }
@ -948,23 +948,11 @@ func (b *Buffer) UpdateRules() {
// search for the default file in the runtime files // search for the default file in the runtime files
for _, f := range config.ListRuntimeFiles(config.RTSyntax) { for _, f := range config.ListRuntimeFiles(config.RTSyntax) {
if f.Name() == "default" { if f.Name() == "default" {
data, err := f.Data() syndef := parseDefFromFile(f, nil)
if err != nil { if syndef == nil {
screen.TermMessage("Error loading syntax file " + f.Name() + ": " + err.Error())
continue continue
} }
file, err := highlight.ParseFile(data)
if err != nil {
screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error())
continue
}
syndef, err := highlight.ParseDef(file, header)
if err != nil {
screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error())
continue
}
b.SyntaxDef = syndef b.SyntaxDef = syndef
break break
} }