Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In particular, the symbol generation before this change creates a lot of symbols with the same name for different definitions. This change makes progress on symbol uniqueness, but does not fix a couple cases where it was unclear to me how to fix (see TODOs in
scip.rs
)Before this change
SymbolInformation
provided by a document was theinfo for all encountered symbols that have not yet been emitted. So,
the symbol information on a
Document
was a mishmash of symbolsdefined in the documents, symbols from other documents, and external
symbols.
After this change, the
SymbolInformation
on documents is just thelocals and defined symbols from the document. All symbols referenced
and not from emitted documents are included in
external_symbols
.Other behavior changes:
scip
command now reports symbol information omitted due to symbol collisions. Iterating with this on a large codebase (Zed!) resulted in the other improvements in this change.Generally fixes providing the path to nested definitions in symbols. Instead of having special cases for a couple limited cases of nesting, implements
Definition::enclosing_definition
and uses this to walk definitions.Parameter variables are now treated like locals.
This fixes a bug where closure captures also received symbols scoped to the containing function. To bring back parameter symbols I would want a way to filter these out, since they can cause symbol collisions.
Having symbols for them seems to be intentional in 27e2eea, but no particular use is specified there. For the typical indexing purposes of SCIP I don't see why parameter symbols are useful or sensible, as function parameters are not referencable by anything but position. I can imagine they might be useful in representing diagnostics or something.
Inherent impls are now represented as an
impl
type which takes the self type as a type parameter.Trait impls are now represented as an
impl
type which takes theself: trait
type constraint as a parameter.Associated types in traits and impls are now treated like types instead of type parameters, and so are now suffixed with
#
instead of wrapped with[]
. Treating them as type parameters seems to have been intentional in 73d9c77 but it doesn't make sense to me, so changing it.Static variables are now treated as terms instead of
Meta
, and so receive.
suffix instead of:
.Attributes are now treated as
Meta
instead ofMacro
, and so receive:
suffix instead of!
.enclosing_symbol
is now provided for labels and generic params, which are local symbols.Fixes a bug where presence of
'
causes a descriptor name to get double wrapped in backticks, since bothfn new_descriptor
andscip::symbol::format_symbol
have logic for wrapping in backticks. Solution is to simply delete the redundant logic.