Skip to content

Commit 2b90796

Browse files
committed
Change enclosing_range to visual start/end markers matching scip-go style
Replace inline 'enclosing_range 3 2 5 3' format with visual marker lines: - '⌄ enclosing_range_start <symbol>' before the source line - '⌃ enclosing_range_end <symbol>' after the source line Also fix SemanticdbVisitor to only compute enclosing ranges for definition occurrences, not references (matching the original intent of commit 9f95a07).
1 parent c20c618 commit 2b90796

File tree

26 files changed

+570
-275
lines changed

26 files changed

+570
-275
lines changed

scip-java/src/main/scala/com/sourcegraph/scip_java/ScipPrinters.scala

Lines changed: 58 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,57 @@ object ScipPrinters {
5757
val extension = doc.getRelativePath.split("\\.").lastOption.getOrElse("")
5858
val commentSyntax = comments.extensionSyntax(extension)
5959
val input = Input.filename(doc.getRelativePath, text)
60+
61+
// Collect enclosing ranges from all occurrences, grouped by start/end line.
62+
case class EnclosingRange(
63+
startLine: Int,
64+
startChar: Int,
65+
endLine: Int,
66+
endChar: Int,
67+
symbol: String
68+
)
69+
val allEnclosingRanges =
70+
doc
71+
.getOccurrencesList
72+
.asScala
73+
.flatMap { occ =>
74+
occ.getEnclosingRangeList.asScala.map(_.toInt).toList match {
75+
case List(sl, sc, ec) =>
76+
Some(EnclosingRange(sl, sc, sl, ec, occ.getSymbol))
77+
case List(sl, sc, el, ec) =>
78+
Some(EnclosingRange(sl, sc, el, ec, occ.getSymbol))
79+
case _ =>
80+
None
81+
}
82+
}
83+
.toList
84+
val enclosingByStartLine =
85+
allEnclosingRanges
86+
.groupBy(_.startLine)
87+
.view
88+
.mapValues(_.sortBy(_.startChar))
89+
.toMap
90+
val enclosingByEndLine =
91+
allEnclosingRanges
92+
.groupBy(_.endLine)
93+
.view
94+
.mapValues(_.sortBy(_.endChar))
95+
.toMap
96+
6097
text
6198
.linesWithSeparators
6299
.zipWithIndex
63100
.foreach { case (line, i) =>
101+
enclosingByStartLine
102+
.getOrElse(i, Nil)
103+
.foreach { er =>
104+
out
105+
.append(commentSyntax)
106+
.append(" " * er.startChar)
107+
.append("⌄ enclosing_range_start ")
108+
.append(er.symbol)
109+
.append("\n")
110+
}
64111
out.append(sourceIndent).append(line.replace("\t", " "))
65112
val occurrences = occurrencesByLine
66113
.getOrElse(i, Nil)
@@ -86,6 +133,17 @@ object ScipPrinters {
86133
}
87134
}
88135
}
136+
enclosingByEndLine
137+
.getOrElse(i, Nil)
138+
.foreach { er =>
139+
val indent = math.max(0, er.endChar - 1)
140+
out
141+
.append(commentSyntax)
142+
.append(" " * indent)
143+
.append("⌃ enclosing_range_end ")
144+
.append(er.symbol)
145+
.append("\n")
146+
}
89147
}
90148
out.toString()
91149
}
@@ -205,13 +263,6 @@ object ScipPrinters {
205263
.append(info.getEnclosingSymbol)
206264
.append("\n")
207265
}
208-
if (occ.getEnclosingRangeCount > 0) {
209-
out
210-
.append(prefix)
211-
.append("enclosing_range ")
212-
.append(occ.getEnclosingRangeList.asScala.mkString(" "))
213-
.append("\n")
214-
}
215266
if (info.getKind != Scip.SymbolInformation.Kind.UnspecifiedKind) {
216267
out.append(prefix).append("kind ").append(info.getKind).append("\n")
217268
}

semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbVisitor.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,13 @@ private Optional<Semanticdb.Range> emitSymbolOccurrence(
110110
Element sym, Tree tree, Name name, Role role, CompilerRange kind) {
111111
if (sym == null || name == null) return Optional.empty();
112112
Optional<Semanticdb.Range> range = semanticdbRange(tree, kind, sym, name.toString());
113-
Optional<Semanticdb.Range> enclosingRange = computeEnclosingRange(tree);
114-
emitSymbolOccurrence(sym, range, role, enclosingRange);
115113
if (role == Role.DEFINITION) {
114+
emitSymbolOccurrence(sym, range, role, computeEnclosingRange(tree));
116115
// Only emit SymbolInformation for symbols that are defined in this compilation unit.
117116
emitSymbolInformation(sym, tree);
117+
return range;
118118
}
119+
emitSymbolOccurrence(sym, range, role, Optional.empty());
119120
return range;
120121
}
121122

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,34 @@
11
package minimized;
22

