[PATCH] D92990: [clangd] Provide suggestions with invalid config keys
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Dec 10 08:43:21 PST 2020
sammccall added a comment.
This is cool! Detecting basic typos could save a fair bit of time.
I do want to be a bit wary of spending too much complexity on small enhancements to rarely used code - if it's more than a simple typo we're correcting, then I think it's ok to make the user look it up.
In D92990#2445283 <https://reviews.llvm.org/D92990#2445283>, @njames93 wrote:
> Adding in support for fix-its(at least in vscode) didn't seem to work. The language server there doesn't seem to send the `textDocument/codeAction` message to the server for the `.clangd` file.
Right, we can publish to any file, but we only expect to get requests for files we're active on, and users will expect us to track draft changes etc. I don't think we want to go down the path of being a full language server for config files, so I wouldn't pursue fixit support.
================
Comment at: clang-tools-extra/clangd/ConfigYAML.cpp:202
if (Warn)
- Outer->warning("Unknown " + Description + " key " + **Key, *K);
+ UnknownKeys.push_back(std::move(*Key));
}
----------------
i'm not sure it's actually worth the complexity to delay this, track the seen keys, and exclude them from the analysis.
Offering a suggestion already seems pretty good, but I don't think we should try too hard to make it perfect.
================
Comment at: clang-tools-extra/clangd/ConfigYAML.cpp:211
+ llvm::SmallVector<llvm::StringRef, 4>
+ getUnseenKeys(const llvm::SmallSet<std::string, 8> &SeenKeys) const {
+ llvm::SmallVector<llvm::StringRef, 4> Result;
----------------
nit: drop explicit '4' size here
also drop `get` prefix here and for best-guess (matching the local style for functions used for value rather than for side-effect)
================
Comment at: clang-tools-extra/clangd/ConfigYAML.cpp:221
+ getBestGuess(llvm::StringRef Search, llvm::ArrayRef<llvm::StringRef> Items,
+ unsigned MaxEdit = 0) {
+
----------------
nit: drop unused default param
================
Comment at: clang-tools-extra/clangd/ConfigYAML.cpp:223
+
+ // If Search is sufficiently short (size() < 2), just return nothing.
+ if (Search.size() < 2)
----------------
Comment here just echoes the code - remove?
================
Comment at: clang-tools-extra/clangd/ConfigYAML.cpp:231
+ unsigned EditDistance = Search.edit_distance(Item, true, MaxEdit);
+ if (EditDistance == MaxEdit) {
+ if (!Result)
----------------
This branch is confusing.
It seems to be saying if we have a tie for best, don't return either result. Why is that important/worth any complexity?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D92990/new/
https://reviews.llvm.org/D92990
More information about the cfe-commits
mailing list