Beispiel #1
0
 def GetIncludes(self):
     includes = []
     for name, include_type in iteritems(self._includes):
         includes.append(
             responses.BuildCompletionData(name,
                                           GetPathTypeName(include_type)))
     return includes
Beispiel #2
0
def _ConvertCompletionData( completion_data ):
  return responses.BuildCompletionData(
    insertion_text = completion_data[ 'name' ],
    menu_text      = completion_data[ 'name' ],
    kind           = completion_data[ 'kind' ],
    extra_data     = completion_data[ 'kind' ]
  )
Beispiel #3
0
    def _FindLabels(self):
        """
        Find LaTeX labels for \\ref{} completion.

        This time we scan through all .tex files in the current
        directory and extract the content of all \label{} commands
        as sources for completion.
        """
        # recursively search in the root directory
        texs = " ".join(recursive_glob(self._data["root"], "*.tex"))
        cat_process = subprocess.Popen(shlex.split("cat %s" % texs),
                                       stdout=subprocess.PIPE)
        grep_process = subprocess.Popen(shlex.split(r"grep \\\\label"),
                                        stdin=cat_process.stdout,
                                        stdout=subprocess.PIPE)
        cat_process.stdout.close()

        lines = grep_process.communicate()[0]

        ret = []
        for label in lines.split("\n"):
            ret.append(
                responses.BuildCompletionData(
                    re.sub(r".*\label{(.*)}.*", r"\1", label)))

        return ret
Beispiel #4
0
def _ConvertCompletionData( completion_data ):
  return responses.BuildCompletionData(
    insertion_text = utils.ToUtf8IfNeeded( completion_data[ 'name' ] ),
    menu_text      = utils.ToUtf8IfNeeded( completion_data[ 'name' ] ),
    kind           = utils.ToUtf8IfNeeded( completion_data[ 'kind' ] ),
    extra_data     = utils.ToUtf8IfNeeded( completion_data[ 'kind' ] )
  )
Beispiel #5
0
 def ComputeCandidatesInner(self, request_data):
     return [
         responses.BuildCompletionData(completion['CompletionText'],
                                       completion['DisplayText'],
                                       completion['Description'])
         for completion in self._GetCompletions(request_data)
     ]
Beispiel #6
0
    def ComputeCandidatesInner(self, request_data):
        query = {
            'type': 'completions',
            'types': True,
            'docs': True,
            'filter': False,
            'caseInsensitive': True,
            'guess': False,
            'sort': False,
            'includeKeywords': False,
            'expandWordForward': False,
            'omitObjectPrototype': False
        }

        completions = self._GetResponse(query, request_data['start_codepoint'],
                                        request_data).get('completions', [])

        def BuildDoc(completion):
            doc = completion.get('type', 'Unknown type')
            if 'doc' in completion:
                doc = doc + '\n' + completion['doc']

            return doc

        return [
            responses.BuildCompletionData(completion['name'],
                                          completion.get('type', '?'),
                                          BuildDoc(completion))
            for completion in completions
        ]
Beispiel #7
0
 def GetYCMDCompletions(self):
     return [
         responses.BuildCompletionData(completion.name,
                                       menu_text=completion.description,
                                       detailed_info=completion.docbrief)
         for completion in self.GetCompletions()
     ]
Beispiel #8
0
 def OnBufferVisit(self, request_data):
     raw_candidates = request_data.get('ultisnips_snippets', [])
     self._candidates = [
         responses.BuildCompletionData(snip['trigger'],
                                       '<snip> ' + snip['description'])
         for snip in raw_candidates
     ]
Beispiel #9
0
def GeneratePathCompletionData(entries):
    completion_dicts = []
    for entry in entries:
        completion_dicts.append(
            responses.BuildCompletionData(entry[0], GetPathTypeName(entry[1])))

    return completion_dicts
