[PATCH] D87775: [clangd] Add option for disabling AddUsing tweak on some namespaces.
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 16 10:43:07 PDT 2020
sammccall added a comment.
Nice!
================
Comment at: clang-tools-extra/clangd/Config.h:66
+
+ /// Style of the codebase.
+ struct {
----------------
describe elements more precisely?
They are namespaces with/without leading/trailing ::, and sub-namespaces are implicitly included.
================
Comment at: clang-tools-extra/clangd/ConfigCompile.cpp:215
+ for (auto &N : F.FullyQualifiedNamespaces)
+ FullyQualifiedNamespaces.push_back(std::move(*N));
+ Out.Apply.push_back([FullyQualifiedNamespaces(
----------------
this is a good place to validate and/or normalize (leading/trailing ::)
================
Comment at: clang-tools-extra/clangd/ConfigFragment.h:167
+ struct StyleBlock {
+ // List of namespaces that should not appear in "using" declarations.
+ std::vector<Located<std::string>> FullyQualifiedNamespaces;
----------------
Can we describe this positively first?
Namespaces whose members should be fully-qualified, rather than via using declarations or directives.
Affects availability of the "add using declaration" tweak.
================
Comment at: clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp:197
+ std::string Buf;
+ llvm::raw_string_ostream NamespaceStream(Buf);
+ Namespace.print(NamespaceStream,
----------------
validate it's a namespace, and then call printNamespaceScope (AST.h)?
This handles the right spelling of anonymous/inline NSes.
================
Comment at: clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp:208
+ // that we do not prefix-match ::foo to ::foobar.
+ Banned.consume_front("::");
+ Banned.consume_back("::");
----------------
we should do this at config compile time instead I think - conceptually simpler if we store normalized data
================
Comment at: clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp:210
+ Banned.consume_back("::");
+ if (NamespaceStr.startswith(Banned.str() + "::"))
+ return true;
----------------
slightly silly, but can we take a stringref, consume Banned, and verify that the result is empty or begins with ::?
Avoids a silly string copy, explicitly handles the sub-namespace case, and is just more typical of the string code we write.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D87775/new/
https://reviews.llvm.org/D87775
More information about the cfe-commits
mailing list