3+
//⌄ enclosing_range_start semanticdb maven . . minimized/AbstractClasses#
34
public abstract class AbstractClasses {
45
// ^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AbstractClasses#
56
// display_name AbstractClasses
67
// signature_documentation java public abstract class AbstractClasses
7-
// enclosing_range 2 0 8 1
88
// kind Class
99
// ^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AbstractClasses#`<init>`().
1010
// display_name <init>
1111
// signature_documentation java public AbstractClasses()
1212
// kind Constructor
13+
// ⌄ enclosing_range_start semanticdb maven . . minimized/AbstractClasses#defaultImplementation().
1314
public String defaultImplementation() {
1415
// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String#
1516
// ^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AbstractClasses#defaultImplementation().
1617
// display_name defaultImplementation
1718
// signature_documentation java public String defaultImplementation()
18-
// enclosing_range 3 2 5 3
1919
// kind Method
2020
return "";
2121
}
22+
// ⌃ enclosing_range_end semanticdb maven . . minimized/AbstractClasses#defaultImplementation().
2223

24+
// ⌄ enclosing_range_start semanticdb maven . . minimized/AbstractClasses#abstractImplementation().
2325
public abstract String abstractImplementation();
2426
// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String#
2527
// ^^^^^^^^^^^^^^^^^^^^^^ definition semanticdb maven . . minimized/AbstractClasses#abstractImplementation().
2628
// display_name abstractImplementation
2729
// signature_documentation java public abstract String abstractImplementation()
28-
// enclosing_range 7 2 50
2930
// kind AbstractMethod
3031
// relationship is_reference is_implementation semanticdb maven . . minimized/SubClasses#abstractImplementation().
32+
// ⌃ enclosing_range_end semanticdb maven . . minimized/AbstractClasses#abstractImplementation().
3133
}
34+
//⌃ enclosing_range_end semanticdb maven . . minimized/AbstractClasses#
Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,93 @@
11
package minimized;
22

3+
//⌄ enclosing_range_start semanticdb maven . . minimized/Bar#
34
@interface Bar {
45
// ^^^ definition semanticdb maven . . minimized/Bar#
56
// display_name Bar
67
// signature_documentation java @interface Bar
7-
// enclosing_range 2 0 4 1
88
// kind Interface
99
// relationship is_implementation semanticdb maven jdk 11 java/lang/annotation/Annotation#
10+
// ⌄ enclosing_range_start semanticdb maven . . minimized/Bar#value().
1011
double value();
1112
// ^^^^^ definition semanticdb maven . . minimized/Bar#value().
1213
// display_name value
1314
// signature_documentation java public abstract double value()
14-
// enclosing_range 3 2 17
1515
// kind AbstractMethod
16+
// ⌃ enclosing_range_end semanticdb maven . . minimized/Bar#value().
1617
}
18+
//⌃ enclosing_range_end semanticdb maven . . minimized/Bar#
1719

20+
//⌄ enclosing_range_start semanticdb maven . . minimized/BarB#
1821
@interface BarB {
1922
// ^^^^ definition semanticdb maven . . minimized/BarB#
2023
// display_name BarB
2124
// signature_documentation java @interface BarB
22-
// enclosing_range 6 0 8 1
2325
// kind Interface
2426
// relationship is_implementation semanticdb maven jdk 11 java/lang/annotation/Annotation#
27+
// ⌄ enclosing_range_start semanticdb maven . . minimized/BarB#value().
2528
boolean value();
2629
// ^^^^^ definition semanticdb maven . . minimized/BarB#value().
2730
// display_name value
2831
// signature_documentation java public abstract boolean value()
29-
// enclosing_range 7 2 18
3032
// kind AbstractMethod
33+
// ⌃ enclosing_range_end semanticdb maven . . minimized/BarB#value().
3134
}
35+
//⌃ enclosing_range_end semanticdb maven . . minimized/BarB#
3236