Beispiel #10
0
def ConvertCompletionData(completion_data):
    return responses.BuildCompletionData(
        insertion_text=completion_data.TextToInsertInBuffer(),
        menu_text=completion_data.MainCompletionText(),
        extra_menu_info=completion_data.ExtraMenuInfo(),
        kind=completion_data.kind_.name,
        detailed_info=completion_data.DetailedInfoForPreviewWindow())
Beispiel #11
0
    def _FindLabels(self):
        """
        Find LaTeX labels for \ref{} completion.

        This time we scan through all .tex files in the current
        directory and extract the content of all \label{} commands
        as sources for completion.
        """
        ret = []
        for filename in self._Walk(self._main_directory, ".tex"):
            skip, cache = self._CacheDataAndSkip(filename)
            if skip:
                ret.extend(cache)
                continue

            resp = []
            for i, line in enumerate(codecs.open(filename, 'r', 'utf-8')):
                line = line.rstrip()
                match = re.search(r".*\label{(.*)}.*", line)
                if match is not None:
                    lid = re.sub(r".*\label{(.*)}.*", r"\1", line)
                    self._goto_labels[lid] = (filename, i + 1, match.start(1))
                    resp.append(responses.BuildCompletionData(lid))

            self._cached_data[filename] = resp
            ret.extend(resp)
        return ret
Beispiel #12
0
    def _FindBibEntriesParser(self):
        """
        """
        ret = []
        parser = BibTexParser()
        parser.customization = bib_customizations
        for filename in self._Walk(self._main_directory, ".bib"):
            skip, cache = self._CacheDataAndSkip(filename)
            if skip:
                ret.extend(cache)
                continue

            resp = []
            with open(filename) as bibtex_file:
                bib_database = bibtexparser.load(bibtex_file, parser=parser)
                for entry in bib_database.entries:
                    if 'ID' not in entry:
                        continue
                    title = entry['title']
                    author = entry['author']
                    resp.append(
                        responses.BuildCompletionData(
                            entry['ID'], "%s (%s)" % (title, author)))

            ret.extend(resp)
            self._cached_data[filename] = resp
        return ret
Beispiel #13
0
 def ComputeCandidatesInner( self, request_data ):
   return [ responses.BuildCompletionData(
               completion[ 'name' ],
               completion[ 'description' ],
               completion[ 'docstring' ],
               extra_data = self._GetExtraData( completion ) )
            for completion in self._JediCompletions( request_data ) ]
Beispiel #14
0
def _ConvertDetailedCompletionData(request_data, completion_data):
    name = completion_data['name']
    display_parts = completion_data['displayParts']
    signature = ''.join([part['text'] for part in display_parts])
    if name == signature:
        extra_menu_info = None
        detailed_info = []
    else:
        # Strip new lines and indentation from the signature to display it on one
        # line.
        extra_menu_info = re.sub('\s+', ' ', signature)
        detailed_info = [signature]

    docs = completion_data.get('documentation', [])
    detailed_info += [doc['text'].strip() for doc in docs if doc]
    detailed_info = '\n\n'.join(detailed_info)

    fixits = None
    if 'codeActions' in completion_data:
        location = responses.Location(request_data['line_num'],
                                      request_data['column_num'],
                                      request_data['filepath'])
        fixits = responses.BuildFixItResponse([
            responses.FixIt(
                location, _BuildFixItForChanges(request_data,
                                                action['changes']),
                action['description'])
            for action in completion_data['codeActions']
        ])

    return responses.BuildCompletionData(insertion_text=name,
                                         extra_menu_info=extra_menu_info,
                                         detailed_info=detailed_info,
                                         kind=completion_data['kind'],
                                         extra_data=fixits)
Beispiel #15
0
 def BuildOurCompletes(self, name):
     """
     Surround the response value with brackets.
     TODO- perhaps add a square bracket option
     """
     return responses.BuildCompletionData("{" + name + "}",
                                          self._completion_target, None,
                                          name)
