Skip to content

Commit 5aa2e20

Browse files
committed
Syntax: Auto-complete base syntaxes
1 parent 60c2bcb commit 5aa2e20

File tree

3 files changed

+55
-1
lines changed

3 files changed

+55
-1
lines changed

Package/PackageDev.sublime-settings

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@
3030
// settings file for this to take effect.
3131
"settings.show_quick_edit_icon": true,
3232

33+
// List of patterns for syntax not to be displayed in completions.
34+
// Each theme containing one of the list's strings is hidden.
35+
"settings.exclude_syntax_patterns": [
36+
"*.tmLanguage",
37+
"Packages/zzz A File Icon zzz/**"
38+
],
39+
3340
// Whether or not to keep the scope suffix in the suggested test scopes
3441
// i.e. if the base scope is text.html.markdown
3542
// then suggest meta.example.markdown (true) vs meta.example (false).

Package/Sublime Text Syntax Definition/Sublime Text Syntax Definition.sublime-syntax

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ contexts:
199199
set:
200200
- meta_scope: meta.extends.sublime-syntax meta.path.sublime-syntax string.unquoted.plain.out.yaml
201201
- include: extended_syntax_file
202-
- match: ^\s*$
202+
- match: ^(?=\s*$)
203203
pop: 1
204204

205205
extended_syntax_file:

plugins/syntax_dev/completions.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import logging
22
import re
33
from collections import namedtuple
4+
from fnmatch import fnmatch
5+
from sublime_lib.resource_path import ResourcePath
46

57
import sublime
68
import sublime_plugin
@@ -266,6 +268,12 @@ def match_selector(selector, offset=0):
266268
):
267269
result = self._complete_branch_point()
268270

271+
elif match_selector(
272+
"meta.extends",
273+
-1,
274+
):
275+
result = self._complete_syntax_file()
276+
269277
# Auto-completion for variables in match patterns using 'variables' keys
270278
elif match_selector("keyword.other.variable"):
271279
result = self._complete_variable()
@@ -299,6 +307,45 @@ def _complete_context(self, prefix, locations):
299307
kind=TPL_CONTEXT.kind,
300308
)
301309

310+
def _complete_syntax_file(self):
311+
completions = []
312+
kind = (sublime.KIND_ID_VARIABLE, 's', 'Syntax')
313+
314+
settings = sublime.load_settings("PackageDev.sublime-settings")
315+
excludes = settings.get("settings.exclude_syntax_patterns", [])
316+
if not isinstance(excludes, list):
317+
excludes = []
318+
319+
try:
320+
my_folder = str(ResourcePath.from_file_path(self.view.file_name()).parent)
321+
except (TypeError, ValueError):
322+
my_folder = ""
323+
324+
for syntax in sublime.list_syntaxes():
325+
if any(fnmatch(syntax.path, pattern) for pattern in excludes):
326+
continue
327+
# add relative resource path completion (file name of siblings)
328+
if my_folder:
329+
folder, file = syntax.path.rsplit("/", 1)
330+
if folder == my_folder:
331+
completions.append(
332+
sublime.CompletionItem(
333+
trigger=file,
334+
kind=kind,
335+
annotation="hidden" if syntax.hidden else ""
336+
)
337+
)
338+
# add full resource path
339+
completions.append(
340+
sublime.CompletionItem(
341+
trigger=syntax.path,
342+
kind=kind,
343+
annotation="hidden" if syntax.hidden else ""
344+
)
345+
)
346+
347+
return completions
348+
302349
def _complete_keyword(self, prefix, locations):
303350

304351
def match_selector(selector, offset=0):

0 commit comments

Comments
 (0)