summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clangd/refactor
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clangd/refactor')
-rw-r--r--clang-tools-extra/clangd/refactor/Tweak.cpp3
-rw-r--r--clang-tools-extra/clangd/refactor/Tweak.h5
-rw-r--r--clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp3
3 files changed, 9 insertions, 2 deletions
diff --git a/clang-tools-extra/clangd/refactor/Tweak.cpp b/clang-tools-extra/clangd/refactor/Tweak.cpp
index a6d70dbd38c..b80f75300dd 100644
--- a/clang-tools-extra/clangd/refactor/Tweak.cpp
+++ b/clang-tools-extra/clangd/refactor/Tweak.cpp
@@ -40,7 +40,8 @@ void validateRegistry() {
Tweak::Selection::Selection(ParsedAST &AST, unsigned RangeBegin,
unsigned RangeEnd)
- : AST(AST), ASTSelection(AST.getASTContext(), RangeBegin, RangeEnd) {
+ : AST(AST), SelectionBegin(RangeBegin), SelectionEnd(RangeEnd),
+ ASTSelection(AST.getASTContext(), RangeBegin, RangeEnd) {
auto &SM = AST.getSourceManager();
Code = SM.getBufferData(SM.getMainFileID());
Cursor = SM.getComposedLoc(SM.getMainFileID(), RangeBegin);
diff --git a/clang-tools-extra/clangd/refactor/Tweak.h b/clang-tools-extra/clangd/refactor/Tweak.h
index 79e0f3eceee..9b20d151589 100644
--- a/clang-tools-extra/clangd/refactor/Tweak.h
+++ b/clang-tools-extra/clangd/refactor/Tweak.h
@@ -46,7 +46,12 @@ public:
/// Parsed AST of the active file.
ParsedAST *
/// A location of the cursor in the editor.
+ // FIXME: Cursor is redundant and should be removed
SourceLocation Cursor;
+ /// The begin offset of the selection
+ unsigned SelectionBegin;
+ /// The end offset of the selection
+ unsigned SelectionEnd;
/// The AST nodes that were selected.
SelectionTree ASTSelection;
// FIXME: provide a way to get sources and ASTs for other files.
diff --git a/clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp b/clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp
index 447110d3e90..525c259b7a5 100644
--- a/clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp
+++ b/clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp
@@ -219,7 +219,8 @@ bool ExtractVariable::prepare(const Selection &Inputs) {
const ASTContext &Ctx = Inputs.AST.getASTContext();
const SourceManager &SM = Inputs.AST.getSourceManager();
const SelectionTree::Node *N = Inputs.ASTSelection.commonAncestor();
- if (!N)
+ // we don't trigger on empty selections for now
+ if (!N || Inputs.SelectionBegin == Inputs.SelectionEnd)
return false;
Target = llvm::make_unique<ExtractionContext>(N, SM, Ctx);
return Target->isExtractable();
OpenPOWER on IntegriCloud