Sublime Forum

Code assist on Less variables

#1

Is there a way to get code assist typing “@” to comple Less variables?
The variables are not necessarily in the same file.

Thanks

0 Likes

#2

It would be extremely rad if we could have had this. but I doubt it! it needs parsing your less files and all your imports that makes it a little bit slow!

0 Likes

#3

You can create File Settings, syntax specific, and copy this:

{ // Additional situations to trigger auto complete "auto_complete_triggers": {"selector": "text.html", "characters": "@"} ] }
Change the ‘selector’ to, possibly, ‘source.less’ :question:

It is possible to tap into ‘on_query_completions’ and create a completions list which is only for less, and extracts @-completions from, for example, all open less-files. I suspect someone may have already created something similar :wink:

0 Likes

#4

Here’s some code I found, but it needs to be adapted to only search within .less files:

[code]import sublime_plugin, sublime

class AutocompleteAll(sublime_plugin.EventListener):

def on_query_completions(self, view, prefix, locations):
    window = sublime.active_window()
    # get results from each tab
    results = [v.extract_completions(prefix) for v in window.views() if v.buffer_id() != view.buffer_id()]
    results = (item,item) for sublist in results for item in sublist] #flatten
    results = list(set(results)) # make unique
    results.sort() # sort
    return results[/code]
0 Likes

#5

Something like this:

[code]import sublime_plugin, sublime

class AutocompleteLess(sublime_plugin.EventListener):

def on_query_completions(self, view, prefix, locations):
	if not view.match_selector(locations[0], 'source.less -string -comment -constant'):
		return ]
    window = sublime.active_window()
    # get results from each tab
    results = [v.extract_completions(prefix) for v in window.views() if v.buffer_id() != view.buffer_id()
		and v.match_selector(0, 'source.less')]
    results = (item,item) for sublist in results for item in sublist] #flatten
    results = list(set(results)) # make unique
    results.sort() # sort
    return results[/code]

but I haven’t tested it :smile:

0 Likes

#6

[quote=“agibsonsw”]Something like this:

[code]import sublime_plugin, sublime

class AutocompleteLess(sublime_plugin.EventListener):

def on_query_completions(self, view, prefix, locations):
	if not view.match_selector(locations[0], 'source.less -string -comment -constant'):
		return ]
    window = sublime.active_window()
    # get results from each tab
    results = [v.extract_completions(prefix) for v in window.views() if v.buffer_id() != view.buffer_id()
		and v.match_selector(0, 'source.less')]
    results = (item,item) for sublist in results for item in sublist] #flatten
    results = list(set(results)) # make unique
    results.sort() # sort
    return results[/code]

but I haven’t tested it :smile:[/quote]

I’ve tried this but doesn’t seems to work.

0 Likes

#7

Is there an error message in the Console (Ctrl ’ )?

It probably doesn’t recognise ‘source.less’. Isn’t this CSS? So perhaps ‘source.css’ and delete ‘-string -comment -constant’ for the moment, to see if this is the issue.

0 Likes