mirror of
https://github.com/sourcegraph/sourcegraph.git
synced 2026-02-06 12:51:55 +00:00
Clean up code for ambiguous references
This commit is contained in:
parent
15d1ba2e94
commit
ae4f454f08
@ -118,6 +118,12 @@
|
||||
(#not-eq? @reference.either "var")
|
||||
)
|
||||
|
||||
; class Binary<N extends Number> {...
|
||||
; ^^^^^^
|
||||
(type_bound
|
||||
(type_identifier)* @reference.either
|
||||
)
|
||||
|
||||
; for (MyType variable: variables) {...
|
||||
; ^^^^^^
|
||||
(enhanced_for_statement
|
||||
|
||||
@ -599,13 +599,11 @@ impl<'a> LocalResolver<'a> {
|
||||
continue;
|
||||
}
|
||||
|
||||
// dbg!("References {:?}", &self.non_local_references_at_offsets);
|
||||
|
||||
match kind {
|
||||
ReferenceKind::Global | ReferenceKind::Either => {
|
||||
self.non_local_references_at_offsets.insert(offset);
|
||||
}
|
||||
ReferenceKind::Local => {}
|
||||
_ => {}
|
||||
}
|
||||
|
||||
references.push(RefCapture {
|
||||
@ -762,63 +760,62 @@ impl<'a> LocalResolver<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
fn make_local_reference(
|
||||
&self,
|
||||
reference: &Reference,
|
||||
def_id: DefId,
|
||||
) -> scip::types::Occurrence {
|
||||
scip::types::Occurrence {
|
||||
range: reference.node.scip_range(),
|
||||
symbol: format_symbol(def_id.as_local_symbol()),
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
|
||||
fn resolve_references(&mut self) {
|
||||
let mut ref_occurrences = vec![];
|
||||
|
||||
for (scope_ref, scope) in self.arena.iter() {
|
||||
for reference in scope.references.iter() {
|
||||
let def_id = if let Some(resolved) = reference.resolves_to {
|
||||
resolved
|
||||
} else if self
|
||||
if !self
|
||||
.skip_references_at_offsets
|
||||
.contains(&reference.node.start_byte())
|
||||
{
|
||||
// See the comment on LocalResolver.definition_start_bytes
|
||||
continue;
|
||||
} else {
|
||||
// if let Some(def) =
|
||||
// self.find_def(scope_ref, reference.name, reference.node.start_byte())
|
||||
// {
|
||||
// def.id
|
||||
// } else {
|
||||
// dbg!(&reference.kind);
|
||||
// dbg!(self.interner.resolve(reference.name));
|
||||
|
||||
// dbg!(
|
||||
// self.interner.resolve(reference.name),
|
||||
// reference.kind,
|
||||
// reference.node.start_byte()
|
||||
// );
|
||||
|
||||
match reference.kind {
|
||||
ReferenceKind::Global => {
|
||||
// without even looking for definition we emit a global reference here
|
||||
ref_occurrences.push(self.make_global_reference(reference));
|
||||
continue;
|
||||
ReferenceKind::Local => {
|
||||
if !self
|
||||
.non_local_references_at_offsets
|
||||
.contains(&reference.node.start_byte())
|
||||
{
|
||||
if let Some(def_id) = reference.resolves_to {
|
||||
ref_occurrences
|
||||
.push(self.make_local_reference(reference, def_id))
|
||||
} else if let Some(def) = self.find_def(
|
||||
scope_ref,
|
||||
reference.name,
|
||||
reference.node.start_byte(),
|
||||
) {
|
||||
ref_occurrences
|
||||
.push(self.make_local_reference(reference, def.id));
|
||||
}
|
||||
}
|
||||
}
|
||||
ReferenceKind::Local | ReferenceKind::Either => {
|
||||
ReferenceKind::Global => {
|
||||
ref_occurrences.push(self.make_global_reference(reference))
|
||||
}
|
||||
ReferenceKind::Either => {
|
||||
if let Some(def) = self.find_def(
|
||||
scope_ref,
|
||||
reference.name,
|
||||
reference.node.start_byte(),
|
||||
) {
|
||||
def.id
|
||||
ref_occurrences.push(self.make_local_reference(reference, def.id));
|
||||
} else {
|
||||
if ReferenceKind::Either == reference.kind {
|
||||
ref_occurrences.push(self.make_global_reference(reference));
|
||||
}
|
||||
continue;
|
||||
ref_occurrences.push(self.make_global_reference(reference))
|
||||
}
|
||||
}
|
||||
}
|
||||
// };
|
||||
};
|
||||
|
||||
ref_occurrences.push(scip::types::Occurrence {
|
||||
range: reference.node.scip_range(),
|
||||
symbol: format_symbol(def_id.as_local_symbol()),
|
||||
..Default::default()
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -24,8 +24,10 @@ expression: dumped
|
||||
// ^^^ definition local 4
|
||||
// ^^^^ definition local 5
|
||||
return new Locals(this.chars + chars + text.getChars());
|
||||
// ^^^^^^ reference Locals
|
||||
// ^^^^^ reference local 3
|
||||
// ^^^^ reference local 5
|
||||
// ^^^^^^^^ reference getChars
|
||||
}
|
||||
|
||||
public String getChars() {
|
||||
@ -45,6 +47,7 @@ expression: dumped
|
||||
|
||||
private class Binary<N extends Number> {
|
||||
// ^ definition local 7
|
||||
// ^^^^^^ reference Number
|
||||
final N val;
|
||||
// ^ reference local 7
|
||||
|
||||
@ -63,6 +66,7 @@ expression: dumped
|
||||
// ^ definition local 10
|
||||
// ^ definition local 11
|
||||
System.out.println(x + "," + y);
|
||||
// ^^^^^^^ reference println
|
||||
// ^ reference local 10
|
||||
// ^ reference local 11
|
||||
}
|
||||
@ -92,6 +96,7 @@ expression: dumped
|
||||
|
||||
protected String toStringAttributes() {
|
||||
return "text=" + getChars();
|
||||
// ^^^^^^^^ reference getChars
|
||||
}
|
||||
|
||||
public <T extends Container> List<T> fromArrayToList(T[] a) {
|
||||
@ -101,7 +106,10 @@ expression: dumped
|
||||
// ^ reference local 14
|
||||
// ^ definition local 15
|
||||
return Arrays.stream(a).collect(Collectors.toList());
|
||||
// ^^^^^^ reference stream
|
||||
// ^ reference local 15
|
||||
// ^^^^^^^ reference collect
|
||||
// ^^^^^^ reference toList
|
||||
}
|
||||
|
||||
// ? in (wildcard) node doesn't have its own node and
|
||||
@ -110,6 +118,7 @@ expression: dumped
|
||||
// ^^^^^^^^^ reference local 1
|
||||
// ^ definition local 16
|
||||
System.out.println(a);
|
||||
// ^^^^^^^ reference println
|
||||
// ^ reference local 16
|
||||
}
|
||||
|
||||
@ -121,9 +130,11 @@ expression: dumped
|
||||
// ^ reference local 17
|
||||
// ^ reference local 18
|
||||
System.out.println(i);
|
||||
// ^^^^^^^ reference println
|
||||
// ^ reference local 18
|
||||
}
|
||||
System.out.println(r);
|
||||
// ^^^^^^^ reference println
|
||||
// ^ reference local 17
|
||||
}
|
||||
|
||||
@ -158,23 +169,31 @@ expression: dumped
|
||||
// ^^^^^^^ definition local 25
|
||||
numbers.add(5);
|
||||
// ^^^^^^^ reference local 25
|
||||
// ^^^ reference add
|
||||
numbers.add(9);
|
||||
// ^^^^^^^ reference local 25
|
||||
// ^^^ reference add
|
||||
numbers.add(8);
|
||||
// ^^^^^^^ reference local 25
|
||||
// ^^^ reference add
|
||||
numbers.add(1);
|
||||
// ^^^^^^^ reference local 25
|
||||
// ^^^ reference add
|
||||
numbers.forEach((n) -> {
|
||||
// ^^^^^^^ reference local 25
|
||||
// ^^^^^^^ reference forEach
|
||||
// ^ definition local 26
|
||||
System.out.println(n);
|
||||
// ^^^^^^^ reference println
|
||||
// ^ reference local 26
|
||||
});
|
||||
|
||||
for (Integer num : numbers) {
|
||||
// ^^^^^^^ reference Integer
|
||||
// ^^^ definition local 27
|
||||
// ^^^^^^^ reference local 25
|
||||
System.out.println(num);
|
||||
// ^^^^^^^ reference println
|
||||
// ^^^ reference local 27
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user