mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 09:27:34 +00:00
js: Allow for completion of lexically declared variables
This does require us to have a method which lists all the bindings in a declarative environment which is not in the spec.
This commit is contained in:
parent
0be0e7ea6e
commit
f4f1397735
3 changed files with 18 additions and 0 deletions
|
@ -142,4 +142,13 @@ void DeclarativeEnvironment::initialize_or_set_mutable_binding(Badge<ScopeNode>,
|
||||||
set_mutable_binding(global_object, name, value, false);
|
set_mutable_binding(global_object, name, value, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Vector<String> DeclarativeEnvironment::bindings() const
|
||||||
|
{
|
||||||
|
Vector<String> names;
|
||||||
|
for (auto& binding : m_bindings) {
|
||||||
|
names.empend(binding.key);
|
||||||
|
}
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,9 @@ public:
|
||||||
|
|
||||||
void initialize_or_set_mutable_binding(Badge<ScopeNode>, GlobalObject& global_object, FlyString const& name, Value value);
|
void initialize_or_set_mutable_binding(Badge<ScopeNode>, GlobalObject& global_object, FlyString const& name, Value value);
|
||||||
|
|
||||||
|
// This is not a method defined in the spec! Do not use this in any LibJS (or other spec related) code.
|
||||||
|
[[nodiscard]] Vector<String> bindings() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void visit_edges(Visitor&) override;
|
virtual void visit_edges(Visitor&) override;
|
||||||
|
|
||||||
|
|
|
@ -1361,6 +1361,12 @@ int main(int argc, char** argv)
|
||||||
case CompleteVariable: {
|
case CompleteVariable: {
|
||||||
auto const& variable = interpreter->global_object();
|
auto const& variable = interpreter->global_object();
|
||||||
list_all_properties(variable.shape(), variable_name);
|
list_all_properties(variable.shape(), variable_name);
|
||||||
|
|
||||||
|
for (String& name : global_environment.declarative_record().bindings()) {
|
||||||
|
if (name.starts_with(variable_name))
|
||||||
|
results.empend(name);
|
||||||
|
}
|
||||||
|
|
||||||
if (results.size())
|
if (results.size())
|
||||||
editor.suggest(variable_name.length());
|
editor.suggest(variable_name.length());
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue