aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaCodeComplete.cpp
AgeCommit message (Collapse)Author
2010-04-07Implement code completion for Objective-C method declarations andDouglas Gregor
definitions, e.g., after - or - (id) we'll find all of the "likely" instance methods that one would want to declare or define at this point. In the latter case, we only produce results whose return types match "id". git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@100587 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-06When code completion produces an overload set as its results (e.g.,Douglas Gregor
while we're completing in the middle of a function call), also produce "ordinary" name results that show what can be typed at that point. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@100558 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-06Do not produce semicolons at the end of code-completion resultsDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@100557 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-06Only prove macros as code-completion results when we're in a caseDouglas Gregor
statement or for ordinary names. This means that we won't show macros when completing, e.g., member expressions such as "p->". git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@100555 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-06When sending a message to "id", apply some heuristics to try to narrowDouglas Gregor
down the set of code-completion results based on Objective-C conventions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@100548 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-06Make code-completion for Objective-C message sends to "id" work in theDouglas Gregor
presence of precompiled headers by forcibly loading all of the methods we know about from the PCH file before constructing our code-completion list. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@100535 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-06Implement support for code completion of an Objective-C message send toDouglas Gregor
"id" or an expression of type "id". In these cases, we produce a list of all of the (class or instance) methods, respectively, that we know about. Note that this implementation does not yet work well with precompiled headers; that's coming soon. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@100528 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-05Extend the type printing policy to allow one to turn off the printingDouglas Gregor
of file locations for anonymous tag types (e.g., "enum <anonymous at t.h:15:6>"), which can get rather long. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@100470 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-19Remember the "found declaration" for an overload candidate, which is theJohn McCall
entity (if applicable) which was actually looked up. If a candidate was found via a using declaration, this is the UsingShadowDecl; otherwise, if the candidate is template specialization, this is the template; otherwise, this is the function. The point of this exercise is that "found declarations" are the entities we do access control for, not their underlying declarations. Broadly speaking, this patch fixes access control for using declarations. There is a *lot* of redundant code calling into the overload-resolution APIs; we really ought to clean that up. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@98945 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-11Split C++ friend declarations into their own header/implementation file.John McCall
I'm expecting this portion of the AST to grow and change, and I'd like to be able to do that with minimal recompilation. If this proves unnecessary when access control is fully-implemented, I'll fold the classes back into DeclCXX.h. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@98249 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-01Keep an explicit stack of function and block scopes, each element ofDouglas Gregor
which has the label map, switch statement stack, etc. Previously, we had a single set of maps in Sema (for the function) along with a stack of block scopes. However, this lead to funky behavior with nested functions, e.g., in the member functions of local classes. The explicit-stack approach is far cleaner, and we retain a 1-element cache so that we're not malloc/free'ing every time we enter a function. Fixes PR6382. Also, tweaked the unused-variable warning suppression logic to look at errors within a given Scope rather than within a given function. The prior code wasn't looking at the right number-of-errors count when dealing with blocks, since the block's count would be deallocated before we got to ActOnPopScope. This approach works with nested blocks/functions, and gives tighter error recovery. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97518 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-18Add some spacing in the code-completion results for a return statementDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96567 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-08Thread a source location into the template-argument deduction routines. ThereJohn McCall
may be some other places that could take advantage of this new information, but I haven't really looked yet. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95600 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-03Implement the lvalue-to-rvalue conversion where needed. TheDouglas Gregor
lvalue-to-rvalue conversion adjusts lvalues of qualified, non-class type to rvalue expressions of the unqualified variant of that type. For example, given: const int i; (void)(i + 17); the lvalue-to-rvalue conversion for the subexpression "i" will turn it from an lvalue expression (a DeclRefExpr) with type 'const int' into an rvalue expression with type 'int'. Both C and C++ mandate this conversion, and somehow we've slid through without implementing it. We now have both DefaultFunctionArrayConversion and DefaultFunctionArrayLvalueConversion, and which gets used depends on whether we do the lvalue-to-rvalue conversion or not. Generally, we do the lvalue-to-rvalue conversion, but there are a few notable exceptions: - the left-hand side of a '.' operator - the left-hand side of an assignment - a C++ throw expression - a subscript expression that's subscripting a vector Making this change exposed two issues with blocks: - we were deducing const-qualified return types of non-class type from a block return, which doesn't fit well - we weren't always setting the known return type of a block when it was provided with the ^return-type syntax Fixes the current Clang-on-Clang compile failure and PR6076. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95167 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-26Pass access specifiers around in overload resolution.John McCall
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94485 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-21Teach code-completion to deal with calls to functions without prototypes.Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94076 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-14Switch a few callers of MaybeAddResult over to AddResult, when theDouglas Gregor
declarations we're adding do not need any name-hiding checks. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93431 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-14Switch code-completion's ivar lookup over to LookupVisibleDecls,Douglas Gregor
eliminating yet one more ResultBuilder::MaybeAddResult caller. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93430 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-14Start migrating code-completion results fromDouglas Gregor
ResultBuilder::MaybeAddResult over to ResultBuilder::AddResult. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93429 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-14Switch the remaining code completions over to LookupVisibleDecls,Douglas Gregor
after adding the ability to determine whether our lookup is a base-class lookup. Eliminate CollectMemberLookupResults, since it is no longer used (yay). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93428 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-14Move code completion for qualified name lookup (foo::) toDouglas Gregor
LookupVisibleDecls. Also, a function does not hide another function. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93421 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-14Eliminate the code-completion-specifier CollectLookupResults in favorDouglas Gregor
of the more general LookupVisibleDecls. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93419 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-14Simplify the code-completion logic for nested-name-specifiers: ratherDouglas Gregor
than traversing visible declarations twice, only perform one traversal and recognize nested-name-specifiers as special. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93418 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-14When providing completions for a member access expression in C++,Douglas Gregor
provided nested-name-specifier results for base classes (only), rather than everything that could possibly be a nested-name-specifier. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93398 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-14Switch code-completion for ordinary names over to the new(ish)Douglas Gregor
LookupVisibleDecls, unifying the name lookup mechanisms used by code completion and typo correction. Aside from the software-engineering improvements, this makes code-completion see through using directives and see ivars when performing unqualified name lookup in an Objective-C instance method. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93397 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-14More refactoring of ResultBuilder::MaybeAddResult. No intendedDouglas Gregor
functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93386 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-14Refactor the "is this declaration interesting" logic inDouglas Gregor
code-completion's ResultBuilder::MaybeAddResult for later reuse. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93379 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-13Banish the notion of a "rank" for code-completion results, since weDouglas Gregor
are no longer using it for anything. No intended functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93376 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-13Improve the sorting of code-completion results. We now always sort byDouglas Gregor
the "typed" text, first, then take into account nested-name-specifiers, name hiding, etc. This means that the resulting sort is actually alphabetical :) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93370 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-13Code-completion for @public, @protected, @private, @package.Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93361 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-13Whenever completing ordinary names for an Objective-C source, alsoDouglas Gregor
provide completions for @ keywords. Previously, we only provided @-completions after an @ was actually typed, which is useful but probably not the common case. Also, make sure a few Objective-C 2.0 completions only show up when Objective-C 2.0 support is enabled (the default). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93354 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-12Use horizontal-space markers in code-completion results rather thanDouglas Gregor
embedding single space characters. <rdar://problem/7485503> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93231 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-10Improve code completion by introducing patterns for the various C andDouglas Gregor
C++ grammatical constructs that show up in top-level (namespace-level) declarations, member declarations, template declarations, statements, expressions, conditions, etc. For example, we now provide a pattern for static_cast<type>(expr) when we can have an expression, or using namespace identifier; when we can have a using directive. Also, improves the results of code completion at the beginning of a top-level declaration. Previously, we would see value names (function names, global variables, etc.); now we see types, namespace names, etc., but no values. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93134 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-30remove extraneous #includeChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92310 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-30Typo correction for type names when they appear in declarations, e.g., givenDouglas Gregor
tring str2; we produce the following diagnostic + fix-it: typo.cpp:15:1: error: unknown type name 'tring'; did you mean 'string'? tring str2; ^~~~~ string To make this really useful, we'll need to introduce typo correction in many more places (wherever we do name lookup), and implement declaration-vs-expression heuristics that cope with typos better. However, for now this will handle the simple cases where we already get good "unknown type name" diagnostics. The LookupVisibleDecls functions are intended to be used by code completion as well as typo correction; that refactoring will happen later. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92308 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-25Remove some dead variables clang-analyzer found.Benjamin Kramer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92162 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-23Objective-C methods can be variadic, too. Who knew.Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91951 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-18Extend code-completion results with the type of each resultDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91702 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-16Shift things around so that it's easier to recover from a missingJohn McCall
function in a C++ call using an arbitrary call-expression type. Actually exploit this to fix the recovery implemented earlier. The diagnostic is still iffy, though. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91538 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-15update to match LLVM API change:Chris Lattner
Remove isPod() from DenseMapInfo, splitting it out to its own isPodLike type trait. This is a generally useful type trait for more than just DenseMap, and we really care about whether something acts like a pod, not whether it really is a pod. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91422 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-12Un-namespace-qualify llvm_unreachable. It's a macro, so the qualification gaveJeffrey Yasskin
no extra safety anyway. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91207 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-11When code completion of an overload set fails, produce results for ordinary ↵Douglas Gregor
name lookup instead. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91141 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-11Add a function's cv-qualifiers to the code-completion results as anDouglas Gregor
informative chunk. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91139 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-11Teach code completion to instantiate templates when it needs toDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91138 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-11Member function templates can occur after . or ->Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91137 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-11Tweak code-completion results by suppressing class templateDouglas Gregor
specializations and class template partial specializations (they're never named directly). Also, member access expressions only refer to value declarations (fields, functions, enumerators, etc.) and Objective-C property declarations; filter out everything else. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91133 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-11Class template (partial) specializations should not show up in code ↵Douglas Gregor
completion results git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91125 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-07When in an Objective-C instance method, super is a valid code-completion resultDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90758 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-07Code completion for Objective-C @ keywords that are statements or expressionsDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90757 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-07Code completion for Objective-C @ directivesDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90756 91177308-0d34-0410-b5e6-96231b3b80d8