Esempio n. 1
0
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
Esempio n. 2
0
	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