Skip to content

Commit 169a9a6

Browse files
authored
Merge pull request zyedidia#3259 from dmaluka/default-syntax-followup
Follow-ups after adding `default.yaml` support
2 parents c3052b4 + b929c61 commit 169a9a6

File tree

2 files changed

+56
-46
lines changed

2 files changed

+56
-46
lines changed

internal/buffer/buffer.go

Lines changed: 53 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -727,7 +727,7 @@ func findRealRuntimeSyntaxDef(name string, header *highlight.Header) *highlight.
727727
}
728728

729729
// findRuntimeSyntaxDef finds a specific syntax definition
730-
// in the runtime files
730+
// in the built-in syntax files
731731
func findRuntimeSyntaxDef(name string, header *highlight.Header) *highlight.Def {
732732
for _, f := range config.ListRuntimeFiles(config.RTSyntax) {
733733
if f.Name() == name {
@@ -740,6 +740,45 @@ func findRuntimeSyntaxDef(name string, header *highlight.Header) *highlight.Def
740740
return nil
741741
}
742742

743+
func resolveIncludes(syndef *highlight.Def) {
744+
includes := highlight.GetIncludes(syndef)
745+
if len(includes) == 0 {
746+
return
747+
}
748+
749+
var files []*highlight.File
750+
for _, f := range config.ListRuntimeFiles(config.RTSyntax) {
751+
data, err := f.Data()
752+
if err != nil {
753+
screen.TermMessage("Error loading syntax file " + f.Name() + ": " + err.Error())
754+
continue
755+
}
756+
757+
header, err := highlight.MakeHeaderYaml(data)
758+
if err != nil {
759+
screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error())
760+
continue
761+
}
762+
763+
for _, i := range includes {
764+
if header.FileType == i {
765+
file, err := highlight.ParseFile(data)
766+
if err != nil {
767+
screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error())
768+
continue
769+
}
770+
files = append(files, file)
771+
break
772+
}
773+
}
774+
if len(files) >= len(includes) {
775+
break
776+
}
777+
}
778+
779+
highlight.ResolveIncludes(syndef, files)
780+
}
781+
743782
// UpdateRules updates the syntax rules and filetype for this buffer
744783
// This is called when the colorscheme changes
745784
func (b *Buffer) UpdateRules() {
@@ -753,6 +792,8 @@ func (b *Buffer) UpdateRules() {
753792
return
754793
}
755794

795+
b.SyntaxDef = nil
796+
756797
// syntaxFileInfo is an internal helper structure
757798
// to store properties of one single syntax file
758799
type syntaxFileInfo struct {
@@ -828,7 +869,7 @@ func (b *Buffer) UpdateRules() {
828869
}
829870

830871
if !foundDef {
831-
// search for the syntax file in the runtime files
872+
// search for the syntax file in the built-in syntax files
832873
for _, f := range config.ListRuntimeFiles(config.RTSyntaxHeader) {
833874
data, err := f.Data()
834875
if err != nil {
@@ -909,53 +950,19 @@ func (b *Buffer) UpdateRules() {
909950
b.SyntaxDef = findRuntimeSyntaxDef(syntaxFile, header)
910951
}
911952

912-
if b.SyntaxDef != nil && highlight.HasIncludes(b.SyntaxDef) {
913-
includes := highlight.GetIncludes(b.SyntaxDef)
914-
915-
var files []*highlight.File
916-
for _, f := range config.ListRuntimeFiles(config.RTSyntax) {
917-
data, err := f.Data()
918-
if err != nil {
919-
screen.TermMessage("Error loading syntax file " + f.Name() + ": " + err.Error())
920-
continue
921-
}
922-
923-
header, err := highlight.MakeHeaderYaml(data)
924-
if err != nil {
925-
screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error())
926-
continue
927-
}
928-
929-
for _, i := range includes {
930-
if header.FileType == i {
931-
file, err := highlight.ParseFile(data)
932-
if err != nil {
933-
screen.TermMessage("Error parsing syntax file " + f.Name() + ": " + err.Error())
934-
continue
935-
}
936-
files = append(files, file)
937-
break
938-
}
939-
}
940-
if len(files) >= len(includes) {
941-
break
942-
}
953+
if b.SyntaxDef != nil {
954+
b.Settings["filetype"] = b.SyntaxDef.FileType
955+
} else {
956+
// search for the default file in the user's custom syntax files
957+
b.SyntaxDef = findRealRuntimeSyntaxDef("default", nil)
958+
if b.SyntaxDef == nil {
959+
// search for the default file in the built-in syntax files
960+
b.SyntaxDef = findRuntimeSyntaxDef("default", nil)
943961
}
944-
945-
highlight.ResolveIncludes(b.SyntaxDef, files)
946962
}
947963

948-
if b.Highlighter == nil || syntaxFile != "" {
949-
if b.SyntaxDef != nil {
950-
b.Settings["filetype"] = b.SyntaxDef.FileType
951-
} else {
952-
// search for the default file in the user's custom syntax files
953-
b.SyntaxDef = findRealRuntimeSyntaxDef("default", nil)
954-
if b.SyntaxDef == nil {
955-
// search for the default file in the runtime files
956-
b.SyntaxDef = findRuntimeSyntaxDef("default", nil)
957-
}
958-
}
964+
if b.SyntaxDef != nil {
965+
resolveIncludes(b.SyntaxDef)
959966
}
960967

961968
if b.SyntaxDef != nil {

runtime/help/colors.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,3 +392,6 @@ example, the following is possible for html:
392392
rules:
393393
- include: "css"
394394
```
395+
396+
Note that nested include (i.e. including syntax files that include other syntax
397+
files) is not supported yet.

0 commit comments

Comments
 (0)