Skip to content

Commit 942b2ae

Browse files
committed
fIX #70 &
#68
1 parent c2ca547 commit 942b2ae

20 files changed

+407
-93
lines changed

core/ts.core/src/ts/internal/repository/TypeScriptRepository.java

+7-17
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ public class TypeScriptRepository implements ITypeScriptRepository {
1818
private String name;
1919
private File typesScriptDir;
2020
private File tscFile;
21-
private File tsserverFile;
2221
private File tslintFile;
2322
private String tslintName;
2423
private String typesScriptVersion;
@@ -37,17 +36,8 @@ public TypeScriptRepository(File baseDir, TypeScriptRepositoryManager manager)
3736
}
3837

3938
private void updateBaseDir(File baseDir) throws TypeScriptRepositoryException {
40-
this.typesScriptDir = baseDir;
41-
// tsserver file
42-
this.tsserverFile = TypeScriptRepositoryManager.getTsserverFile(typesScriptDir);
43-
if (!tsserverFile.exists()) {
44-
this.typesScriptDir = new File(baseDir, "node_modules/typescript");
45-
this.tsserverFile = TypeScriptRepositoryManager.getTsserverFile(typesScriptDir);
46-
}
47-
if (!tsserverFile.exists()) {
48-
throw new TypeScriptRepositoryException(FileUtils.getPath(typesScriptDir)
49-
+ " is not a valid TypeScript repository. Check the directory contains node_modules/typescript/bin/tsserver or bin/tsserver.");
50-
}
39+
this.typesScriptDir = new File(baseDir, "node_modules/typescript");
40+
TypeScriptRepositoryManager.validateTypeScriptDir(typesScriptDir);
5141
// tsc file
5242
this.tscFile = TypeScriptRepositoryManager.getTscFile(typesScriptDir);
5343
this.typesScriptVersion = TypeScriptRepositoryManager.getPackageJsonVersion(typesScriptDir);
@@ -97,6 +87,11 @@ public void setBaseDir(File baseDir) {
9787
this.baseDir = baseDir;
9888
}
9989

90+
@Override
91+
public File getTypesScriptDir() {
92+
return typesScriptDir;
93+
}
94+
10095
@Override
10196
public String getTypesScriptVersion() {
10297
return typesScriptVersion;
@@ -107,11 +102,6 @@ public File getTscFile() {
107102
return tscFile;
108103
}
109104

110-
@Override
111-
public File getTsserverFile() {
112-
return tsserverFile;
113-
}
114-
115105
@Override
116106
public String getTslintVersion() {
117107
return tslintVersion;

core/ts.core/src/ts/nodejs/NodejsProcess.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -273,11 +273,10 @@ public static String getNodeVersion(File nodejsFile) {
273273
reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
274274
return reader.readLine();
275275
} catch (IOException e) {
276-
e.printStackTrace();
276+
return null;
277277
} finally {
278278
IOUtils.closeQuietly(reader);
279279
}
280-
return nodejsFile.getName();
281280
}
282281
return null;
283282
}

core/ts.core/src/ts/nodejs/NodejsProcessHelper.java

+10
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.io.IOException;
1616
import java.io.InputStreamReader;
1717
import java.util.ArrayList;
18+
import java.util.Arrays;
1819
import java.util.List;
1920

2021
import ts.OS;
@@ -74,6 +75,15 @@ public static String[] getDefaultNodejsPaths(OS os) {
7475
}
7576
}
7677

