@@ -10,7 +10,7 @@ import { promisify } from 'util';
1010import URI from '@theia/core/lib/common/uri' ;
1111import { FileUri } from '@theia/core/lib/node' ;
1212import { isWindows , isOSX } from '@theia/core/lib/common/os' ;
13- import { ConfigService } from '../common/protocol/ config-service' ;
13+ import { ConfigServiceImpl } from './ config-service-impl ' ;
1414import {
1515 SketchesService ,
1616 Sketch ,
@@ -50,8 +50,8 @@ export class SketchesServiceImpl
5050 ? tempDir
5151 : maybeNormalizeDrive ( fs . realpathSync . native ( tempDir ) ) ;
5252
53- @inject ( ConfigService )
54- protected readonly configService : ConfigService ;
53+ @inject ( ConfigServiceImpl )
54+ protected readonly configService : ConfigServiceImpl ;
5555
5656 @inject ( NotificationServiceServerImpl )
5757 protected readonly notificationService : NotificationServiceServerImpl ;
@@ -205,7 +205,14 @@ export class SketchesServiceImpl
205205 if ( err ) {
206206 reject (
207207 isNotFoundError ( err )
208- ? SketchesError . NotFound ( err . details , uri )
208+ ? SketchesError . NotFound (
209+ fixErrorMessage (
210+ err ,
211+ requestSketchPath ,
212+ this . configService . cliConfiguration ?. directories . user
213+ ) ,
214+ uri
215+ )
209216 : err
210217 ) ;
211218 return ;
@@ -583,6 +590,36 @@ interface SketchWithDetails extends Sketch {
583590 readonly mtimeMs : number ;
584591}
585592
593+ // https://github.com/arduino/arduino-cli/issues/1797
594+ function fixErrorMessage (
595+ err : ServiceError ,
596+ sketchPath : string ,
597+ sketchbookPath : string | undefined
598+ ) : string {
599+ if ( ! sketchbookPath ) {
600+ return err . details ; // No way to repair the error message. The current sketchbook path is not available.
601+ }
602+ // Original: `Can't open sketch: no valid sketch found in /Users/a.kitta/Documents/Arduino: missing /Users/a.kitta/Documents/Arduino/Arduino.ino`
603+ // Fixed: `Can't open sketch: no valid sketch found in /Users/a.kitta/Documents/Arduino: missing $sketchPath`
604+ const message = err . details ;
605+ const incorrectMessageSuffix = path . join ( sketchbookPath , 'Arduino.ino' ) ;
606+ if (
607+ message . startsWith ( "Can't open sketch: no valid sketch found in" ) &&
608+ message . endsWith ( `${ incorrectMessageSuffix } ` )
609+ ) {
610+ const sketchName = path . basename ( sketchPath ) ;
611+ const correctMessagePrefix = message . substring (
612+ 0 ,
613+ message . length - incorrectMessageSuffix . length
614+ ) ;
615+ return `${ correctMessagePrefix } ${ path . join (
616+ sketchPath ,
617+ `${ sketchName } .ino`
618+ ) } `;
619+ }
620+ return err . details ;
621+ }
622+ 586623function isNotFoundError ( err : unknown ) : err is ServiceError {
587624 return ServiceError . is ( err ) && err . code === 5 ; // `NOT_FOUND` https://grpc.github.io/grpc/core/md_doc_statuscodes.html
588625}
0 commit comments