Beispiel #16
0
 def ComputeCandidatesInner( self, request_data ):
   script = self._GetJediScript( request_data )
   return [ responses.BuildCompletionData(
               ToUtf8IfNeeded( completion.name ),
               ToUtf8IfNeeded( completion.description ),
               ToUtf8IfNeeded( completion.docstring() ),
               extra_data = self._GetExtraData( completion ) )
            for completion in script.completions() ]
Beispiel #17
0
 def ComputeCandidatesInner(self, request_data):
     script = self._GetJediScript(request_data)
     return [
         responses.BuildCompletionData(str(completion.name),
                                       str(completion.description),
                                       str(completion.doc))
         for completion in script.completions()
     ]
Beispiel #18
0
def _ConvertDetailedCompletionData(completion_data, padding=0):
    name = completion_data['name']
    display_parts = completion_data['displayParts']
    signature = ''.join([p['text'] for p in display_parts])
    menu_text = '{0} {1}'.format(name.ljust(padding), signature)
    return responses.BuildCompletionData(insertion_text=name,
                                         menu_text=menu_text,
                                         kind=completion_data['kind'])
 def ComputeCandidatesInner( self, request_data ):
   with self._jedi_lock:
     return [ responses.BuildCompletionData(
       insertion_text = completion.name,
       # We store the Completion object returned by Jedi in the extra_data
       # field to detail the candidates once the filtering is done.
       extra_data = completion
     ) for completion in self._GetJediScript( request_data ).completions() ]
Beispiel #20
0
 def ComputeCandidatesInner(self, request_data):
     solutioncompleter = self._GetSolutionCompleter(request_data)
     return [
         responses.BuildCompletionData(completion['CompletionText'],
                                       completion['DisplayText'],
                                       completion['Description'], None,
                                       completion['Kind'])
         for completion in solutioncompleter._GetCompletions(request_data)
     ]
Beispiel #21
0
 def ComputeCandidatesInner(self, request_data):
     return [
         responses.BuildCompletionData(
             completion['CompletionText'], completion['DisplayText'],
             completion['Description'], None, None, {
                 "required_namespace_import":
                 completion['RequiredNamespaceImport']
             }) for completion in self._GetCompletions(request_data)
     ]
Beispiel #22
0
def _ConvertCompletionData(completion_data):
    return responses.BuildCompletionData(
        insertion_text=completion_data['name'],
        menu_text=completion_data['name'],
        extra_menu_info=completion_data['type'],
        kind=completion_data['class'],
        detailed_info=' '.join([
            completion_data['name'], completion_data['type'],
            completion_data['class']
        ]))
Beispiel #23
0
    def ComputeCandidatesInner(self, request_data):
        query = {
            'type': 'completions',
            'types': True,
            'docs': True,
            'filter': False,
            'caseInsensitive': True,
            'guess': False,
            'sort': False,
            'includeKeywords': False,
            'expandWordForward': False,
            'omitObjectPrototype': False
        }

        response = self._GetResponse(query, request_data['start_codepoint'],
                                     request_data)

        completions = response.get('completions', [])
        tern_start_codepoint = response['start']['ch']

        # Tern returns the range of the word in the file which it is replacing. This
        # may not be the same range that our "completion start column" calculation
        # decided (i.e. it might not strictly be an identifier according to our
        # rules). For example, when completing:
        #
        # require( '|
        #
        # with the cursor on |, tern returns something like 'test' (i.e. including
        # the single-quotes). Single-quotes are not a JavaScript identifier, so
        # should not normally be considered an identifier character, but by using
        # our own start_codepoint calculation, the inserted string would be:
        #
        # require( ''test'
        #
        # which is clearly incorrect. It should be:
        #
        # require( 'test'
        #
        # So, we use the start position that tern tells us to use.
        # We add 1 because tern offsets are 0-based and ycmd offsets are 1-based
        request_data['start_codepoint'] = tern_start_codepoint + 1

        def BuildDoc(completion):
            doc = completion.get('type', 'Unknown type')
            if 'doc' in completion:
                doc = doc + '\n' + completion['doc']

            return doc

        return [
            responses.BuildCompletionData(completion['name'],
                                          completion.get('type', '?'),
                                          BuildDoc(completion))
            for completion in completions
        ]
