-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnodeComplete.py
More file actions
executable file
·38 lines (31 loc) · 1.6 KB
/
nodeComplete.py
File metadata and controls
executable file
·38 lines (31 loc) · 1.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import sublime_plugin
import sublime
import os
ignoredDirectories = ['node_modules', 'swagger', 'generators']
requireWordSeparators = "./\\\"-:,.;<>~!@#$%^&*|+=[]{}`~?"
class NodeComplete(sublime_plugin.EventListener):
"""
For "require" statements, add autocompletion of modules in current open folders.
This is to make relative paths much easier to require.
"""
def on_query_completions(self, view, prefix, locations):
if not prefix or prefix not in 'require':
return []
currentFile = view.file_name()
#Only search on this drive.
folders = [folder for folder in sublime.active_window().folders() if folder[0] == currentFile[0]]
#map returns a list of lists, flatten this
files = [f for sublist in map(getFiles, folders) for f in sublist]
relativePaths = ["require('{0}')".format(os.path.relpath(fileName, os.path.dirname(currentFile))) for fileName in files]
return [formatQueryCompletionPath(rp) for rp in relativePaths]
def getFiles(folder):
files = []
for rootDirectory, subDirectories, directoryFiles in os.walk(folder):
subDirectories[:] = [directory for directory in subDirectories if directory not in ignoredDirectories]
files = files + [os.path.join(rootDirectory, fileName) for fileName in directoryFiles if fileName[-3:] == '.js']
return files
def formatQueryCompletionPath(path):
#Force forward slashes, remove extension and don't display '../' groups.
newPath = path.replace('\\', '/').replace('.js', '');
matchPath = newPath.replace('../', '')
return (matchPath, newPath)