Skip to content

Commit 9a98c50

Browse files
authored
Merge pull request #471 from sourcegraph/issue-413
Link references for fields, fixes #431
2 parents a6ccb2d + e60a080 commit 9a98c50

File tree

10 files changed

+128
-9
lines changed

10 files changed

+128
-9
lines changed

project/build.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
sbt.version=1.5.5
1+
sbt.version=1.7.1

scip-java/src/main/scala/com/sourcegraph/scip_java/commands/IndexSemanticdbCommand.scala

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,11 @@ final case class IndexSemanticdbCommand(
4848
) extends Command {
4949
def sourceroot: Path = AbsolutePath.of(app.env.workingDirectory)
5050
def absoluteTargetroots: List[Path] =
51-
targetroot.map(AbsolutePath.of(_, app.env.workingDirectory))
51+
if (targetroot.isEmpty)
52+
List(sourceroot)
53+
else
54+
targetroot.map(AbsolutePath.of(_, sourceroot))
55+
5256
def run(): Int = {
5357
val reporter = new ConsoleScipSemanticdbReporter(app)
5458
val outputFilename = output.getFileName.toString
@@ -68,7 +72,7 @@ final case class IndexSemanticdbCommand(
6872
.toList
6973
val options =
7074
new ScipSemanticdbOptions(
71-
targetroot.map(ts => AbsolutePath.of(ts, sourceroot)).asJava,
75+
absoluteTargetroots.asJava,
7276
AbsolutePath.of(output, sourceroot),
7377
sourceroot,
7478
reporter,

scip-semanticdb/src/main/java/com/sourcegraph/scip_semanticdb/ScipSemanticdb.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import com.sourcegraph.Scip;
1111

1212
import java.io.IOException;
13-
import java.io.InputStream;
1413
import java.net.URI;
1514
import java.nio.file.*;
1615
import java.util.*;
@@ -131,7 +130,7 @@ private void processTypedDocument(Path path, PackageTable packages) {
131130
Scip.Relationship.newBuilder()
132131
.setSymbol(typedSymbol(overriddenSymbol, overriddenSymbolPkg))
133132
.setIsImplementation(true)
134-
.setIsReference(SemanticdbSymbols.isMethod(info.getSymbol())));
133+
.setIsReference(supportsReferenceRelationship(info)));
135134
}
136135
if (info.hasSignature()) {
137136
String language =
@@ -284,7 +283,7 @@ private Integer processDocumentUnsafe(
284283

285284
// Overrides
286285
if (symbolInformation.getOverriddenSymbolsCount() > 0
287-
&& SemanticdbSymbols.isMethod(symbolInformation.getSymbol())
286+
&& supportsReferenceRelationship(symbolInformation)
288287
&& occ.getRole() == Role.DEFINITION) {
289288
List<Integer> overriddenReferenceResultIds =
290289
new ArrayList<>(symbolInformation.getOverriddenSymbolsCount());
@@ -310,6 +309,17 @@ private Integer processDocumentUnsafe(
310309
return documentId;
311310
}
312311

312+
private static boolean supportsReferenceRelationship(SymbolInformation info) {
313+
switch (info.getKind()) {
314+
case CLASS:
315+
case OBJECT:
316+
case PACKAGE_OBJECT:
317+
return false;
318+
default:
319+
return true;
320+
}
321+
}
322+
313323
private Stream<ScipTextDocument> parseTextDocument(Path semanticdbPath) {
314324
try {
315325
return textDocumentsParseFrom(semanticdbPath).getDocumentsList().stream()

semanticdb-java/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbSymbols.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.sourcegraph.semanticdb_javac;
22

33
import java.util.Objects;
4-
import java.util.Optional;
54

65
/**
76
* Utilities to construct SemanticDB symbols.
@@ -35,8 +34,8 @@ public static boolean isGlobal(String symbol) {
3534
return !isLocal(symbol);
3635
}
3736

38-
public static boolean isMethod(String symbol) {
39-
return symbol.endsWith(").");
37+
public static boolean isMethodOrField(String symbol) {
38+
return symbol.endsWith("#");
4039
}
4140

4241
/**
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package minimized
2+
3+
trait Issue413 {
4+
val b: Int
5+
}
6+
7+
class Issue413Subclass extends Issue413 {
8+
override val b = 10
9+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package minimized
2+
3+
object Issue414 {
4+
trait A {
5+
def b(): Unit
6+
}
7+
val a: A =
8+
new A {
9+
override def b(): Unit = {
10+
print("Hello")
11+
}
12+
}
13+
println(a.b())
14+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package minimized
2+
3+
import scala.language.reflectiveCalls
4+
5+
class ReflectiveCall {
6+
// Reproduction for https://github.com/scalameta/scalameta/issues/2788
7+
val a =
8+
new {
9+
val b = 1
10+
}
11+
println(a.b)
12+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package minimized
2+
// ^^^^^^^^^ definition minimized/
3+
4+
trait Issue413 {
5+
// ^^^^^^^^ definition minimized/Issue413# trait Issue413
6+
val b: Int
7+
// ^ definition minimized/Issue413#b. val b: Int
8+
// ^^^ reference scala/Int#
9+
}
10+
11+
class Issue413Subclass extends Issue413 {
12+
// ^^^^^^^^^^^^^^^^ definition minimized/Issue413Subclass# class Issue413Subclass
13+
// definition minimized/Issue413Subclass#`<init>`(). def this()
14+
// ^^^^^^^^ reference minimized/Issue413#
15+
// reference java/lang/Object#`<init>`().
16+
override val b = 10
17+
// ^ definition minimized/Issue413Subclass#b. val b: Int
18+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package minimized
2+
// ^^^^^^^^^ definition minimized/
3+
4+
object Issue414 {
5+
// ^^^^^^^^ definition minimized/Issue414. object Issue414
6+
trait A {
7+
// ^ definition minimized/Issue414.A# trait A
8+
def b(): Unit
9+
// ^ definition minimized/Issue414.A#b(). def b(): Unit
10+
// ^^^^ reference scala/Unit#
11+
}
12+
val a: A =
13+
// ^ definition minimized/Issue414.a. val a: A
14+
// ^ reference minimized/Issue414.A#
15+
new A {
16+
// definition local0 final class $anon
17+
// ^ reference minimized/Issue414.A#
18+
// reference java/lang/Object#`<init>`().
19+
override def b(): Unit = {
20+
// ^ definition local1 def b(): Unit
21+
// ^^^^ reference scala/Unit#
22+
print("Hello")
23+
// ^^^^^ reference scala/Predef.print().
24+
}
25+
}
26+
println(a.b())
27+
//^^^^^^^ reference scala/Predef.println(+1).
28+
// ^ reference minimized/Issue414.a.
29+
// ^ reference minimized/Issue414.A#b().
30+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package minimized
2+
// ^^^^^^^^^ definition minimized/
3+
4+
import scala.language.reflectiveCalls
5+
// ^^^^^ reference scala/
6+
// ^^^^^^^^ reference scala/language.
7+
// ^^^^^^^^^^^^^^^ reference scala/language.reflectiveCalls.
8+
9+
class ReflectiveCall {
10+
// ^^^^^^^^^^^^^^ definition minimized/ReflectiveCall# class ReflectiveCall
11+
// definition minimized/ReflectiveCall#`<init>`(). def this()
12+
// Reproduction for https://github.com/scalameta/scalameta/issues/2788
13+
val a =
14+
// ^ definition minimized/ReflectiveCall#a. val a: { val b: Int }
15+
new {
16+
// definition local0 final class $anon
17+
val b = 1
18+
// ^ definition local1 val b: Int
19+
}
20+
println(a.b)
21+
//^^^^^^^ reference scala/Predef.println(+1).
22+
// ^ reference minimized/ReflectiveCall#a.
23+
}

0 commit comments

Comments
 (0)