Beispiel #24
0
def _ConvertDetailedCompletionData(completion_data, padding=0):
    name = completion_data['name']
    display_parts = completion_data['displayParts']
    signature = ''.join([p['text'] for p in display_parts])

    # needed to strip new lines and indentation from the signature
    signature = re.sub('\s+', ' ', signature)
    menu_text = '{0} {1}'.format(name.ljust(padding), signature)
    return responses.BuildCompletionData(insertion_text=name,
                                         menu_text=menu_text,
                                         kind=completion_data['kind'])
Beispiel #25
0
 def ComputeCandidatesInner(self, request_data):
     with self._jedi_lock:
         return [
             responses.BuildCompletionData(
                 insertion_text=completion.name,
                 extra_menu_info=completion.description,
                 detailed_info=completion.docstring(),
                 kind=completion.type,
                 extra_data=self._GetExtraData(completion)) for completion
             in self._GetJediScript(request_data).completions()
         ]
Beispiel #26
0
 def ComputeCandidatesInner(self, request_data):
     with self._jedi_lock:
         completions = [
             responses.BuildCompletionData(insertion_text=completion.name,
                                           extra_menu_info="    ▸ jedi",
                                           detailed_info="",
                                           kind="",
                                           extra_data=None) for completion
             in self._GetJediScript(request_data).completions()
         ]
         return completions
Beispiel #27
0
def _GeneratePathCompletionCandidates(path_dir):
    completions = []

    unicode_path = ToUnicode(path_dir)

    for rel_path in ListDirectory(unicode_path):
        absolute_path = os.path.join(unicode_path, rel_path)
        path_type = GetPathTypeName(GetPathType(absolute_path))
        completions.append(responses.BuildCompletionData(rel_path, path_type))

    return completions
 def ComputeCandidates(self, request_data):
     script = self._GetScript(request_data)
     completions = self._Request('completions', script)
     return [
         responses.BuildCompletionData(
             ToUtf8IfNeeded(completion['name']),
             ToUtf8IfNeeded(completion['description']),
             ToUtf8IfNeeded(completion['docstring']),
             extra_data=self._GetExtraData(completion))
         for completion in completions
     ]
Beispiel #29
0
 def ComputeCandidatesInner(self, request_data):
     solutioncompleter = self._GetSolutionCompleter(request_data)
     completion_type = self.CompletionType(request_data)
     return [
         responses.BuildCompletionData(
             completion['CompletionText'], completion['DisplayText'],
             completion['Description'], None, None, {
                 "required_namespace_import":
                 completion['RequiredNamespaceImport']
             }) for completion in solutioncompleter._GetCompletions(
                 request_data, completion_type)
     ]
Beispiel #30
0
 def ComputeCandidatesInner(self, request_data):
     self._UpdateCurrentBuffer(request_data, discard_current_line=True)
     current_line = request_data['line_value']
     start_column = request_data['start_column']
     line = current_line[:start_column]
     if len(line) >= 2 and line[start_column - 2] == '.':
         fields = self.fields_pat.findall(line[:start_column])
         if len(fields):
             namelist = self.field_elem_pat.findall(fields[-1])
             return [
                 responses.BuildCompletionData(str(completion['word']),
                                               str(completion['menu']))
                 for completion in self.daemon.get_fields(namelist)
             ]
     else:
         return [
             responses.BuildCompletionData(
                 str(completion['word']),
                 str(completion['menu']),
             ) for completion in self.daemon.get_candidates()
         ]