def reduce_global_allies(keys): if(keyword_maps.get(keys) or keyword_maps.get('window.' + keys)): #如果已经有内容了,就返回吧 return keys newKeys = keys for reducer in global_reducer: r = re.compile(reducer[0]) newKeys = r.sub(reducer[1], newKeys) if(newKeys == keys): return keys else: return reduce_global_allies(newKeys) return keys
def on_query_completions(self, view, prefix, locations): jsscope = view.find_by_selector('source.js') if(not jsscope or not view.sel()): return [] inputChar = view.substr(sublime.Region(locations[0]-1, locations[0])) line = view.substr(view.line(view.sel()[0])) if(not self.scopes or re.compile('function').match(line)): self.scopes = all_scopes(view) view.scopes = self.scopes keys = capture_input(view) or maybe_wrap(view) if(keys): if(inputChar == '('): keys = keys[:-1] keys = keys.split('.') key_prefix = [] if(not inputChar == '('): keys.pop() #识别变量赋值: trim = QW.StringH.trim for key in keys: key_prefix.append(key) if(key): key_prefix = find_key_ally(view, '.'.join(key_prefix), view.sel()[0]).split('.') keys = key_prefix if(inputChar == '('): func = keys.pop() keys = '.'.join(keys) #规约规则 ''' document.body.childNodes -> __element__.childNodes -> __nodelist__ ''' print 'trigger :' + keys keys = reduce_global_allies(keys) print 'actual :' + keys if(not is_brackets_input(view)): #不是输入 '(' if keys: compeletions = keyword_maps.get(keys) or keyword_maps.get('.'.join(['window', keys])) or keyword_maps.get('__default') else: compeletions = keyword_maps.get('window') ret = [] #if(func): #[compeletions.get(key) or compeletions.get(' '+key) or compeletions.update({key: [key]}) for key in view.extract_completions(func)] keys = compeletions.keys() keys.sort() for compeletion in keys: ret.append((compeletions.get(compeletion)[0] + " ",compeletion.strip())) return ret else: #输入 '(' if(keys): compeletions = keyword_maps.get(keys) or keyword_maps.get('.'.join(['window', keys])) or keyword_maps.get('__default') compeletions = compeletions.get(func) or [""] else: compeletions = keyword_maps.get('window').get(func) or [""] if(func.startswith('function')): m = re.compile('\(.*?\)').search(func) if(m): compeletions.append(m.group(0)[1:-1]) if(compeletions): compeletions = compeletions[1:] or [""] ret = [] #print compeletions for compeletion in compeletions: ret.append(("(" + compeletion.replace('"', '') + ")",("" + compeletion + ")").replace('...)', ''))) return ret