- Limit when this autocompletion can pop up.

- Remove some left over cruft from the text completer.
This commit is contained in:
Rob 2016-07-06 13:31:18 -07:00
parent 5d09e219c0
commit 228019ac89
2 changed files with 34 additions and 10 deletions

View file

@ -122,16 +122,36 @@ module.exports = (SnippetManager, autoLineEndings) ->
# meta: displayed right-justfied in popup # meta: displayed right-justfied in popup
lang = session.getMode()?.$id?.substr 'ace/mode/'.length lang = session.getMode()?.$id?.substr 'ace/mode/'.length
line = session.getLine pos.row line = session.getLine pos.row
completions = []
#If the prefix is a reserved word, don't autocomplete #If the prefix is a member expression, supress completions
fullPrefix = getFullIdentifier session, pos
fullPrefixParts = fullPrefix.split /[.:]/g
word = getCurrentWord session, pos
if fullPrefixParts.length > 2
@completions = []
return callback null, completions
beginningOfLine = session.getLine(pos.row).substring(0,pos.column - prefix.length)
unless (fullPrefixParts.length < 3 and /^(hero|self|this|@)$/.test(fullPrefixParts[0]) ) or /^\s*$/.test(beginningOfLine)
console.log "Bailing", fullPrefixParts, '|', prefix, '|', beginningOfLine, '|', pos.column - prefix.length
@completions = completions
return callback null, completions
#If the prefix is a reserved word, make enter just complete it
keywords = session.getMode()?.$highlightRules?.$keywordList keywords = session.getMode()?.$highlightRules?.$keywordList
if keywords and prefix in keywords if keywords and prefix in keywords
@completions = [] completions.push
return callback null, @completions content: prefix
caption: prefix
snippet: prefix + "\n"
score: 100
meta: '\u21E5'
word = getCurrentWord session, pos
snippetMap = SnippetManager.snippetMap snippetMap = SnippetManager.snippetMap
completions = []
SnippetManager.getActiveScopes(editor).forEach (scope) -> SnippetManager.getActiveScopes(editor).forEach (scope) ->
snippets = snippetMap[scope] or [] snippets = snippetMap[scope] or []
for s in snippets for s in snippets
@ -167,6 +187,14 @@ getCurrentWord = (doc, pos) ->
start++ if start >= 0 start++ if start >= 0
text.substring start, end text.substring start, end
getFullIdentifier = (doc, pos) ->
end = pos.column
start = end - 1
text = doc.getLine(pos.row)
start-- while start >= 0 and not text[start].match /\s+/
start++ if start >= 0
text.substring start, end
scrubSnippet = (snippet, caption, line, input, pos, lang, autoLineEndings, captureReturn) -> scrubSnippet = (snippet, caption, line, input, pos, lang, autoLineEndings, captureReturn) ->
# console.log "Zatanna snippet=#{snippet} caption=#{caption} line=#{line} input=#{input} pos.column=#{pos.column} lang=#{lang}" # console.log "Zatanna snippet=#{snippet} caption=#{caption} line=#{line} input=#{input} pos.column=#{pos.column} lang=#{lang}"
fuzzScore = 0.1 fuzzScore = 0.1

View file

@ -11,9 +11,7 @@ defaults =
language: 'javascript' language: 'javascript'
languagePrefixes: 'this.,@,self.' languagePrefixes: 'this.,@,self.'
completers: completers:
keywords: true
snippets: true snippets: true
text: true
@ -87,8 +85,6 @@ module.exports = class Zatanna
@completers.snippets = pos: 0 @completers.snippets = pos: 0
# Replace the default snippet completer with our custom one # Replace the default snippet completer with our custom one
@completers.snippets.comp = require('./snippets') @snippetManager, @options.autoLineEndings @completers.snippets.comp = require('./snippets') @snippetManager, @options.autoLineEndings
if @options.completers.keywords
@completers.keywords = pos: 1
activateCompleter: (comp) -> activateCompleter: (comp) ->
if Array.isArray comp if Array.isArray comp
@ -159,7 +155,7 @@ module.exports = class Zatanna
doLiveCompletion: (e) => doLiveCompletion: (e) =>
# console.log 'Zatanna doLiveCompletion', e # console.log 'Zatanna doLiveCompletion', e
return unless @options.basic or @options.liveCompletion or @options.completers.snippets or @options.completers.text return unless @options.basic or @options.liveCompletion or @options.completers.snippets
return if @paused return if @paused
TokenIterator = TokenIterator or ace.require('ace/token_iterator').TokenIterator TokenIterator = TokenIterator or ace.require('ace/token_iterator').TokenIterator