mirror of
https://github.com/AdaCore/langkit.git
synced 2026-02-12 12:28:12 -08:00
lkt/lsp/complete: sort completion results
Currently, the order of items returned by `LktNode.p_complete` is not significant and depends deeply on implementation details. Sort its result so that baselines are more resilient to changes in the implementation of completion.
This commit is contained in:
@@ -1,35 +1,34 @@
|
||||
Completing <DotExpr test.lkt:4:31-4:37> ('self.p')
|
||||
- info: field_kind
|
||||
- node: field_kind
|
||||
- as_bare_entity: function_kind
|
||||
- as_entity: function_kind
|
||||
- can_reach: function_kind
|
||||
- child_index: function_kind
|
||||
- children: function_kind
|
||||
- children_env: function_kind
|
||||
- completion_item_kind_to_int: function_kind
|
||||
- example_prop: function_kind
|
||||
- other_prop: function_kind
|
||||
- prop: function_kind
|
||||
- can_reach: function_kind
|
||||
- child_index: function_kind
|
||||
- children: function_kind
|
||||
- children_env: function_kind
|
||||
- completion_item_kind_to_int: function_kind
|
||||
- full_sloc_image: function_kind
|
||||
- info: field_kind
|
||||
- is_ghost: function_kind
|
||||
- is_null: function_kind
|
||||
- next_sibling: function_kind
|
||||
- node: field_kind
|
||||
- node_env: function_kind
|
||||
- other_prop: function_kind
|
||||
- parent: function_kind
|
||||
- parents: function_kind
|
||||
- ple_root: function_kind
|
||||
- previous_sibling: function_kind
|
||||
- prop: function_kind
|
||||
- singleton: function_kind
|
||||
- text: function_kind
|
||||
- to_builder: function_kind
|
||||
- token_end: function_kind
|
||||
- token_start: function_kind
|
||||
- unit: function_kind
|
||||
- as_bare_entity: function_kind
|
||||
- as_entity: function_kind
|
||||
- is_null: function_kind
|
||||
- singleton: function_kind
|
||||
- to_builder: function_kind
|
||||
Completing <DotExpr test.lkt:7:9-7:15> ('var3.i')
|
||||
- prop: function_kind
|
||||
- other_prop: function_kind
|
||||
- prop: function_kind
|
||||
- as_bare_entity: function_kind
|
||||
- as_entity: function_kind
|
||||
- can_reach: function_kind
|
||||
- child_index: function_kind
|
||||
- children: function_kind
|
||||
@@ -37,21 +36,22 @@ Completing <DotExpr test.lkt:7:9-7:15> ('var3.i')
|
||||
- completion_item_kind_to_int: function_kind
|
||||
- full_sloc_image: function_kind
|
||||
- is_ghost: function_kind
|
||||
- is_null: function_kind
|
||||
- next_sibling: function_kind
|
||||
- node_env: function_kind
|
||||
- other_prop: function_kind
|
||||
- parent: function_kind
|
||||
- parents: function_kind
|
||||
- ple_root: function_kind
|
||||
- previous_sibling: function_kind
|
||||
- prop: function_kind
|
||||
- prop: function_kind
|
||||
- singleton: function_kind
|
||||
- text: function_kind
|
||||
- to_builder: function_kind
|
||||
- token_end: function_kind
|
||||
- token_start: function_kind
|
||||
- unit: function_kind
|
||||
- as_bare_entity: function_kind
|
||||
- as_entity: function_kind
|
||||
- is_null: function_kind
|
||||
- singleton: function_kind
|
||||
- to_builder: function_kind
|
||||
Completing <RefId "Stru" test.lkt:8:9-8:13> ('Stru')
|
||||
- Address: struct_kind
|
||||
- AnalysisUnit: interface_kind
|
||||
@@ -75,6 +75,7 @@ Completing <RefId "Stru" test.lkt:8:9-8:13> ('Stru')
|
||||
- ErrorNode: interface_kind
|
||||
- Example: class_kind
|
||||
- FooNode: class_kind
|
||||
- FooNode: class_kind
|
||||
- InnerEnvAssoc: struct_kind
|
||||
- Int: struct_kind
|
||||
- LexicalEnv: struct_kind
|
||||
@@ -91,7 +92,6 @@ Completing <RefId "Stru" test.lkt:8:9-8:13> ('Stru')
|
||||
- RefResultInterface: interface_kind
|
||||
- ReferenceInterface: interface_kind
|
||||
- Regexp: struct_kind
|
||||
- FooNode: class_kind
|
||||
- Sized: interface_kind
|
||||
- SolverDiagnostic: struct_kind
|
||||
- SolverDiagnosticInterface: interface_kind
|
||||
@@ -104,9 +104,9 @@ Completing <RefId "Stru" test.lkt:8:9-8:13> ('Stru')
|
||||
- TokenNode: interface_kind
|
||||
- TypableNodeInterface: interface_kind
|
||||
- TypeInterface: interface_kind
|
||||
- __EmptyMetadata: struct_kind
|
||||
- __EmptyMetadata: struct_kind
|
||||
- __internal: struct_kind
|
||||
- __EmptyMetadata: struct_kind
|
||||
- __EmptyMetadata: struct_kind
|
||||
Completing <RefId "v" test.lkt:8:16-8:17> ('v')
|
||||
- Address: struct_kind
|
||||
- AnalysisUnit: interface_kind
|
||||
@@ -130,6 +130,7 @@ Completing <RefId "v" test.lkt:8:16-8:17> ('v')
|
||||
- ErrorNode: interface_kind
|
||||
- Example: class_kind
|
||||
- FooNode: class_kind
|
||||
- FooNode: class_kind
|
||||
- InnerEnvAssoc: struct_kind
|
||||
- Int: struct_kind
|
||||
- LexicalEnv: struct_kind
|
||||
@@ -146,7 +147,6 @@ Completing <RefId "v" test.lkt:8:16-8:17> ('v')
|
||||
- RefResultInterface: interface_kind
|
||||
- ReferenceInterface: interface_kind
|
||||
- Regexp: struct_kind
|
||||
- FooNode: class_kind
|
||||
- Sized: interface_kind
|
||||
- SolverDiagnostic: struct_kind
|
||||
- SolverDiagnosticInterface: interface_kind
|
||||
@@ -161,6 +161,8 @@ Completing <RefId "v" test.lkt:8:16-8:17> ('v')
|
||||
- TypeInterface: interface_kind
|
||||
- _: variable_kind
|
||||
- _: variable_kind
|
||||
- __EmptyMetadata: struct_kind
|
||||
- __EmptyMetadata: struct_kind
|
||||
- __internal: struct_kind
|
||||
- add_all_to_env: function_kind
|
||||
- add_env: function_kind
|
||||
@@ -181,5 +183,3 @@ Completing <RefId "v" test.lkt:8:16-8:17> ('v')
|
||||
- var1: variable_kind
|
||||
- var2: variable_kind
|
||||
- var3: variable_kind
|
||||
- __EmptyMetadata: struct_kind
|
||||
- __EmptyMetadata: struct_kind
|
||||
|
||||
@@ -12,20 +12,17 @@ def complete_kind(name: lkt.DefId) -> str:
|
||||
return lkt.CompletionItemKind._c_to_py[name.p_completion_item_kind - 1]
|
||||
|
||||
|
||||
for d in dots:
|
||||
print(f"Completing {d} ('{d.text}')")
|
||||
for ci in d.p_complete:
|
||||
if ci.declaration.f_syn_name is not None:
|
||||
print(
|
||||
f" - {ci.declaration.p_full_name}:"
|
||||
f" {complete_kind(ci.declaration.f_syn_name)}"
|
||||
)
|
||||
ref = refs[-2:]
|
||||
for r in ref:
|
||||
print(f"Completing {r} ('{r.text}')")
|
||||
for ci in r.p_complete:
|
||||
if ci.declaration.f_syn_name is not None:
|
||||
print(
|
||||
f" - {ci.declaration.p_full_name}:"
|
||||
f" {complete_kind(ci.declaration.f_syn_name)}"
|
||||
)
|
||||
def sorted_complete(n: lkt.LktNode) -> list[lkt.Decl]:
|
||||
result = [
|
||||
ci.declaration
|
||||
for ci in n.p_complete
|
||||
if ci.declaration.f_syn_name is not None
|
||||
]
|
||||
result.sort(key=lambda d: d.p_full_name)
|
||||
return result
|
||||
|
||||
|
||||
for n in dots + refs[-2:]:
|
||||
print(f"Completing {n} ('{n.text}')")
|
||||
for d in sorted_complete(n):
|
||||
print(f" - {d.p_full_name}: {complete_kind(d.f_syn_name)}")
|
||||
|
||||
Reference in New Issue
Block a user