diff --git a/Userland/Shell/AST.cpp b/Userland/Shell/AST.cpp index f941f88409..126b136273 100644 --- a/Userland/Shell/AST.cpp +++ b/Userland/Shell/AST.cpp @@ -393,6 +393,7 @@ Vector Node::complete_for_editor(Shell& shell, size_ auto result = hit_test_position(offset); if (!result.matching_node) return shell.complete_path("", "", 0, Shell::ExecutableOnly::No, result.closest_command_node.ptr(), nullptr, Shell::EscapeMode::Bareword); + auto node = result.matching_node; if (node->is_bareword() || node != result.closest_node_with_semantic_meaning) node = result.closest_node_with_semantic_meaning; @@ -744,6 +745,8 @@ HitTestResult CastToCommand::hit_test_position(size_t offset) const auto result = m_inner->hit_test_position(offset); if (!result.closest_node_with_semantic_meaning) result.closest_node_with_semantic_meaning = this; + if (!result.closest_command_node && position().contains(offset)) + result.closest_command_node = this; return result; } diff --git a/Userland/Shell/Shell.cpp b/Userland/Shell/Shell.cpp index d6405cc7dc..532db8ed9c 100644 --- a/Userland/Shell/Shell.cpp +++ b/Userland/Shell/Shell.cpp @@ -1678,9 +1678,9 @@ ErrorOr> Shell::complete_via_program_itself(s completion_command.argv.extend({ "--complete", "--" }); struct Visitor : public AST::NodeVisitor { - Visitor(Shell& shell, AST::Node const& node) + Visitor(Shell& shell, AST::Position position) : shell(shell) - , completion_position(node.position()) + , completion_position(position) { lists.empend(); } @@ -1824,7 +1824,7 @@ ErrorOr> Shell::complete_via_program_itself(s virtual void visit(AST::ReadWriteRedirection const*) override { } virtual void visit(AST::WriteAppendRedirection const*) override { } virtual void visit(AST::WriteRedirection const*) override { } - } visitor { *this, *node }; + } visitor { *this, node ? node->position() : AST::Position() }; command_node->visit(visitor); if (visitor.fail)