[cfe-dev] [GSoC][clang] Bash completion for clang project

Vassil Vassilev via cfe-dev cfe-dev at lists.llvm.org
Wed Jun 7 05:02:53 PDT 2017


On 05/06/17 17:41, Rui Ueyama via cfe-dev wrote:
> On Thu, Jun 1, 2017 at 2:02 PM, Richard Smith via cfe-dev 
> <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
>
>     On 31 May 2017 at 06:21, Yuka Takahashi via cfe-dev
>     <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
>
>         Hello,
>
>         My name is Yuka Takahshi and I would like to ask few questions
>         regarding to GSoC project : bash-autocompletion for clang.
>         We are now trying to build flag completions for which we call
>         "value".
>         Eg. in -std=c++11, c++11 is a "value", and in
>         -analyzer-checker=alpha.cplusplus, alpha.cplusplus is a "value".
>
>         We are planning to implement most of the code in OptTable.cpp,
>         in order to reuse OptTable, which is generated by Options.inc.
>         Options.inc is generated via Tablegen from Options.td, so we
>         are planning to add the information of values into Options.td.
>
>         I would like to ask for a advice regarding how to implement
>         the flag like "-std=" and "-analyzer-checker=".
>         These flags are unique because their value information are
>         already in LangStandards.def for "-std=", and Checkers.td for
>         "-analyzer-checker=".
>         We are thinking to reuse these information and add these
>         information to Options.inc, so that we can handle the flag
>         completion in unified manner.
>         This way of implementation has further benefits from this GSoC
>         project, because from this we can make documentation more
>         simply and reduce custom handling of each value and code
>         duplication.
>
>         The problem is that, we are not sure what is the best way for
>         this implementaion.
>         For flags which are not like "-std=" and "-analyzer-checker=",
>         we decided to add a class to hold the value information in
>         Options.td. Eg. for "-stdlib=", ArgValues<"libc++, libstdc++,
>         platform">.
>         So we are looking for how to generate something like "libc++,
>         libstdc++, platform" from LangStandards.def and Checkers.td
>         for "-std=" and "-analyzer-checker=".
>
>
>     One way to do this would be to rewrite LangStandards.def as a .td
>     file, and extend clang-tblgen to generate something like the
>     current .def file from that .td file. Then you can include
>     LangStandards.td into Options.td and somehow specify that all of
>     the LangStandard records define possible values for the -std=
>     flag. (You could use something like ArgValueClass<"LangStandard">
>     for this case, ArgValueClass<"Checker"> for -analyzer-checker=,
>     and so on. Your tablegen backend is able to do arbitrary queries
>     over the tablegen records, so there are a variety of ways to
>     express this.)
>
>     Similar things can be done for other options that take values from
>     .def files, such as -fsanitize= (Basic/Sanitizers.def).
>
>
> I don't know if rewriting LangStandards.def just for shell 
> autocompletion is worth the effort, unless there's other reason to do 
> that. It seems you can define LANGSTANDARD macro before including this 
> file to get a list of all possible language options. You can use that 
> information to return all possible options when `-std=<tab>` is hit, 
> can't you?
The advantage outside of autocompletion would be that we can reduce the 
amount of StringSwitch cases handling the argument values in the driver 
and centralize it in a common place. This would give us the opportunity 
to diagnose enhance `error: invalid value "c+-11" for flag "-std="` with 
`Did you mean one of c++11, c++14, c++17` and alike.
>
>     _______________________________________________
>     cfe-dev mailing list
>     cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>
>     http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>     <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev>
>
>
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170607/d33f3ee1/attachment.html>


More information about the cfe-dev mailing list