37+
//⌄ enclosing_range_start semanticdb maven . . minimized/Nullable#
3338
@interface Nullable {
3439
// ^^^^^^^^ definition semanticdb maven . . minimized/Nullable#
3540
// display_name Nullable
3641
// signature_documentation java @interface Nullable
37-
// enclosing_range 10 0 12 1
3842
// kind Interface
3943
// relationship is_implementation semanticdb maven jdk 11 java/lang/annotation/Annotation#
44+
// ⌄ enclosing_range_start semanticdb maven . . minimized/Nullable#value().
4045
String value() default "";
4146
// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String#
4247
// ^^^^^ definition semanticdb maven . . minimized/Nullable#value().
4348
// display_name value
4449
// signature_documentation java public abstract String value()
45-
// enclosing_range 11 2 28
4650
// kind AbstractMethod
51+
// ⌃ enclosing_range_end semanticdb maven . . minimized/Nullable#value().
4752
}
53+
//⌃ enclosing_range_end semanticdb maven . . minimized/Nullable#
4854

4955

56+
//⌄ enclosing_range_start semanticdb maven . . minimized/BarRef#
5057
@interface BarRef{
5158
// ^^^^^^ definition semanticdb maven . . minimized/BarRef#
5259
// display_name BarRef
5360
// signature_documentation java @interface BarRef
54-
// enclosing_range 15 0 17 1
5561
// kind Interface
5662
// relationship is_implementation semanticdb maven jdk 11 java/lang/annotation/Annotation#
63+
// ⌄ enclosing_range_start semanticdb maven . . minimized/BarRef#value().
5764
SuppressWarnings value();
5865
// ^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings#
5966
// ^^^^^ definition semanticdb maven . . minimized/BarRef#value().
6067
// display_name value
6168
// signature_documentation java public abstract SuppressWarnings value()
62-
// enclosing_range 16 2 27
6369
// kind AbstractMethod
70+
// ⌃ enclosing_range_end semanticdb maven . . minimized/BarRef#value().
6471
}
72+
//⌃ enclosing_range_end semanticdb maven . . minimized/BarRef#
6573

