From 782db88e826d46440ecc22d82446e8fc4ff96588 Mon Sep 17 00:00:00 2001 From: Ben Wiederhake Date: Sat, 25 Jul 2020 07:59:30 +0200 Subject: [PATCH] Shell: Don't crash when autocompleting a non-bare word For example, type 'Hello?' without the quotation marks but with the question mark, and press TAB. Previously, this would crash the Shell. Now, it merely refuses to make any suggestions. We could do better, but that is too hard for now. --- Shell/AST.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Shell/AST.cpp b/Shell/AST.cpp index 11f03c4ec2..f64a0289c5 100644 --- a/Shell/AST.cpp +++ b/Shell/AST.cpp @@ -441,10 +441,9 @@ HitTestResult CastToCommand::hit_test_position(size_t offset) Vector CastToCommand::complete_for_editor(Shell& shell, size_t offset, const HitTestResult& hit_test_result) { auto matching_node = hit_test_result.matching_node; - if (!matching_node) + if (!matching_node || !matching_node->is_bareword()) return {}; - ASSERT(matching_node->is_bareword()); auto corrected_offset = offset - matching_node->position().start_offset; auto* node = static_cast(matching_node.ptr()); @@ -953,10 +952,9 @@ HitTestResult Execute::hit_test_position(size_t offset) Vector Execute::complete_for_editor(Shell& shell, size_t offset, const HitTestResult& hit_test_result) { auto matching_node = hit_test_result.matching_node; - if (!matching_node) + if (!matching_node || !matching_node->is_bareword()) return {}; - ASSERT(matching_node->is_bareword()); auto corrected_offset = offset - matching_node->position().start_offset; auto* node = static_cast(matching_node.ptr()); @@ -1204,10 +1202,9 @@ HitTestResult PathRedirectionNode::hit_test_position(size_t offset) Vector PathRedirectionNode::complete_for_editor(Shell& shell, size_t offset, const HitTestResult& hit_test_result) { auto matching_node = hit_test_result.matching_node; - if (!matching_node) + if (!matching_node || !matching_node->is_bareword()) return {}; - ASSERT(matching_node->is_bareword()); auto corrected_offset = offset - matching_node->position().start_offset; auto* node = static_cast(matching_node.ptr());