Skip to content

Commit 67ee42e

Browse files
author
angelozerr
committed
Initialize Implementation action. See
#34
1 parent 5b52a8a commit 67ee42e

File tree

47 files changed

+1136
-666
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1136
-666
lines changed

core/ts.core.tests/src/ts/internal/client/protocol/CommandNamesTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import org.junit.Assert;
44
import org.junit.Test;
55

6+
import ts.client.CommandNames;
7+
68

79
public class CommandNamesTest {
810

core/ts.core/META-INF/MANIFEST.MF

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ Export-Package: ts,
2424
ts.cmd,
2525
ts.cmd.tsc,
2626
ts.cmd.tslint,
27-
ts.internal.client.protocol;x-friends:="ts.core.tests",
2827
ts.nodejs,
2928
ts.repository,
3029
ts.resources,

core/ts.core/src/ts/internal/client/protocol/CommandNames.java renamed to core/ts.core/src/ts/client/CommandNames.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Contributors:
99
* Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation
1010
*/
11-
package ts.internal.client.protocol;
11+
package ts.client;
1212

1313
/**
1414
* Command names of tsserver.
@@ -21,7 +21,8 @@ public enum CommandNames {
2121
"definition"), SignatureHelp("signatureHelp"), QuickInfo("quickinfo"), Geterr("geterr"), Format(
2222
"format"), References("references"), Occurrences("occurrences"), Configure(
2323
"configure"), SemanticDiagnosticsSync("semanticDiagnosticsSync",
24-
"2.0.3"), SyntacticDiagnosticsSync("syntacticDiagnosticsSync", "2.0.3");
24+
"2.0.3"), SyntacticDiagnosticsSync("syntacticDiagnosticsSync",
25+
"2.0.3"), Implementation("implementation", "2.0.6");
2526

2627
private final String name;
2728
private final String sinceVersion;

core/ts.core/src/ts/client/ITypeScriptServiceClient.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,16 @@ void navbar(String fileName, IPositionProvider positionProvider, ITypeScriptNavB
8585

8686
void configure(ConfigureRequestArguments arguments) throws TypeScriptException;
8787

88-
// @Since("2.0.3")
88+
// Since 2.0.3
89+
8990
void semanticDiagnosticsSync(String file, Boolean includeLinePosition, ITypeScriptDiagnosticsCollector collector)
9091
throws TypeScriptException;
9192

9293
void syntacticDiagnosticsSync(String file, Boolean includeLinePosition, ITypeScriptDiagnosticsCollector collector)
9394
throws TypeScriptException;
9495

96+
// Since 2.0.5
97+
98+
void implementation(String fileName, int line, int offset, ITypeScriptDefinitionCollector collector)
99+
throws TypeScriptException;
95100
}

core/ts.core/src/ts/client/TypeScriptServiceClient.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import ts.internal.client.protocol.DefinitionRequest;
5151
import ts.internal.client.protocol.FormatRequest;
5252
import ts.internal.client.protocol.GeterrRequest;
53+
import ts.internal.client.protocol.ImplementationRequest;
5354
import ts.internal.client.protocol.NavBarRequest;
5455
import ts.internal.client.protocol.OccurrencesRequest;
5556
import ts.internal.client.protocol.OpenRequest;
@@ -320,6 +321,15 @@ public void syntacticDiagnosticsSync(String fileName, Boolean includeLinePositio
320321
execute(request);
321322
}
322323

324+
// ---------------- Since 2.0.5
325+
326+
@Override
327+
public void implementation(String fileName, int line, int offset, ITypeScriptDefinitionCollector collector)
328+
throws TypeScriptException {
329+
ImplementationRequest request = new ImplementationRequest(fileName, line, offset, collector);
330+
execute(request);
331+
}
332+
323333
private void execute(Request request) throws TypeScriptException {
324334
if (!request.isAsynch()) {
325335
try {

core/ts.core/src/ts/internal/client/protocol/ChangeRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.eclipsesource.json.JsonObject;
1414

1515
import ts.TypeScriptException;
16+
import ts.client.CommandNames;
1617

1718
/**
1819
* Change request message; value of command field is "change". Update the

core/ts.core/src/ts/internal/client/protocol/CloseRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.eclipsesource.json.JsonObject;
1414

1515
import ts.TypeScriptException;
16+
import ts.client.CommandNames;
1617

1718
/**
1819
* Close request.

core/ts.core/src/ts/internal/client/protocol/CompletionDetailsRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.eclipsesource.json.JsonValue;
1616

1717
import ts.TypeScriptException;
18+
import ts.client.CommandNames;
1819
import ts.client.completions.ITypeScriptCompletionEntryDetailsCollector;
1920
import ts.utils.JsonHelper;
2021

core/ts.core/src/ts/internal/client/protocol/CompletionsRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.eclipsesource.json.JsonValue;
1616

1717
import ts.TypeScriptException;
18+
import ts.client.CommandNames;
1819
import ts.client.ITypeScriptServiceClient;
1920
import ts.client.completions.ITypeScriptCompletionCollector;
2021

core/ts.core/src/ts/internal/client/protocol/ConfigureRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.eclipsesource.json.JsonObject;
44

55
import ts.TypeScriptException;
6+
import ts.client.CommandNames;
67

78
public class ConfigureRequest extends SimpleRequest {
89

core/ts.core/src/ts/internal/client/protocol/DefinitionRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.eclipsesource.json.JsonValue;
1616

1717
import ts.TypeScriptException;
18+
import ts.client.CommandNames;
1819
import ts.client.definition.ITypeScriptDefinitionCollector;
1920

2021
/**

core/ts.core/src/ts/internal/client/protocol/FileLocationRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
*/
1111
package ts.internal.client.protocol;
1212

13+
import ts.client.CommandNames;
1314
import ts.client.ITypeScriptCollector;
1415

1516
/**

core/ts.core/src/ts/internal/client/protocol/FileRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
*/
1111
package ts.internal.client.protocol;
1212

13+
import ts.client.CommandNames;
1314
import ts.client.ITypeScriptCollector;
1415

1516
/**

core/ts.core/src/ts/internal/client/protocol/FormatRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.eclipsesource.json.JsonValue;
1616

1717
import ts.TypeScriptException;
18+
import ts.client.CommandNames;
1819
import ts.client.format.ITypeScriptFormatCollector;
1920

2021
/**

core/ts.core/src/ts/internal/client/protocol/GeterrRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.eclipsesource.json.JsonArray;
1818
import com.eclipsesource.json.JsonObject;
1919

20+
import ts.client.CommandNames;
2021
import ts.client.diagnostics.ITypeScriptDiagnosticsCollector;
2122

2223
/**
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package ts.internal.client.protocol;
2+
3+
import com.eclipsesource.json.JsonArray;
4+
import com.eclipsesource.json.JsonObject;
5+
import com.eclipsesource.json.JsonValue;
6+
7+
import ts.TypeScriptException;
8+
import ts.client.CommandNames;
9+
import ts.client.definition.ITypeScriptDefinitionCollector;
10+
11+
/**
12+
* Go to implementation request; value of command field is "implementation".
13+
* Return response giving the file locations that implement the symbol found in
14+
* file at location line, col.
15+
*/
16+
public class ImplementationRequest extends FileLocationRequest<ITypeScriptDefinitionCollector> {
17+
18+
public ImplementationRequest(String fileName, int line, int offset, ITypeScriptDefinitionCollector collector) {
19+
super(CommandNames.Implementation, new FileLocationRequestArgs(fileName, line, offset));
20+
super.setCollector(collector);
21+
}
22+
23+
@Override
24+
public void collect(JsonObject response) throws TypeScriptException {
25+
ITypeScriptDefinitionCollector collector = super.getCollector();
26+
JsonArray items = response.get("body").asArray();
27+
JsonObject def = null;
28+
JsonObject start = null;
29+
JsonObject end = null;
30+
for (JsonValue item : items) {
31+
def = (JsonObject) item;
32+
start = def.get("start").asObject();
33+
end = def.get("end").asObject();
34+
collector.addDefinition(def.getString("file", null), start.getInt("line", -1), start.getInt("offset", -1),
35+
end.getInt("line", -1), end.getInt("offset", -1));
36+
}
37+
}
38+
39+
}

core/ts.core/src/ts/internal/client/protocol/NavBarRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.google.gson.InstanceCreator;
1919

2020
import ts.TypeScriptException;
21+
import ts.client.CommandNames;
2122
import ts.client.IPositionProvider;
2223
import ts.client.Location;
2324
import ts.client.navbar.ITypeScriptNavBarCollector;

core/ts.core/src/ts/internal/client/protocol/OccurrencesRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.eclipsesource.json.JsonValue;
1616

1717
import ts.TypeScriptException;
18+
import ts.client.CommandNames;
1819
import ts.client.occurrences.ITypeScriptOccurrencesCollector;
1920

2021
/**

core/ts.core/src/ts/internal/client/protocol/OpenRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.eclipsesource.json.JsonObject;
1414

1515
import ts.TypeScriptException;
16+
import ts.client.CommandNames;
1617

1718
/**
1819
* Open request; value of command field is "open". Notify the server that the

core/ts.core/src/ts/internal/client/protocol/QuickInfoRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.eclipsesource.json.JsonObject;
1414

1515
import ts.TypeScriptException;
16+
import ts.client.CommandNames;
1617
import ts.client.quickinfo.ITypeScriptQuickInfoCollector;
1718

1819
/**

core/ts.core/src/ts/internal/client/protocol/ReferencesRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.eclipsesource.json.JsonValue;
66

77
import ts.TypeScriptException;
8+
import ts.client.CommandNames;
89
import ts.client.references.ITypeScriptReferencesCollector;
910

1011
public class ReferencesRequest extends FileLocationRequest<ITypeScriptReferencesCollector> {

core/ts.core/src/ts/internal/client/protocol/ReloadRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.eclipsesource.json.JsonObject;
1414

1515
import ts.TypeScriptException;
16+
import ts.client.CommandNames;
1617

1718
/**
1819
* Reload request message; value of command field is "reload". Reload contents

core/ts.core/src/ts/internal/client/protocol/Request.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.eclipsesource.json.JsonObject;
1414

1515
import ts.TypeScriptException;
16+
import ts.client.CommandNames;
1617
import ts.client.ITypeScriptAsynchCollector;
1718
import ts.client.ITypeScriptCollector;
1819
import ts.client.TypeScriptTimeoutException;

core/ts.core/src/ts/internal/client/protocol/SemanticDiagnosticsSyncRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.eclipsesource.json.JsonValue;
66

77
import ts.TypeScriptException;
8+
import ts.client.CommandNames;
89
import ts.client.diagnostics.ITypeScriptDiagnosticsCollector;
910

1011
/**

core/ts.core/src/ts/internal/client/protocol/SignatureHelpRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.eclipsesource.json.JsonObject;
1414

1515
import ts.TypeScriptException;
16+
import ts.client.CommandNames;
1617
import ts.client.signaturehelp.ITypeScriptSignatureHelpCollector;
1718

1819
/**

core/ts.core/src/ts/internal/client/protocol/SimpleRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import ts.TypeScriptException;
1616
import ts.TypeScriptNoContentAvailableException;
17+
import ts.client.CommandNames;
1718
import ts.client.ITypeScriptAsynchCollector;
1819
import ts.client.ITypeScriptCollector;
1920

core/ts.core/src/ts/internal/client/protocol/SyntacticDiagnosticsSyncRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.eclipsesource.json.JsonValue;
66

77
import ts.TypeScriptException;
8+
import ts.client.CommandNames;
89
import ts.client.diagnostics.ITypeScriptDiagnosticsCollector;
910

1011
/**

core/ts.core/src/ts/resources/AbstractTypeScriptFile.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import ts.client.format.FormatOptions;
2323
import ts.client.format.ITypeScriptFormatCollector;
2424
import ts.client.navbar.ITypeScriptNavBarCollector;
25-
import ts.client.navbar.NavigationBarItem;
2625
import ts.client.navbar.NavigationBarItemRoot;
2726
import ts.client.occurrences.ITypeScriptOccurrencesCollector;
2827
import ts.client.references.ITypeScriptReferencesCollector;
@@ -183,6 +182,16 @@ public void navbar(ITypeScriptNavBarCollector collector) throws TypeScriptExcept
183182
client.navbar(this.getName(), this, collector);
184183
}
185184

185+
@Override
186+
public void implementation(int position, ITypeScriptDefinitionCollector collector) throws TypeScriptException {
187+
this.synch();
188+
ITypeScriptServiceClient client = tsProject.getClient();
189+
Location location = this.getLocation(position);
190+
int line = location.getLine();
191+
int offset = location.getOffset();
192+
client.implementation(this.getName(), line, offset, collector);
193+
}
194+
186195
private class TypeScriptNavBarCollector implements ITypeScriptNavBarCollector, ITypeScriptAsynchCollector {
187196

188197
@Override

core/ts.core/src/ts/resources/ITypeScriptFile.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,15 @@ public interface ITypeScriptFile extends IPositionProvider {
140140
*/
141141
void navbar(ITypeScriptNavBarCollector collector) throws TypeScriptException;
142142

143+
/**
144+
* Call implementation from the tsserver.
145+
*
146+
* @param position
147+
* @param collector
148+
* @throws TypeScriptException
149+
*/
150+
void implementation(int position, ITypeScriptDefinitionCollector collector) throws TypeScriptException;
151+
143152
void addNavbarListener(INavbarListener listener);
144153

145154
void removeNavbarListener(INavbarListener listener);

core/ts.core/src/ts/resources/ITypeScriptProject.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
package ts.resources;
1212

1313
import ts.TypeScriptException;
14+
import ts.client.CommandNames;
1415
import ts.client.ITypeScriptClientListener;
1516
import ts.client.ITypeScriptServiceClient;
1617
import ts.client.diagnostics.ITypeScriptDiagnosticsCollector;
@@ -92,4 +93,14 @@ void syntacticDiagnosticsSync(ITypeScriptFile tsFile, Boolean includeLinePositio
9293

9394
void disposeTslint();
9495

96+
/**
97+
* Returns true if the given tsserver command can be supported by the
98+
* TypeScript version configured for the project and false otherwise.
99+
*
100+
* @param command
101+
* @return true if the given tsserver command can be supported by the
102+
* TypeScript version configured for the project and false
103+
* otherwise.
104+
*/
105+
boolean canSupport(CommandNames command);
95106
}

0 commit comments

Comments
 (0)