diff --git a/docker-images/syntax-highlighter/crates/syntax-analysis/queries/java/scip-locals.scm b/docker-images/syntax-highlighter/crates/syntax-analysis/queries/java/scip-locals.scm index 898494ce9e7..c88e3ff38ab 100644 --- a/docker-images/syntax-highlighter/crates/syntax-analysis/queries/java/scip-locals.scm +++ b/docker-images/syntax-highlighter/crates/syntax-analysis/queries/java/scip-locals.scm @@ -118,6 +118,12 @@ (#not-eq? @reference.either "var") ) +; class Binary {... +; ^^^^^^ +(type_bound + (type_identifier)* @reference.either +) + ; for (MyType variable: variables) {... ; ^^^^^^ (enhanced_for_statement diff --git a/docker-images/syntax-highlighter/crates/syntax-analysis/src/locals.rs b/docker-images/syntax-highlighter/crates/syntax-analysis/src/locals.rs index 3eb14a692b6..d60108ab40c 100644 --- a/docker-images/syntax-highlighter/crates/syntax-analysis/src/locals.rs +++ b/docker-images/syntax-highlighter/crates/syntax-analysis/src/locals.rs @@ -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() - }); + } } } diff --git a/docker-images/syntax-highlighter/crates/syntax-analysis/src/snapshots/syntax_analysis__locals__test__java_occurrences.snap b/docker-images/syntax-highlighter/crates/syntax-analysis/src/snapshots/syntax_analysis__locals__test__java_occurrences.snap index 64c027f50ea..c96033ba2a4 100644 --- a/docker-images/syntax-highlighter/crates/syntax-analysis/src/snapshots/syntax_analysis__locals__test__java_occurrences.snap +++ b/docker-images/syntax-highlighter/crates/syntax-analysis/src/snapshots/syntax_analysis__locals__test__java_occurrences.snap @@ -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 { // ^ 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 List 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 }