llvm-project/clang/lib/Parse
Sam McCall 128ce70eef [CodeCompletion] Avoid spurious signature help for init-list args
Somewhat surprisingly, signature help is emitted as a side-effect of
computing the expected type of a function argument.
The reason is that both actions require enumerating the possible
function signatures and running partial overload resolution, and doing
this twice would be wasteful and complicated.

Change #1: document this, it's subtle :-)

However, sometimes we need to compute the expected type without having
reached the code completion cursor yet - in particular to allow
completion of designators.
eb4ab3358c did this but introduced a
regression - it emits signature help in the wrong location as a side-effect.

Change #2: only emit signature help if the code completion cursor was reached.

Currently there is PP.isCodeCompletionReached(), but we can't use it
because it's set *after* running code completion.
It'd be nice to set this implicitly when the completion token is lexed,
but ConsumeCodeCompletionToken() makes this complicated.

Change #3: call cutOffParsing() *first* when seeing a completion token.

After this, the fact that the Sema::Produce*SignatureHelp() functions
are even more confusing, as they only sometimes do that.
I don't want to rename them in this patch as it's another large
mechanical change, but we should soon.

Change #4: prepare to rename ProduceSignatureHelp() to GuessArgumentType() etc.

Differential Revision: https://reviews.llvm.org/D98488
2021-03-16 12:46:40 +01:00
..
CMakeLists.txt [openmp] Base of tablegen generated OpenMP common declaration 2020-06-23 10:32:32 -04:00
ParseAST.cpp [Support] Add TimeTraceScope constructor without detail arg 2019-12-11 14:32:21 +00:00
ParseCXXInlineMethods.cpp [NFC, Refactor] Modernize enum FunctionDefinitionKind (DeclSpech.h) into a scoped enum 2020-11-21 09:49:52 -06:00
ParseDecl.cpp [CodeCompletion] Avoid spurious signature help for init-list args 2021-03-16 12:46:40 +01:00
ParseDeclCXX.cpp [CodeCompletion] Avoid spurious signature help for init-list args 2021-03-16 12:46:40 +01:00
ParseExpr.cpp [CodeCompletion] Avoid spurious signature help for init-list args 2021-03-16 12:46:40 +01:00
ParseExprCXX.cpp [CodeCompletion] Avoid spurious signature help for init-list args 2021-03-16 12:46:40 +01:00
ParseInit.cpp [CodeCompletion] Avoid spurious signature help for init-list args 2021-03-16 12:46:40 +01:00
ParseObjc.cpp [CodeCompletion] Avoid spurious signature help for init-list args 2021-03-16 12:46:40 +01:00
ParseOpenMP.cpp [CodeCompletion] Avoid spurious signature help for init-list args 2021-03-16 12:46:40 +01:00
ParsePragma.cpp [clang] Mark re-injected tokens appropriately during pragma handling 2021-03-12 18:18:17 +01:00
ParseStmt.cpp [CodeCompletion] Avoid spurious signature help for init-list args 2021-03-16 12:46:40 +01:00
ParseStmtAsm.cpp [Parser] ParseMicrosoftAsmStatement - Replace bit '|' operator with logical '||' operator. (PR47071) 2020-10-05 14:23:28 +01:00
ParseTemplate.cpp PR45699: Fix crash if an unexpanded parameter pack appears in a 2020-12-03 15:26:06 -08:00
ParseTentative.cpp [clang] Add a new nullability annotation for swift async: _Nullable_result 2020-12-07 17:19:20 -05:00
Parser.cpp [CodeCompletion] Avoid spurious signature help for init-list args 2021-03-16 12:46:40 +01:00