[cfe-dev] [GSoC][clang] Bash completion for clang project
Vassil Vassilev via cfe-dev
cfe-dev at lists.llvm.org
Wed Jun 7 13:51:57 PDT 2017
On 07/06/17 19:21, Rui Ueyama wrote:
> On Wed, Jun 7, 2017 at 5:02 AM, Vassil Vassilev
> <v.g.vassilev at gmail.com <mailto:v.g.vassilev at gmail.com>> wrote:
>
> 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.
>
>
> Ah, that sounds nice. One concern I had is that, if we enumerate all
> possible values for each option in .td files, we have to modify both a
> C++ file and a .td file when we add a new option value for an exiting
> flag, but that's probably not that bad.
Yes, indeed. I see this also as documentation for options goes in the
.td files and the implementation in the driver...
>
>
>> _______________________________________________
>> 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 <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>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170607/c1333323/attachment.html>
More information about the cfe-dev
mailing list