10
10
*******************************************************************************/
11
11
package org .eclipse .languageserver .languages ;
12
12
13
+ import java .io .BufferedReader ;
14
+ import java .io .File ;
15
+ import java .io .IOException ;
16
+ import java .io .InputStreamReader ;
13
17
import java .util .HashMap ;
14
18
import java .util .Map ;
15
19
20
+ import org .apache .commons .io .IOUtils ;
16
21
import org .eclipse .core .externaltools .internal .IExternalToolConstants ;
17
22
import org .eclipse .core .runtime .CoreException ;
18
23
import org .eclipse .core .runtime .Platform ;
@@ -61,7 +66,7 @@ public void earlyStartup() {
61
66
workingCopy .setAttribute (IExternalToolConstants .ATTR_SHOW_CONSOLE , false );
62
67
workingCopy .setAttribute (IExternalToolConstants .ATTR_BUILD_SCOPE , "${none}" );
63
68
workingCopy .setAttribute (DebugPlugin .ATTR_CAPTURE_OUTPUT , true );
64
- workingCopy .setAttribute (IExternalToolConstants .ATTR_LOCATION , "/usr/bin/node" );
69
+ workingCopy .setAttribute (IExternalToolConstants .ATTR_LOCATION , getNodeJsLocation () );
65
70
workingCopy .setAttribute (IExternalToolConstants .ATTR_TOOL_ARGUMENTS , "/home/mistria/git/omnisharp-node-client/languageserver/server.js" );
66
71
workingCopy .setAttribute (ILaunchManager .ATTR_APPEND_ENVIRONMENT_VARIABLES , true );
67
72
Map <String , String > environment = new HashMap <>(1 );
@@ -90,10 +95,10 @@ public void earlyStartup() {
90
95
workingCopy .setAttribute (IExternalToolConstants .ATTR_SHOW_CONSOLE , false );
91
96
workingCopy .setAttribute (IExternalToolConstants .ATTR_BUILD_SCOPE , "${none}" );
92
97
workingCopy .setAttribute (DebugPlugin .ATTR_CAPTURE_OUTPUT , true );
93
- workingCopy .setAttribute (IExternalToolConstants .ATTR_LOCATION , "/usr/bin/node" );
98
+ workingCopy .setAttribute (IExternalToolConstants .ATTR_LOCATION , getNodeJsLocation () );
94
99
// Assume node is already installed on machine and uses it
95
100
// TODO: implement smarter and multi-platform discovery
96
- workingCopy .setAttribute (IExternalToolConstants .ATTR_TOOL_ARGUMENTS , "/usr/share/code /resources/app/extensions/css/server/out/cssServerMain.js --stdio" );
101
+ workingCopy .setAttribute (IExternalToolConstants .ATTR_TOOL_ARGUMENTS , getVSCodeLocation () + " /resources/app/extensions/css/server/out/cssServerMain.js --stdio" );
97
102
omniSharpLauch = workingCopy .doSave ();
98
103
registry .registerAssociation (contentTypeManager .getContentType ("org.eclipse.wst.css.core.csssource" ), LaunchConfigurationStreamProvider .findLaunchConfiguration (IExternalToolConstants .ID_PROGRAM_LAUNCH_CONFIGURATION_TYPE , InitializeLaunchConfigurations .VSCODE_CSS_NAME ));
99
104
}
@@ -117,10 +122,10 @@ public void earlyStartup() {
117
122
workingCopy .setAttribute (IExternalToolConstants .ATTR_SHOW_CONSOLE , false );
118
123
workingCopy .setAttribute (IExternalToolConstants .ATTR_BUILD_SCOPE , "${none}" );
119
124
workingCopy .setAttribute (DebugPlugin .ATTR_CAPTURE_OUTPUT , true );
120
- workingCopy .setAttribute (IExternalToolConstants .ATTR_LOCATION , "/usr/bin/node" );
125
+ workingCopy .setAttribute (IExternalToolConstants .ATTR_LOCATION , getNodeJsLocation () );
121
126
// Assume node is already installed on machine and uses it
122
127
// TODO: implement smarter and multi-platform discovery
123
- workingCopy .setAttribute (IExternalToolConstants .ATTR_TOOL_ARGUMENTS , "/usr/share/code /resources/app/extensions/json/server/out/jsonServerMain.js --stdio" );
128
+ workingCopy .setAttribute (IExternalToolConstants .ATTR_TOOL_ARGUMENTS , getVSCodeLocation () + " /resources/app/extensions/json/server/out/jsonServerMain.js --stdio" );
124
129
omniSharpLauch = workingCopy .doSave ();
125
130
registry .registerAssociation (contentTypeManager .getContentType ("org.eclipse.wst.jsdt.core.jsonSource" ), LaunchConfigurationStreamProvider .findLaunchConfiguration (IExternalToolConstants .ID_PROGRAM_LAUNCH_CONFIGURATION_TYPE , InitializeLaunchConfigurations .VSCODE_JSON_NAME ));
126
131
}
@@ -129,4 +134,38 @@ public void earlyStartup() {
129
134
}
130
135
}
131
136
137
+ private String getVSCodeLocation () {
138
+ String res = null ;
139
+ if (Platform .getOS ().equals (Platform .OS_LINUX )) {
140
+ res = "/usr/share/code" ;
141
+ } else if (Platform .getOS ().equals (Platform .OS_WIN32 )) {
142
+ res = "C:/Program Files (x86)/Microsoft VS Code" ;
143
+ } else if (Platform .getOS ().equals (Platform .OS_MACOSX )) {
144
+ res = "/usr/share/code" ;
145
+ }
146
+ if (new File (res ).isDirectory ()) {
147
+ return res ;
148
+ }
149
+ return "/unknown/path/to/VSCode" ;
150
+ }
151
+
152
+ private String getNodeJsLocation () {
153
+ String res = "/path/to/node" ;
154
+ String [] command = new String [] {"/bin/bash" , "-c" , "which node" };
155
+ if (Platform .getOS ().equals (Platform .OS_WIN32 )) {
156
+ command = new String [] {"cmd" , "/c" , "where node" };
157
+ }
158
+ BufferedReader reader = null ;
159
+ try {
160
+ Process p = Runtime .getRuntime ().exec (command );
161
+ reader = new BufferedReader (new InputStreamReader (p .getInputStream ()));
162
+ res = reader .readLine ();
163
+ } catch (IOException e ) {
164
+ e .printStackTrace ();
165
+ } finally {
166
+ IOUtils .closeQuietly (reader );
167
+ }
168
+ return res ;
169
+ }
170
+
132
171
}
0 commit comments