4
4
5
5
'use strict' ;
6
6
7
+ import os = require( 'os' ) ;
7
8
import path = require( 'path' ) ;
8
9
import vscode = require( 'vscode' ) ;
9
10
import settingsManager = require( './settings' ) ;
@@ -64,45 +65,57 @@ export function activate(context: vscode.ExtensionContext): void {
64
65
}
65
66
} ) ;
66
67
67
- let args = [ ] ;
68
- if ( settings . developer . editorServicesWaitForDebugger ) {
69
- args . push ( '/waitForDebugger' ) ;
70
- }
71
- if ( settings . developer . editorServicesLogLevel ) {
72
- args . push ( '/logLevel:' + settings . developer . editorServicesLogLevel )
73
- }
74
-
75
- let serverPath = resolveLanguageServerPath ( settings ) ;
76
- let serverOptions = {
77
- run : {
78
- command : serverPath ,
79
- args : args
80
- } ,
81
- debug : {
82
- command : serverPath ,
83
- args : [ '/waitForDebugger' ]
68
+ // The language server is only available on Windows
69
+ if ( os . platform ( ) == "win32" )
70
+ {
71
+ let args = [ ] ;
72
+ if ( settings . developer . editorServicesWaitForDebugger ) {
73
+ args . push ( '/waitForDebugger' ) ;
84
74
}
85
- } ;
86
-
87
- let clientOptions : LanguageClientOptions = {
88
- documentSelector : [ PowerShellLanguageId ] ,
89
- synchronize : {
90
- configurationSection : PowerShellLanguageId ,
91
- //fileEvents: vscode.workspace.createFileSystemWatcher('**/.eslintrc')
75
+ if ( settings . developer . editorServicesLogLevel ) {
76
+ args . push ( '/logLevel:' + settings . developer . editorServicesLogLevel )
92
77
}
93
- }
94
78
95
- languageServerClient =
96
- new LanguageClient (
97
- 'PowerShell Editor Services' ,
98
- serverOptions ,
99
- clientOptions ) ;
79
+ try
80
+ {
81
+ let serverPath = resolveLanguageServerPath ( settings ) ;
82
+ let serverOptions = {
83
+ run : {
84
+ command : serverPath ,
85
+ args : args
86
+ } ,
87
+ debug : {
88
+ command : serverPath ,
89
+ args : [ '/waitForDebugger' ]
90
+ }
91
+ } ;
92
+
93
+ let clientOptions : LanguageClientOptions = {
94
+ documentSelector : [ PowerShellLanguageId ] ,
95
+ synchronize : {
96
+ configurationSection : PowerShellLanguageId ,
97
+ //fileEvents: vscode.workspace.createFileSystemWatcher('**/.eslintrc')
98
+ }
99
+ }
100
+
101
+ languageServerClient =
102
+ new LanguageClient (
103
+ 'PowerShell Editor Services' ,
104
+ serverOptions ,
105
+ clientOptions ) ;
100
106
101
- languageServerClient . onReady ( ) . then (
102
- ( ) => registerFeatures ( ) ,
103
- ( reason ) => vscode . window . showErrorMessage ( "Could not start language service: " + reason ) ) ;
107
+ languageServerClient . onReady ( ) . then (
108
+ ( ) => registerFeatures ( ) ,
109
+ ( reason ) => vscode . window . showErrorMessage ( "Could not start language service: " + reason ) ) ;
104
110
105
- languageServerClient . start ( ) ;
111
+ languageServerClient . start ( ) ;
112
+ }
113
+ catch ( e )
114
+ {
115
+ vscode . window . showErrorMessage (
116
+ "The language service could not be started: " + e ) ;
117
+ }
118
+ }
106
119
}
107
120
108
121
function registerFeatures ( ) {
@@ -128,11 +141,17 @@ function resolveLanguageServerPath(settings: settingsManager.ISettings): string
128
141
if ( editorServicesHostPath ) {
129
142
console . log ( "Found Editor Services path from config: " + editorServicesHostPath ) ;
130
143
144
+ // Does the path end in a .exe? Alert the user if so.
145
+ if ( path . extname ( editorServicesHostPath ) != '' ) {
146
+ throw "The editorServicesHostPath setting must point to a directory, not a file." ;
147
+ }
148
+
131
149
// Make the path absolute if it's not
132
150
editorServicesHostPath =
133
151
path . resolve (
134
152
__dirname ,
135
- editorServicesHostPath ) ;
153
+ editorServicesHostPath ,
154
+ getHostExeName ( settings . useX86Host ) ) ;
136
155
137
156
console . log ( " Resolved path to: " + editorServicesHostPath ) ;
138
157
}
@@ -143,10 +162,17 @@ function resolveLanguageServerPath(settings: settingsManager.ISettings): string
143
162
__dirname ,
144
163
'..' ,
145
164
'bin' ,
146
- 'Microsoft.PowerShell.EditorServices.Host.exe' ) ;
165
+ getHostExeName ( settings . useX86Host ) ) ;
147
166
148
167
console . log ( "Using default Editor Services path: " + editorServicesHostPath ) ;
149
168
}
150
169
151
170
return editorServicesHostPath ;
152
171
}
172
+
173
+ function getHostExeName ( useX86Host : boolean ) : string {
174
+ // The useX86Host setting is only relevant on 64-bit OS
175
+ var is64BitOS = process . env . hasOwnProperty ( 'PROCESSOR_ARCHITEW6432' ) ;
176
+ var archText = useX86Host && is64BitOS ? ".x86" : "" ;
177
+ return "Microsoft.PowerShell.EditorServices.Host" + archText + ".exe" ;
178
+ }
0 commit comments