78+
public static String[] getNodejsPaths(OS os) {
79+
List<String> paths = new ArrayList<>(Arrays.asList(getDefaultNodejsPaths(os)));
80+
File nodeFile = findNode(os);
81+
if (nodeFile != null) {
82+
paths.add(0, nodeFile.getAbsolutePath());
83+
}
84+
return paths.toArray(StringUtils.EMPTY_STRING);
85+
}
86+
7787
public static File findNode(OS os) {
7888
String nodeFileName = getNodeFileName(os);
7989
String path = System.getenv("PATH");

core/ts.core/src/ts/repository/ITypeScriptRepository.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,14 @@ public interface ITypeScriptRepository {
3333
*
3434
* @param baseDir
3535
*/
36-
void setBaseDir(File baseDir);;
36+
void setBaseDir(File baseDir);
37+
38+
/**
39+
* The TypeScript base directory.
40+
*
41+
* @return the TypeScript base directory.
42+
*/
43+
File getTypesScriptDir();
3744

3845
/**
3946
* Returns the TypeScript version and null otherwise.
@@ -49,13 +56,6 @@ public interface ITypeScriptRepository {
4956
*/
5057
File getTscFile();
5158

52-
/**
53-
* Returns the tsserver file.
54-
*
55-
* @return the tsserver file.
56-
*/
57-
File getTsserverFile();
58-
5959
/**
6060
* Returns the tslint version and null otherwise.
6161
*

core/ts.core/src/ts/repository/TypeScriptRepositoryManager.java

+9
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.eclipsesource.json.JsonObject;
2121

2222
import ts.internal.repository.TypeScriptRepository;
23+
import ts.utils.FileUtils;
2324
import ts.utils.IOUtils;
2425

2526
public class TypeScriptRepositoryManager implements ITypeScriptRepositoryManager {
@@ -99,6 +100,14 @@ public static String getPackageJsonVersion(File baseDir) {
99100
return null;
100101
}
101102
}
103+
104+
public static void validateTypeScriptDir(File typesScriptDir) throws TypeScriptRepositoryException {
105+
File tsserverFile = TypeScriptRepositoryManager.getTsserverFile(typesScriptDir);
106+
if (!tsserverFile.exists()) {
107+
throw new TypeScriptRepositoryException(FileUtils.getPath(typesScriptDir)
108+
+ " is not a valid TypeScript repository. Check the directory contains bin/tsserver.");
109+
}
110+
}
102111

103112
public static File getTsserverPluginsFile(File typesScriptDir) {
104113
if (typesScriptDir.getName().equals("tsserver-plugins")) {

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

+14-2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import ts.client.occurrences.OccurrencesResponseItem;
3232
import ts.client.quickinfo.QuickInfo;
3333
import ts.client.references.ReferencesResponseBody;
34+
import ts.client.rename.RenameResponseBody;
3435
import ts.internal.LocationReader;
3536

3637
/**
@@ -138,12 +139,12 @@ public CompletableFuture<QuickInfo> quickInfo(int position) throws TypeScriptExc
138139
int offset = location.getOffset();
139140
return client.quickInfo(this.getName(), line, offset);
140141
}
141-
142+
142143
@Override
143144
public CompletableFuture<List<DiagnosticEvent>> geterr() throws TypeScriptException {
144145
this.synch();
145146
ITypeScriptServiceClient client = tsProject.getClient();
146-
return client.geterr(new String[] {getName()}, 0);
147+
return client.geterr(new String[] { getName() }, 0);
147148
}
148149

149150
@Override
@@ -228,6 +229,17 @@ public CompletableFuture<List<OccurrencesResponseItem>> occurrences(int position
228229
return client.occurrences(this.getName(), line, offset);
229230
}
230231

232+
@Override
233+
public CompletableFuture<RenameResponseBody> rename(int position, Boolean findInComments,
234+
Boolean findInStrings) throws TypeScriptException {
235+
this.synch();
236+
ITypeScriptServiceClient client = tsProject.getClient();
237+
Location location = this.getLocation(position);
238+
int line = location.getLine();
239+
int offset = location.getOffset();
240+
return client.rename(this.getName(), line, offset, findInComments, findInStrings);
241+
}
242+
231243
@Override
232244
public CompletableFuture<List<FileSpan>> implementation(int position) throws TypeScriptException {
233245
this.synch();

core/ts.core/src/ts/resources/BasicTypeScriptProjectSettings.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ public File getTscFile() {
7070
}
7171

7272
@Override
73-
public File getTsserverFile() {
74-
return repository.getTsserverFile();
73+
public File getTypesScriptDir() {
74+
return repository.getTypesScriptDir();
7575
}
7676

7777
@Override

core/ts.core/src/ts/resources/ITypeScriptProjectSettings.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public interface ITypeScriptProjectSettings {
6464
* @return the typescript/bin/tsserver file to execute.
6565
* @throws TypeScriptException
6666
*/
67-
File getTsserverFile() throws TypeScriptException;
67+
File getTypesScriptDir() throws TypeScriptException;
6868

6969
File getTsserverPluginsFile() throws TypeScriptException;
7070

core/ts.core/src/ts/resources/TypeScriptProject.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,8 @@ public void dispose() throws TypeScriptException {
170170
*/
171171
protected ITypeScriptServiceClient createServiceClient(File projectDir) throws TypeScriptException {
172172
File nodeFile = getProjectSettings().getNodejsInstallPath();
173-
File tsserverFile = getProjectSettings().getTsserverFile();
174-
TypeScriptServiceClient client = new TypeScriptServiceClient(getProjectDir(), tsserverFile, nodeFile,
173+
File typescriptDir = getProjectSettings().getTypesScriptDir();
174+
TypeScriptServiceClient client = new TypeScriptServiceClient(getProjectDir(), typescriptDir, nodeFile,
175175
getProjectSettings().isEnableTelemetry(), getProjectSettings().isDisableAutomaticTypingAcquisition(), getProjectSettings().getTsserverPluginsFile());
176176
client.setCompletionEntryMatcherProvider(this);
177177
return client;

eclipse/ts.eclipse.ide.core/src/ts/eclipse/ide/core/nodejs/IDENodejsProcessHelper.java

+4
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ public static String getNodejsPath() {
4242
public static String[] getDefaultNodejsPaths() {
4343
return NodejsProcessHelper.getDefaultNodejsPaths(os);
4444
}
45+
46+
public static String[] getAvailableNodejsPaths() {
47+
return NodejsProcessHelper.getNodejsPaths(os);
48+
}
4549

4650
public static OS getOs() {
4751
return os;

eclipse/ts.eclipse.ide.core/src/ts/eclipse/ide/core/resources/AbstractTypeScriptSettings.java

+2-12
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,11 @@
1414

1515
import org.eclipse.core.resources.IProject;
1616
import org.eclipse.core.resources.ProjectScope;
17-
import org.eclipse.core.runtime.IPath;
1817
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
1918
import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
2019

21-
import ts.eclipse.ide.core.TypeScriptCorePlugin;
2220
import ts.eclipse.ide.core.utils.PreferencesHelper;
23-
import ts.utils.StringUtils;
21+
import ts.eclipse.ide.core.utils.WorkbenchResourceUtil;
2422

2523
/**
2624
* Abstract class for TypeScript settings which search preferences from the
@@ -81,14 +79,6 @@ public IProject getProject() {
8179
}
8280

8381
protected File resolvePath(String path) {
84-
return resolvePath(path, getProject());
85-
}
86-
87-
protected static File resolvePath(String path, IProject project) {
88-
if (!StringUtils.isEmpty(path)) {
89-
IPath p = TypeScriptCorePlugin.getTypeScriptRepositoryManager().getPath(path, project);
90-
return p != null ? p.toFile() : new File(path);
91-
}
92-
return null;
82+
return WorkbenchResourceUtil.resolvePath(path, getProject());
9383
}
9484
}

eclipse/ts.eclipse.ide.core/src/ts/eclipse/ide/core/utils/WorkbenchResourceUtil.java

+9
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,15 @@
1414

1515
import org.eclipse.core.resources.IContainer;
1616
import org.eclipse.core.resources.IFile;
17+
import org.eclipse.core.resources.IProject;
1718
import org.eclipse.core.resources.IResource;
1819
import org.eclipse.core.resources.IWorkspaceRoot;
1920
import org.eclipse.core.resources.ResourcesPlugin;
2021
import org.eclipse.core.runtime.CoreException;
2122
import org.eclipse.core.runtime.IPath;
2223
import org.eclipse.core.runtime.Path;
2324

25+
import ts.eclipse.ide.core.TypeScriptCorePlugin;
2426
import ts.utils.FileUtils;
2527
import ts.utils.StringUtils;
2628

@@ -121,4 +123,11 @@ public static IPath getRelativePath(IResource resource, IContainer parent) {
121123
return resource.getLocation().makeRelativeTo(parent.getLocation());
122124
}
123125

126+
public static File resolvePath(String path, IProject project) {
127+
if (!StringUtils.isEmpty(path)) {
128+
IPath p = TypeScriptCorePlugin.getTypeScriptRepositoryManager().getPath(path, project);
129+
return p != null ? p.toFile() : new File(path);
130+
}
131+
return null;
132+
}
124133
}

eclipse/ts.eclipse.ide.core/src/ts/eclipse/ide/internal/core/preferences/TypeScriptCorePreferenceInitializer.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,10 @@ private void initializeNodejsPreferences(IEclipsePreferences node) {
8787
if (!useBundledNodeJsEmbedded(node)) {
8888
// Use installed node.js in case there is no embedded install.
8989
node.putBoolean(TypeScriptCorePreferenceConstants.USE_NODEJS_EMBEDDED, false);
90-
node.put(TypeScriptCorePreferenceConstants.NODEJS_PATH, IDENodejsProcessHelper.getNodejsPath());
9190
} else {
9291
node.putBoolean(TypeScriptCorePreferenceConstants.USE_NODEJS_EMBEDDED, true);
93-
node.put(TypeScriptCorePreferenceConstants.NODEJS_PATH, "");
9492
}
93+
node.put(TypeScriptCorePreferenceConstants.NODEJS_PATH, IDENodejsProcessHelper.getNodejsPath());
9594
}
9695

9796
private static boolean useBundledNodeJsEmbedded(IEclipsePreferences node) {

eclipse/ts.eclipse.ide.core/src/ts/eclipse/ide/internal/core/resources/IDETypeScriptProjectSettings.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import ts.eclipse.ide.core.resources.IIDETypeScriptProjectSettings;
2929
import ts.eclipse.ide.core.resources.buildpath.ITypeScriptBuildPath;
3030
import ts.eclipse.ide.core.utils.PreferencesHelper;
31+
import ts.eclipse.ide.core.utils.WorkbenchResourceUtil;
3132
import ts.eclipse.ide.internal.core.preferences.TypeScriptCorePreferenceInitializer;
3233
import ts.eclipse.ide.internal.core.repository.IDETypeScriptRepositoryManager;
3334
import ts.eclipse.ide.internal.core.resources.buildpath.TypeScriptBuildPath;
@@ -119,7 +120,7 @@ public static File getWorkspaceNodejsInstallPath() {
119120
// Use Installed node.js
120121
String path = PreferencesHelper.getStringPreferencesValue(TypeScriptCorePreferenceConstants.NODEJS_PATH, null,
121122
workspacePreferences);
122-
return resolvePath(path, null);
123+
return WorkbenchResourceUtil.resolvePath(path, null);
123124
}
124125

125126
@Override
@@ -166,18 +167,17 @@ public String getTypeScriptVersion() {
166167
}
167168

168169
@Override
169-
public File getTsserverFile() {
170+
public File getTypesScriptDir() {
170171
if (super.getBooleanPreferencesValue(TypeScriptCorePreferenceConstants.USE_EMBEDDED_TYPESCRIPT, false)) {
171172
// Use TypeScript Repository.
172173
ITypeScriptRepository repository = getRepository(TypeScriptCorePreferenceConstants.EMBEDDED_TYPESCRIPT_ID);
173-
return (repository != null) ? repository.getTsserverFile() : null;
174+
return (repository != null) ? repository.getTypesScriptDir() : null;
174175
}
175176

176177
// Use Installed TypScript
177178
String path = super.getStringPreferencesValue(TypeScriptCorePreferenceConstants.INSTALLED_TYPESCRIPT_PATH,
178179
null);
179-
File resolvedPath = resolvePath(path);
180-
return resolvedPath != null ? IDETypeScriptRepositoryManager.getTsserverFile(resolvedPath) : null;
180+
return resolvePath(path);
181181
}
182182

183183
@Override

eclipse/ts.eclipse.ide.ui/src/ts/eclipse/ide/internal/ui/TypeScriptUIMessages.java

+18-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ public class TypeScriptUIMessages extends NLS {
3232
public static String Button_newFolder;
3333
public static String Variables_button;
3434

35+
// ComboBox
36+
public static String ComboBox_none;
37+
3538
// Errors
3639
public static String TypeScriptUIPlugin_internal_error;
3740

@@ -64,21 +67,35 @@ public class TypeScriptUIMessages extends NLS {
6467
public static String ATAConfigurationBlock_description;
6568
public static String ATAConfigurationBlock_disableATA_checkbox_label;
6669
public static String ATAConfigurationBlock_enableTelemetry_checkbox_label;
67-
70+
6871
// nodejs
6972
public static String NodejsConfigurationBlock_nodejs_group_label;
7073
public static String NodejsConfigurationBlock_embedded_checkbox_label;
7174
public static String NodejsConfigurationBlock_installed_checkbox_label;
7275
public static String NodejsConfigurationBlock_nodePath_label;
76+
public static String NodejsConfigurationBlock_nodeVersion_label;
77+
78+
public static String NodejsConfigurationBlock_embeddedNode_required_error;
79+
public static String NodejsConfigurationBlock_installedNode_required_error;
80+
public static String NodejsConfigurationBlock_nodeFile_exists_error;
81+
public static String NodejsConfigurationBlock_nodeFile_invalid_error;
7382

7483
// TypeScript Runtime
7584
public static String TypeScriptRuntimeConfigurationBlock_typescript_group_label;
7685
public static String TypeScriptRuntimeConfigurationBlock_embedded_checkbox_label;
7786
public static String TypeScriptRuntimeConfigurationBlock_installed_checkbox_label;
87+
public static String TypeScriptRuntimeConfigurationBlock_tsRuntimePath_label;
88+
public static String TypeScriptRuntimeConfigurationBlock_tsRuntimeVersion_label;
89+
90+
public static String TypeScriptRuntimeConfigurationBlock_embeddedTypeScript_required_error;
91+
public static String TypeScriptRuntimeConfigurationBlock_installedTypeScript_required_error;
92+
public static String TypeScriptRuntimeConfigurationBlock_typeScriptFile_exists_error;
93+
public static String TypeScriptRuntimeConfigurationBlock_typeScriptFile_invalid_error;
7894

7995
// tsserver
8096
public static String TypeScriptRuntimeConfigurationBlock_traceOnConsole_label;
8197
public static String TypeScriptRuntimeConfigurationBlock_emulatePlugins_label;
98+
8299
// Formatter
83100
public static String FormatterConfigurationBlock_editorOptions_group_label;
84101
public static String FormatterPreferencePage_editorOptions_tabSize;

0 commit comments

Comments
 (0)