Skip to content

Commit 2ddfbf4

Browse files
authored
Merge pull request #401 from olafurpg/copy-apply
Support more synthetic Scala symbols
2 parents 36570f0 + de10077 commit 2ddfbf4

File tree

10 files changed

+98
-11
lines changed

10 files changed

+98
-11
lines changed

lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/LsifSemanticdb.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ private Semanticdb.TextDocuments textDocumentsParseFrom(Path semanticdbPath) thr
338338
}
339339

340340
private boolean isIgnoredOverriddenSymbol(String symbol) {
341-
// Skip java/lang/Object# since it's the parent of all classes
341+
// Skip java/lang/Object# and similar symbols from Scala since it's the parent of all classes
342342
// making it noisy for "find implementations" results.
343343
return symbol.equals("java/lang/Object#");
344344
}

lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/LsifTextDocument.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,24 @@ public static List<String> alternativeSymbols(Semanticdb.SymbolInformation info)
136136
owner.owner, owner.descriptor.withKind(SemanticdbSymbols.Descriptor.Kind.Type)));
137137
}
138138
break;
139+
case Parameter:
140+
SymbolDescriptor owner = SymbolDescriptor.parseFromSymbol(sym.owner);
141+
if (owner.descriptor.name.equals("copy")) {
142+
// case classes copy method parameter.
143+
alternatives.add(
144+
SemanticdbSymbols.global(
145+
owner.owner, sym.descriptor.withKind(SemanticdbSymbols.Descriptor.Kind.Term)));
146+
} else if (owner.descriptor.name.equals("apply")) {
147+
// case class companion apply constructor parameter.
148+
SymbolDescriptor grandparent = SymbolDescriptor.parseFromSymbol(owner.owner);
149+
String companion =
150+
SemanticdbSymbols.global(
151+
grandparent.owner,
152+
grandparent.descriptor.withKind(SemanticdbSymbols.Descriptor.Kind.Type));
153+
alternatives.add(
154+
SemanticdbSymbols.global(
155+
companion, sym.descriptor.withKind(SemanticdbSymbols.Descriptor.Kind.Term)));
156+
}
139157
case Term:
140158
alternatives.add(
141159
SemanticdbSymbols.global(

tests/minimized-scala/src/main/scala/minimized/Issue396.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package minimized
33
case class Issue396(a: Int)
44
object Issue396App {
55
println(Issue396)
6-
Issue396.apply(42).copy(a = 41)
7-
Issue396.apply(42).productElement(0)
8-
Issue396.apply(42).productElementName(0)
6+
Issue396.apply(a = 42).copy(a = 41)
7+
Issue396.apply(a = 42).productElement(0)
8+
Issue396.apply(a = 42).productElementName(0)
99
}

tests/snapshots/src/main/generated/minimized/Issue396.scala

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,28 @@ case class Issue396(a: Int)
1010
// ^^^^^^^^ synthetic_definition minimized/Issue396#productElementName(). def productElementName(x$1: Int): String
1111
// definition minimized/Issue396#`<init>`(). def this(a: Int)
1212
// ^ definition minimized/Issue396#a. val a: Int
13+
// ^ synthetic_definition minimized/Issue396.apply().(a) a: Int
14+
// ^ synthetic_definition minimized/Issue396#copy().(a) default a: Int
1315
// ^^^ reference scala/Int#
1416
object Issue396App {
1517
// ^^^^^^^^^^^ definition minimized/Issue396App. object Issue396App
1618
println(Issue396)
1719
//^^^^^^^ reference scala/Predef.println(+1).
1820
// ^^^^^^^^ reference minimized/Issue396.
19-
Issue396.apply(42).copy(a = 41)
21+
Issue396.apply(a = 42).copy(a = 41)
2022
//^^^^^^^^ reference minimized/Issue396.
2123
// ^^^^^ reference minimized/Issue396.apply().
22-
// ^^^^ reference minimized/Issue396#copy().
23-
// ^ reference minimized/Issue396#copy().(a)
24-
Issue396.apply(42).productElement(0)
24+
// ^ reference minimized/Issue396.apply().(a)
25+
// ^^^^ reference minimized/Issue396#copy().
26+
// ^ reference minimized/Issue396#copy().(a)
27+
Issue396.apply(a = 42).productElement(0)
2528
//^^^^^^^^ reference minimized/Issue396.
2629
// ^^^^^ reference minimized/Issue396.apply().
27-
// ^^^^^^^^^^^^^^ reference minimized/Issue396#productElement().
28-
Issue396.apply(42).productElementName(0)
30+
// ^ reference minimized/Issue396.apply().(a)
31+
// ^^^^^^^^^^^^^^ reference minimized/Issue396#productElement().
32+
Issue396.apply(a = 42).productElementName(0)
2933
//^^^^^^^^ reference minimized/Issue396.
3034
// ^^^^^ reference minimized/Issue396.apply().
31-
// ^^^^^^^^^^^^^^^^^^ reference minimized/Issue396#productElementName().
35+
// ^ reference minimized/Issue396.apply().(a)
36+
// ^^^^^^^^^^^^^^^^^^ reference minimized/Issue396#productElementName().
3237
}

tests/snapshots/src/main/generated/minimized/MinimizedScalaSignatures.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ case class MinimizedCaseClass(value: String) {
1313
// ^^^^^^^^^^^^^^^^^^ synthetic_definition minimized/MinimizedCaseClass#copy(). def copy(value: String): MinimizedCaseClass
1414
// definition minimized/MinimizedCaseClass#`<init>`(). def this(value: String)
1515
// ^^^^^ definition minimized/MinimizedCaseClass#value. val value: String
16+
// ^^^^^ synthetic_definition minimized/MinimizedCaseClass#copy().(value) default value: String
17+
// ^^^^^ synthetic_definition minimized/MinimizedCaseClass.apply().(value) value: String
1618
// ^^^^^^ reference scala/Predef.String#
1719
def this() = this("value")
1820
// ^^^^ definition minimized/MinimizedCaseClass#`<init>`(+1). def this()

tests/snapshots/src/main/generated/ujson/Exceptions.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,12 @@ case class ParseException(clue: String, index: Int)
1515
// ^^^^^^^^^^^^^^ synthetic_definition ujson/ParseException#productElement(). def productElement(x$1: Int): Any
1616
// definition ujson/ParseException#`<init>`(). def this(clue: String, index: Int)
1717
// ^^^^ definition ujson/ParseException#clue. val clue: String
18+
// ^^^^ synthetic_definition ujson/ParseException.apply().(clue) clue: String
19+
// ^^^^ synthetic_definition ujson/ParseException#copy().(clue) default clue: String
1820
// ^^^^^^ reference scala/Predef.String#
1921
// ^^^^^ definition ujson/ParseException#index. val index: Int
22+
// ^^^^^ synthetic_definition ujson/ParseException.apply().(index) index: Int
23+
// ^^^^^ synthetic_definition ujson/ParseException#copy().(index) default index: Int
2024
// ^^^ reference scala/Int#
2125
extends Exception(clue + " at index " + index) with ParsingFailedException
2226
// ^^^^^^^^^ reference scala/package.Exception#
@@ -36,6 +40,8 @@ case class IncompleteParseException(msg: String)
3640
// ^^^^^^^^^^^^^^^^^^^^^^^^ synthetic_definition ujson/IncompleteParseException. object IncompleteParseException
3741
// definition ujson/IncompleteParseException#`<init>`(). def this(msg: String)
3842
// ^^^ definition ujson/IncompleteParseException#msg. val msg: String
43+
// ^^^ synthetic_definition ujson/IncompleteParseException.apply().(msg) msg: String
44+
// ^^^ synthetic_definition ujson/IncompleteParseException#copy().(msg) default msg: String
3945
// ^^^^^^ reference scala/Predef.String#
4046
extends Exception(msg) with ParsingFailedException
4147
// ^^^^^^^^^ reference scala/package.Exception#

tests/snapshots/src/main/generated/ujson/IndexedValue.scala

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,12 @@ object IndexedValue extends Transformer[IndexedValue]{
5050
// ^^^ synthetic_definition ujson/IndexedValue.Str#productElementName(). def productElementName(x$1: Int): String
5151
// definition ujson/IndexedValue.Str#`<init>`(). def this(index: Int, value0: CharSequence)
5252
// ^^^^^ definition ujson/IndexedValue.Str#index. val index: Int
53+
// ^^^^^ synthetic_definition ujson/IndexedValue.Str#copy().(index) default index: Int
54+
// ^^^^^ synthetic_definition ujson/IndexedValue.Str.apply().(index) index: Int
5355
// ^^^ reference scala/Int#
5456
// ^^^^^^ definition ujson/IndexedValue.Str#value0. val value0: CharSequence
57+
// ^^^^^^ synthetic_definition ujson/IndexedValue.Str.apply().(value0) value0: CharSequence
58+
// ^^^^^^ synthetic_definition ujson/IndexedValue.Str#copy().(value0) default value0: CharSequence
5559
// ^^^^ reference java/
5660
// ^^^^ reference java/lang/
5761
// ^^^^^^^^^^^^ reference java/lang/CharSequence#
@@ -65,8 +69,10 @@ object IndexedValue extends Transformer[IndexedValue]{
6569
// ^^^ synthetic_definition ujson/IndexedValue.Obj#productElementName(). def productElementName(x$1: Int): String
6670
// definition ujson/IndexedValue.Obj#`<init>`(). def this(index: Int, value0: (CharSequence, IndexedValue)*)
6771
// ^^^^^ definition ujson/IndexedValue.Obj#index. val index: Int
72+
// ^^^^^ synthetic_definition ujson/IndexedValue.Obj.apply().(index) index: Int
6873
// ^^^ reference scala/Int#
6974
// ^^^^^^ definition ujson/IndexedValue.Obj#value0. val value0: (CharSequence, IndexedValue)*
75+
// ^^^^^^ synthetic_definition ujson/IndexedValue.Obj.apply().(value0) value0: (CharSequence, IndexedValue)*
7076
// ^^^^ reference java/
7177
// ^^^^ reference java/lang/
7278
// ^^^^^^^^^^^^ reference java/lang/CharSequence#
@@ -81,8 +87,10 @@ object IndexedValue extends Transformer[IndexedValue]{
8187
// ^^^ synthetic_definition ujson/IndexedValue.Arr.apply(). def apply(index: Int, value: IndexedValue*): Arr
8288
// definition ujson/IndexedValue.Arr#`<init>`(). def this(index: Int, value: IndexedValue*)
8389
// ^^^^^ definition ujson/IndexedValue.Arr#index. val index: Int
90+
// ^^^^^ synthetic_definition ujson/IndexedValue.Arr.apply().(index) index: Int
8491
// ^^^ reference scala/Int#
8592
// ^^^^^ definition ujson/IndexedValue.Arr#value. val value: IndexedValue*
93+
// ^^^^^ synthetic_definition ujson/IndexedValue.Arr.apply().(value) value: IndexedValue*
8694
// ^^^^^^^^^^^^ reference ujson/IndexedValue#
8795
// ^^^^^^^^^^^^ reference ujson/IndexedValue#
8896
// reference java/lang/Object#`<init>`().
@@ -95,12 +103,20 @@ object IndexedValue extends Transformer[IndexedValue]{
95103
// ^^^ synthetic_definition ujson/IndexedValue.Num.apply(). def apply(index: Int, s: CharSequence, decIndex: Int, expIndex: Int): Num
96104
// definition ujson/IndexedValue.Num#`<init>`(). def this(index: Int, s: CharSequence, decIndex: Int, expIndex: Int)
97105
// ^^^^^ definition ujson/IndexedValue.Num#index. val index: Int
106+
// ^^^^^ synthetic_definition ujson/IndexedValue.Num#copy().(index) default index: Int
107+
// ^^^^^ synthetic_definition ujson/IndexedValue.Num.apply().(index) index: Int
98108
// ^^^ reference scala/Int#
99109
// ^ definition ujson/IndexedValue.Num#s. val s: CharSequence
110+
// ^ synthetic_definition ujson/IndexedValue.Num.apply().(s) s: CharSequence
111+
// ^ synthetic_definition ujson/IndexedValue.Num#copy().(s) default s: CharSequence
100112
// ^^^^^^^^^^^^ reference java/lang/CharSequence#
101113
// ^^^^^^^^ definition ujson/IndexedValue.Num#decIndex. val decIndex: Int
114+
// ^^^^^^^^ synthetic_definition ujson/IndexedValue.Num#copy().(decIndex) default decIndex: Int
115+
// ^^^^^^^^ synthetic_definition ujson/IndexedValue.Num.apply().(decIndex) decIndex: Int
102116
// ^^^ reference scala/Int#
103117
// ^^^^^^^^ definition ujson/IndexedValue.Num#expIndex. val expIndex: Int
118+
// ^^^^^^^^ synthetic_definition ujson/IndexedValue.Num.apply().(expIndex) expIndex: Int
119+
// ^^^^^^^^ synthetic_definition ujson/IndexedValue.Num#copy().(expIndex) default expIndex: Int
104120
// ^^^ reference scala/Int#
105121
// ^^^^^^^^^^^^ reference ujson/IndexedValue#
106122
// reference java/lang/Object#`<init>`().
@@ -113,8 +129,12 @@ object IndexedValue extends Transformer[IndexedValue]{
113129
// ^^^^^^ synthetic_definition ujson/IndexedValue.NumRaw#productElementName(). def productElementName(x$1: Int): String
114130
// definition ujson/IndexedValue.NumRaw#`<init>`(). def this(index: Int, d: Double)
115131
// ^^^^^ definition ujson/IndexedValue.NumRaw#index. val index: Int
132+
// ^^^^^ synthetic_definition ujson/IndexedValue.NumRaw.apply().(index) index: Int
133+
// ^^^^^ synthetic_definition ujson/IndexedValue.NumRaw#copy().(index) default index: Int
116134
// ^^^ reference scala/Int#
117135
// ^ definition ujson/IndexedValue.NumRaw#d. val d: Double
136+
// ^ synthetic_definition ujson/IndexedValue.NumRaw#copy().(d) default d: Double
137+
// ^ synthetic_definition ujson/IndexedValue.NumRaw.apply().(d) d: Double
118138
// ^^^^^^ reference scala/Double#
119139
// ^^^^^^^^^^^^ reference ujson/IndexedValue#
120140
// reference java/lang/Object#`<init>`().
@@ -127,6 +147,8 @@ object IndexedValue extends Transformer[IndexedValue]{
127147
// ^^^^^ synthetic_definition ujson/IndexedValue.False#copy(). def copy(index: Int): False
128148
// definition ujson/IndexedValue.False#`<init>`(). def this(index: Int)
129149
// ^^^^^ definition ujson/IndexedValue.False#index. val index: Int
150+
// ^^^^^ synthetic_definition ujson/IndexedValue.False.apply().(index) index: Int
151+
// ^^^^^ synthetic_definition ujson/IndexedValue.False#copy().(index) default index: Int
130152
// ^^^ reference scala/Int#
131153
// ^^^^^^^^^^^^ reference ujson/IndexedValue#
132154
// reference java/lang/Object#`<init>`().
@@ -142,6 +164,8 @@ object IndexedValue extends Transformer[IndexedValue]{
142164
// ^^^^ synthetic_definition ujson/IndexedValue.True#productElementName(). def productElementName(x$1: Int): String
143165
// definition ujson/IndexedValue.True#`<init>`(). def this(index: Int)
144166
// ^^^^^ definition ujson/IndexedValue.True#index. val index: Int
167+
// ^^^^^ synthetic_definition ujson/IndexedValue.True.apply().(index) index: Int
168+
// ^^^^^ synthetic_definition ujson/IndexedValue.True#copy().(index) default index: Int
145169
// ^^^ reference scala/Int#
146170
// ^^^^^^^^^^^^ reference ujson/IndexedValue#
147171
// reference java/lang/Object#`<init>`().
@@ -157,6 +181,8 @@ object IndexedValue extends Transformer[IndexedValue]{
157181
// ^^^^ synthetic_definition ujson/IndexedValue.Null. object Null
158182
// definition ujson/IndexedValue.Null#`<init>`(). def this(index: Int)
159183
// ^^^^^ definition ujson/IndexedValue.Null#index. val index: Int
184+
// ^^^^^ synthetic_definition ujson/IndexedValue.Null.apply().(index) index: Int
185+
// ^^^^^ synthetic_definition ujson/IndexedValue.Null#copy().(index) default index: Int
160186
// ^^^ reference scala/Int#
161187
// ^^^^^^^^^^^^ reference ujson/IndexedValue#
162188
// reference java/lang/Object#`<init>`().

tests/snapshots/src/main/generated/ujson/Readable.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,12 @@ object Readable extends ReadableLowPri{
4141
// ^ definition ujson/Readable.fromTransformer#[T] T
4242
// definition ujson/Readable.fromTransformer#`<init>`(). def this(t: T, w: Transformer[T])
4343
// ^ definition ujson/Readable.fromTransformer#t. val t: T
44+
// ^ synthetic_definition ujson/Readable.fromTransformer#copy().(t) default t: T
45+
// ^ synthetic_definition ujson/Readable.fromTransformer.apply().(t) t: T
4446
// ^ reference ujson/Readable.fromTransformer#[T]
4547
// ^ definition ujson/Readable.fromTransformer#w. val w: Transformer[T]
48+
// ^ synthetic_definition ujson/Readable.fromTransformer#copy().(w) default w: Transformer[T]
49+
// ^ synthetic_definition ujson/Readable.fromTransformer.apply().(w) w: Transformer[T]
4650
// ^^^^^^^^^^^ reference ujson/Transformer#
4751
// ^ reference ujson/Readable.fromTransformer#[T]
4852
// ^^^^^^^^ reference ujson/Readable#

0 commit comments

Comments
 (0)