Skip to content

Commit

Permalink
Merge fix for variable suggestions inside automata labels (#12)
Browse files Browse the repository at this point in the history
Fixed issue with template variables not being visible in graph editor
  • Loading branch information
mikucionisaau authored Dec 15, 2023
2 parents d105dee + 5632385 commit a465160
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
3 changes: 2 additions & 1 deletion src/autocomplete.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@ void AutocompleteModule::configure(Server& server)
results.set_ignored_mask(~(SymType::variable | SymType::function));

bool is_query = id.xpath == "/nta/queries!";
bool ignore_cursor_pos_visibility = id.xpath.find("label[") != std::string_view::npos;
UTAP::Document& doc = doc_repo.get_document();
UTAP::declarations_t& decls = navigate_xpath(doc, id.xpath, id.offset);

Expand All @@ -246,7 +247,7 @@ void AutocompleteModule::configure(Server& server)
results.add_defaults(id.xpath);
bool use_templates = is_query || id.xpath == "/nta/system!";
DeclarationsWalker{doc, false}.visit_symbols(decls, [&](UTAP::symbol_t& symbol, const TextRange& range) {
bool is_symbol_visible = symbol.get_frame() != decls.frame || range.begOffset < id.offset;
bool is_symbol_visible = symbol.get_frame() != decls.frame || ignore_cursor_pos_visibility || range.begOffset < id.offset;
if (is_symbol_visible) {
if (!is_template(symbol))
results.add_item(symbol.get_name(), sym_type(symbol.get_type()));
Expand Down
22 changes: 22 additions & 0 deletions test/test_autocomplete.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,28 @@ TEST_CASE("Autocomplete test default items")
CHECK_EOF(mock);
}

TEST_CASE("Autocomplete test template declarations")
{
auto repo = SystemRepository{};
auto autocomplete = AutocompleteModule{repo};

auto mock = MockIO{};
mock.send("upload", MODEL);
mock.send("autocomplete", {{"xpath", "/nta/template[1]/label[@kind=\"invariant\"]"}, {"identifier", "it"}, {"offset", 0}});
mock.send_cmd("exit");

auto server = Server{mock};
server.add_close_command("exit").add_module(repo).add_module(autocomplete).start();

REQUIRE(mock.handshake());
REQUIRE(mock.receive() == OK_RESPONSE);
auto results = mock.receive();
CHECK(unique_name_view(results) == json{"y","f","p_a","e","x"});
REQUIRE(mock.receive() == OK_RESPONSE);
CHECK_EOF(mock);
}


TEST_CASE("Autocomplete struct type")
{
auto repo = SystemRepository{};
Expand Down

0 comments on commit a465160

Please sign in to comment.