@@ -173,6 +173,22 @@ async function installRlsComponents(toolchain) {
173
173
}
174
174
}
175
175
176
+ /**
177
+ * Adds a listener on stdout to warn of non-LSP looking lines (potentially from wayward
178
+ * server-side printing). Non-LSP stdout usage will break vscode-jsonrpc.
179
+ * @param {ChildProcess } process Rls
180
+ * @return {ChildProcess }
181
+ */
182
+ function logSuspiciousStdout ( process ) {
183
+ process . stdout . on ( 'data' , chunk => {
184
+ chunk . toString ( 'utf8' )
185
+ . split ( '\n' )
186
+ . filter ( l => l . trim ( ) && ! l . startsWith ( "Content-Length:" ) && ! l . includes ( '"jsonrpc":"2.0"' ) )
187
+ . forEach ( line => console . error ( "Rust (RLS) suspicious stdout:" , line ) )
188
+ } )
189
+ return process
190
+ }
191
+
176
192
// ongoing promise
177
193
let _checkingRls
178
194
@@ -555,21 +571,21 @@ class RustLanguageClient extends AutoLanguageClient {
555
571
atom . notifications . addInfo ( `Using rls command \`${ cmdOverride } \`` )
556
572
this . _warnedAboutRlsCommandOverride = true
557
573
}
558
- return cp . spawn ( cmdOverride , {
574
+ return logSuspiciousStdout ( cp . spawn ( cmdOverride , {
559
575
env : await serverEnv ( configToolchain ( ) ) ,
560
576
shell : true ,
561
577
cwd : projectPath
562
- } )
578
+ } ) )
563
579
}
564
580
565
581
try {
566
582
await this . _checkToolchain ( )
567
583
await checkRls ( this . busySignalService )
568
584
let toolchain = configToolchain ( )
569
- return cp . spawn ( "rustup" , [ "run" , toolchain , "rls" ] , {
585
+ return logSuspiciousStdout ( cp . spawn ( "rustup" , [ "run" , toolchain , "rls" ] , {
570
586
env : await serverEnv ( toolchain ) ,
571
587
cwd : projectPath
572
- } )
588
+ } ) )
573
589
}
574
590
catch ( e ) {
575
591
throw new Error ( "failed to start server: " + e )
0 commit comments