[cfe-commits] [PATCH] Add bindings for clang_getCompletionBriefComment to cindex.py

Tobias Grosser grosser at fim.uni-passau.de
Mon Sep 10 15:19:30 PDT 2012


On 09/10/2012 03:56 PM, Dmitri Gribenko wrote:
> Hello,
>
> The attached patch adds briefComment property to CompletionString.

Nice.

> In order to take advantage of this functionality, we also need to
> expose CXCodeComplete_Flags enum.  Is TranslationUnit class a good
> place to put these constants?

The way you implemented this mirrors exactly the way we have implemented 
the parsing flags. This means, it is definitely a reasonable solution.

However, looking at it, I got the feeling that there may be a nicer way. 
What about not exposing those flags at all, but adding some optional 
parameters to the complete function:

def codeComplete(self, path, line, column, unsaved_files=None,
                  include_macros=False, include_code_patterns=False,
                  include_brief_comments=False):
   options = 0

   if include_macros:
     options += 1

   if include_code_patterns:
     options += 2

   if include_brief_comments:
     options += 4

This seems to be a nicer interface. C not having named parameters, does 
not mean we cannot use them to enhance the python interface.

> Index: bindings/python/clang/cindex.py
> ===================================================================
> --- bindings/python/clang/cindex.py	(revision 163506)
> +++ bindings/python/clang/cindex.py	(working copy)
> @@ -1735,6 +1735,10 @@
>           res = conf.lib.clang_getCompletionAvailability(self.obj)
>           return availabilityKinds[res]
>
> +    @property
> +    def briefComment(self):
> +        return conf.lib.clang_getCompletionBriefComment(self.obj).spelling

Until today all methods return directly a CXString, but don't call 
'.spelling' on it. It seems to make sense to stay consistent here.

(You are right that returning a string directly could have some 
advantages, but, if this is the case, we should fix it everywhere and 
apply such a fix in a separate patch)

> +    # Used to indicate that brief documentation comments should be included
> +    # into the set of code completions returned from this translation unit.
> +    INCLUDE_BRIEF_COMMENTS_IN_CODE_COMPLETION = 128

I would call it:

        PARSE_INCLUDE_BRIEF_COMMENTS_IN_CODE_COMPLETION = 128

All elements of this enum are prefixed with PARSE_. For consistency, we 
should continue to do so.

> +    # Whether to include macros within the set of code completions returned.
> +    CODE_COMPLETE_INCLUDE_MACROS = 1
> +
> +    # Whether to include code patterns for language constructs within the set
> +    # of code completions, e.g., for loops.
> +    CODE_COMPLETE_INCLUDE_CODE_PATTERNS = 2
> +
> +    # Whether to include brief documentation within the set of code completions
> +    # returned.
> +    CODE_COMPLETE_INCLUDE_BRIEF_COMMENTS = 4

As mentioned above, you may consider to not expose them at all, but to 
use named parameters.

Cheers
Tobi

P.S.: This would be a great opportunity to get our first code completion 
test case.



More information about the cfe-commits mailing list