74+
//⌄ enclosing_range_start semanticdb maven . . minimized/Foo#
6675
interface Foo {
6776
// ^^^ definition semanticdb maven . . minimized/Foo#
6877
// display_name Foo
6978
// signature_documentation java interface Foo
70-
// enclosing_range 19 0 35 1
7179
// kind Interface
80+
// ⌄ enclosing_range_start semanticdb maven . . minimized/Foo#test().
7281
@Bar(-1d)
7382
// ^^^ reference semanticdb maven . . minimized/Bar#
7483
double test();
7584
// ^^^^ definition semanticdb maven . . minimized/Foo#test().
7685
// display_name test
7786
// signature_documentation java @Bar(-1.0)\npublic abstract double test()
78-
// enclosing_range 20 2 21 16
7987
// kind AbstractMethod
88+
// ⌃ enclosing_range_end semanticdb maven . . minimized/Foo#test().
8089

90+
// ⌄ enclosing_range_start semanticdb maven . . minimized/Foo#test2().
8191
@Bar(~5)
8292
// ^^^ reference semanticdb maven . . minimized/Bar#
8393
@SuppressWarnings(value = "unchecked")
@@ -87,44 +97,49 @@ interface Foo {
8797
// ^^^^^ definition semanticdb maven . . minimized/Foo#test2().
8898
// display_name test2
8999
// signature_documentation java @Bar(~5)\n@SuppressWarnings("unchecked")\npublic abstract double test2()
90-
// enclosing_range 23 2 25 17
91100
// kind AbstractMethod
101+
// ⌃ enclosing_range_end semanticdb maven . . minimized/Foo#test2().
92102

103+
// ⌄ enclosing_range_start semanticdb maven . . minimized/Foo#test3().
93104
@BarB(!true)
94105
// ^^^^ reference semanticdb maven . . minimized/BarB#
95106
double test3();
96107
// ^^^^^ definition semanticdb maven . . minimized/Foo#test3().
97108
// display_name test3
98109
// signature_documentation java @BarB(!true)\npublic abstract double test3()
99-
// enclosing_range 27 2 28 17
100110
// kind AbstractMethod
111+
// ⌃ enclosing_range_end semanticdb maven . . minimized/Foo#test3().
101112

113+
// ⌄ enclosing_range_start semanticdb maven . . minimized/Foo#test4().
102114
@Nullable(("what"))
103115
// ^^^^^^^^ reference semanticdb maven . . minimized/Nullable#
104116
Foo test4();
105117
// ^^^ reference semanticdb maven . . minimized/Foo#
106118
// ^^^^^ definition semanticdb maven . . minimized/Foo#test4().
107119
// display_name test4
108120
// signature_documentation java @Nullable("what")\npublic abstract Foo test4()
109-
// enclosing_range 30 2 31 14
110121
// kind AbstractMethod
122+
// ⌃ enclosing_range_end semanticdb maven . . minimized/Foo#test4().
111123

124+
// ⌄ enclosing_range_start semanticdb maven . . minimized/Foo#testCast().
112125
@Bar((double) -1)
113126
// ^^^ reference semanticdb maven . . minimized/Bar#
114127
double testCast();
115128
// ^^^^^^^^ definition semanticdb maven . . minimized/Foo#testCast().
116129
// display_name testCast
117130
// signature_documentation java @Bar((double) -1)\npublic abstract double testCast()
118-
// enclosing_range 33 2 34 20
119131
// kind AbstractMethod
132+
// ⌃ enclosing_range_end semanticdb maven . . minimized/Foo#testCast().
120133
}
134+
//⌃ enclosing_range_end semanticdb maven . . minimized/Foo#
121135

136+
//⌄ enclosing_range_start semanticdb maven . . minimized/TestRef#
122137
interface TestRef {
123138
// ^^^^^^^ definition semanticdb maven . . minimized/TestRef#
124139
// display_name TestRef
125140
// signature_documentation java interface TestRef
126-
// enclosing_range 37 0 40 1
127141
// kind Interface
142+
// ⌄ enclosing_range_start semanticdb maven . . minimized/TestRef#testCase().
128143
@BarRef(@SuppressWarnings(value = "unchecked"))
129144
// ^^^^^^ reference semanticdb maven . . minimized/BarRef#
130145
// ^^^^^^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/SuppressWarnings#
@@ -133,6 +148,7 @@ interface TestRef {
133148
// ^^^^^^^^ definition semanticdb maven . . minimized/TestRef#testCase().
134149
// display_name testCase
135150
// signature_documentation java @BarRef(@SuppressWarnings("unchecked"))\npublic abstract double testCase()
136-
// enclosing_range 38 2 39 29
137151
// kind AbstractMethod
152+
// ⌃ enclosing_range_end semanticdb maven . . minimized/TestRef#testCase().
138153
}
154+
//⌃ enclosing_range_end semanticdb maven . . minimized/TestRef#

tests/snapshots/src/main/generated/tests/minimized/src/main/java/minimized/Annotations.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
// ^^^^^^^^^^ reference semanticdb maven . . java/lang/annotation/
2828
// ^^^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/ElementType#
2929

30+
//⌄ enclosing_range_start semanticdb maven . . minimized/Annotations#
3031
@Documented
3132
// ^^^^^^^^^ reference semanticdb maven jdk 11 java/lang/annotation/Documented#
3233
@Retention(RetentionPolicy.RUNTIME)
@@ -54,23 +55,25 @@
5455
// ^^^^^^^^^^^ definition semanticdb maven . . minimized/Annotations#
5556
// display_name Annotations
5657
// signature_documentation java @Documented\n@Retention(RetentionPolicy.RUNTIME)\n@Target({CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})\npublic @interface Annotations
57-
// enclosing_range 9 0 24 1
5858
// kind Interface
5959
// relationship is_implementation semanticdb maven jdk 11 java/lang/annotation/Annotation#
6060

61+
// ⌄ enclosing_range_start semanticdb maven . . minimized/Annotations#value().
6162
String value() default "";
6263
// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String#
6364
// ^^^^^ definition semanticdb maven . . minimized/Annotations#value().
6465
// display_name value
6566
// signature_documentation java public abstract String value()
66-
// enclosing_range 21 2 28
6767
// kind AbstractMethod
68+
// ⌃ enclosing_range_end semanticdb maven . . minimized/Annotations#value().
6869

70+
// ⌄ enclosing_range_start semanticdb maven . . minimized/Annotations#format().
6971
String format() default "";
7072
// ^^^^^^ reference semanticdb maven jdk 11 java/lang/String#
7173
// ^^^^^^ definition semanticdb maven . . minimized/Annotations#format().
7274
// display_name format
7375
// signature_documentation java public abstract String format()
74-
// enclosing_range 23 2 29
7576
// kind AbstractMethod
77+
// ⌃ enclosing_range_end semanticdb maven . . minimized/Annotations#format().
7678
}
79+
//⌃ enclosing_range_end semanticdb maven . . minimized/Annotations#

0 commit comments

Comments
 (0)