def preceding_trg_from_pos(self, buf, pos, curr_pos, preceding_trg_terminators=None, DEBUG=False): # DEBUG = True if DEBUG: print "pos: %d" % (pos,) print "ch: %r" % (buf.accessor.char_at_pos(pos),) print "curr_pos: %d" % (curr_pos,) if not self.gocode_present: return if pos != curr_pos and self._last_trg_type == "names": # The last trigger type was a 3-char trigger "names", we must try # triggering from the same point as before to get other available # trigger types defined at the same poisition or before. trg = ProgLangTriggerIntelMixin.preceding_trg_from_pos( self, buf, pos + 2, curr_pos, preceding_trg_terminators, DEBUG=DEBUG ) else: trg = ProgLangTriggerIntelMixin.preceding_trg_from_pos( self, buf, pos, curr_pos, preceding_trg_terminators, DEBUG=DEBUG ) names_trigger = None style = None if pos > 0: accessor = buf.accessor if pos == curr_pos: # We actually care about whats left of the cursor. pos -= 1 style = accessor.style_at_pos(pos) if DEBUG: style_names = buf.style_names_from_style_num(style) print " style: %s (%s)" % (style, ", ".join(style_names)) if style in (1, 2): ac = AccessorCache(accessor, pos) prev_pos, prev_ch, prev_style = ac.getPrecedingPosCharStyle(style) if prev_style is not None and (pos - prev_pos) > 3: # We need at least 3 character for proper completion handling. names_trigger = self.trg_from_pos(buf, prev_pos + 4, implicit=False) if DEBUG: print "trg: %r" % (trg,) print "names_trigger: %r" % (names_trigger,) print "last_trg_type: %r" % (self._last_trg_type,) if names_trigger: if not trg: trg = names_trigger # Two triggers, choose the best one. elif trg.pos == names_trigger.pos: if self._last_trg_type != "names": # The names trigger gets priority over the other trigger # types, unless the previous trigger was also a names trg. trg = names_trigger elif trg.pos < names_trigger.pos: trg = names_trigger if trg: self._last_trg_type = trg.type return trg
def preceding_trg_from_pos(self, buf, pos, curr_pos, preceding_trg_terminators=None, DEBUG=False): #DEBUG = True if DEBUG: log.debug("pos: %d", pos) log.debug("ch: %r", buf.accessor.char_at_pos(pos)) log.debug("curr_pos: %d", curr_pos) if pos != curr_pos and self._last_trg_type == "names": # The last trigger type was a 3-char trigger "names", we must try # triggering from the same point as before to get other available # trigger types defined at the same poisition or before. trg = ProgLangTriggerIntelMixin.preceding_trg_from_pos( self, buf, pos+2, curr_pos, preceding_trg_terminators, DEBUG=DEBUG) else: trg = ProgLangTriggerIntelMixin.preceding_trg_from_pos( self, buf, pos, curr_pos, preceding_trg_terminators, DEBUG=DEBUG) names_trigger = None style = None if pos > 0: accessor = buf.accessor if pos == curr_pos: # We actually care about whats left of the cursor. pos -= 1 style = accessor.style_at_pos(pos) if DEBUG: style_names = buf.style_names_from_style_num(style) log.debug(" style: %s (%s)", style, ", ".join(style_names)) if style in (1,2): ac = AccessorCache(accessor, pos) prev_pos, prev_ch, prev_style = ac.getPrecedingPosCharStyle(style) if prev_style is not None and (pos - prev_pos) > 3: # We need at least 3 character for proper completion handling. names_trigger = self.trg_from_pos(buf, prev_pos + 4, implicit=False) if DEBUG: log.debug("trg: %r", trg) log.debug("names_trigger: %r", names_trigger) log.debug("last_trg_type: %r", self._last_trg_type) if names_trigger: if not trg: trg = names_trigger # Two triggers, choose the best one. elif trg.pos == names_trigger.pos: if self._last_trg_type != "names": # The names trigger gets priority over the other trigger # types, unless the previous trigger was also a names trg. trg = names_trigger elif trg.pos < names_trigger.pos: trg = names_trigger if trg: self._last_trg_type = trg.type return trg