kadircet created this revision. kadircet added a reviewer: hokein. Herald added subscribers: cfe-commits, usaxena95, arphaman, jkorous. Herald added a project: clang. kadircet requested review of this revision. Herald added subscribers: MaskRay, ilya-biryukov.
fixes https://github.com/clangd/clangd/issues/489 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D85721 Files: clang-tools-extra/clangd/CodeComplete.cpp clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp Index: clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp +++ clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp @@ -194,9 +194,14 @@ EXPECT_THAT(completions(Body + "int main() { S().Foba^ }").Completions, AllOf(Has("FooBar"), Has("FooBaz"), Not(Has("Qux")))); - // Macros require prefix match. - EXPECT_THAT(completions(Body + "int main() { C^ }").Completions, - AllOf(Has("Car"), Not(Has("MotorCar")))); + // Macros require prefix match, either from index or AST. + Symbol Sym = var("MotorCarIndex"); + Sym.SymInfo.Kind = index::SymbolKind::Macro; + EXPECT_THAT( + completions(Body + "int main() { C^ }", {Sym}).Completions, + AllOf(Has("Car"), Not(Has("MotorCar")), Not(Has("MotorCarIndex")))); + EXPECT_THAT(completions(Body + "int main() { M^ }", {Sym}).Completions, + AllOf(Has("MotorCar"), Has("MotorCarIndex"))); } void testAfterDotCompletion(clangd::CodeCompleteOptions Opts) { Index: clang-tools-extra/clangd/CodeComplete.cpp =================================================================== --- clang-tools-extra/clangd/CodeComplete.cpp +++ clang-tools-extra/clangd/CodeComplete.cpp @@ -1618,7 +1618,10 @@ llvm::Optional<float> fuzzyScore(const CompletionCandidate &C) { // Macros can be very spammy, so we only support prefix completion. // We won't end up with underfull index results, as macros are sema-only. - if (C.SemaResult && C.SemaResult->Kind == CodeCompletionResult::RK_Macro && + if (((C.SemaResult && + C.SemaResult->Kind == CodeCompletionResult::RK_Macro) || + (C.IndexResult && + C.IndexResult->SymInfo.Kind == index::SymbolKind::Macro)) && !C.Name.startswith_lower(Filter->pattern())) return None; return Filter->match(C.Name);
Index: clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp +++ clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp @@ -194,9 +194,14 @@ EXPECT_THAT(completions(Body + "int main() { S().Foba^ }").Completions, AllOf(Has("FooBar"), Has("FooBaz"), Not(Has("Qux")))); - // Macros require prefix match. - EXPECT_THAT(completions(Body + "int main() { C^ }").Completions, - AllOf(Has("Car"), Not(Has("MotorCar")))); + // Macros require prefix match, either from index or AST. + Symbol Sym = var("MotorCarIndex"); + Sym.SymInfo.Kind = index::SymbolKind::Macro; + EXPECT_THAT( + completions(Body + "int main() { C^ }", {Sym}).Completions, + AllOf(Has("Car"), Not(Has("MotorCar")), Not(Has("MotorCarIndex")))); + EXPECT_THAT(completions(Body + "int main() { M^ }", {Sym}).Completions, + AllOf(Has("MotorCar"), Has("MotorCarIndex"))); } void testAfterDotCompletion(clangd::CodeCompleteOptions Opts) { Index: clang-tools-extra/clangd/CodeComplete.cpp =================================================================== --- clang-tools-extra/clangd/CodeComplete.cpp +++ clang-tools-extra/clangd/CodeComplete.cpp @@ -1618,7 +1618,10 @@ llvm::Optional<float> fuzzyScore(const CompletionCandidate &C) { // Macros can be very spammy, so we only support prefix completion. // We won't end up with underfull index results, as macros are sema-only. - if (C.SemaResult && C.SemaResult->Kind == CodeCompletionResult::RK_Macro && + if (((C.SemaResult && + C.SemaResult->Kind == CodeCompletionResult::RK_Macro) || + (C.IndexResult && + C.IndexResult->SymInfo.Kind == index::SymbolKind::Macro)) && !C.Name.startswith_lower(Filter->pattern())) return None; return Filter->match(C.Name);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits