@@ -61,7 +61,7 @@ class DafnyToolInstaller {
61
61
62
62
private async getDotnetToolVersion ( ) : Promise < string > {
63
63
if ( this . toolVersionCache === undefined ) {
64
- this . toolVersionCache = await DafnyToolInstaller . getDotnetToolVersionUncached ( this . context ) ;
64
+ this . toolVersionCache = await this . getDotnetToolVersionUncached ( this . context ) ;
65
65
}
66
66
return this . toolVersionCache ;
67
67
}
@@ -81,42 +81,49 @@ class DafnyToolInstaller {
81
81
3.7.1.40621 Downloads: 754
82
82
3.7.2.40713 Downloads: 324
83
83
*/
84
- private static async getDotnetToolVersionUncached ( context : ExtensionContext ) : Promise < string > {
84
+ private async getDotnetToolVersionUncached ( context : ExtensionContext ) : Promise < string > {
85
85
const { path : dotnetExecutable } = await getDotnetExecutablePath ( ) ;
86
- const { stdout } = await execFileAsync ( dotnetExecutable , [ 'tool' , 'search' , 'Dafny' , '--detail' , '--prerelease' ] ) ;
87
- const entries = stdout . split ( '----------------' ) . map ( entry => entry . split ( '\n' ) . filter ( e => e !== '' ) ) ;
88
- const dafnyEntry = entries . filter ( entry => entry [ 0 ] === 'dafny' ) [ 0 ] ;
89
- const versionsIndex = dafnyEntry . findIndex ( v => v . startsWith ( 'Versions:' ) ) ;
90
- const versions = dafnyEntry . slice ( versionsIndex + 1 ) . map ( versionLine => versionLine . trimStart ( ) . split ( ' ' ) [ 0 ] ) ;
86
+ try {
87
+ const { stdout } = await execFileAsync ( dotnetExecutable , [ 'tool' , 'search' , 'Dafny' , '--detail' , '--prerelease' ] ) ;
88
+ const entries = stdout . split ( '----------------' ) . map ( entry => entry . split ( '\n' ) . filter ( e => e !== '' ) ) ;
89
+ const dafnyEntry = entries . filter ( entry => entry [ 0 ] === 'dafny' ) [ 0 ] ;
90
+ const versionsIndex = dafnyEntry . findIndex ( v => v . startsWith ( 'Versions:' ) ) ;
91
+ const versions = dafnyEntry . slice ( versionsIndex + 1 ) . map ( versionLine => versionLine . trimStart ( ) . split ( ' ' ) [ 0 ] ) ;
91
92
92
- const versionDescription = getPreferredVersion ( ) ;
93
- let toolVersion : string ;
93
+ const versionDescription = getPreferredVersion ( ) ;
94
+ let toolVersion : string ;
94
95
95
- switch ( versionDescription ) {
96
- case LanguageServerConstants . LatestStable : {
97
- const version = LanguageServerConstants . LatestVersion ;
98
- toolVersion = await DafnyInstaller . dafny4upgradeCheck (
99
- context , versionDescription , versions . filter ( l => l . startsWith ( version ) ) [ 0 ] ) ;
100
- window . showInformationMessage ( `Using latest stable version: ${ toolVersion } ` ) ;
101
- break ;
102
- }
103
- case LanguageServerConstants . LatestNightly : {
104
- const nightlies = versions . filter ( l => l . includes ( 'nightly' ) ) ;
105
- const dates : { index : number , date : string } [ ] = nightlies . map ( ( n , index ) => {
106
- const split : string [ ] = n . split ( '-' ) ;
107
- return { index, date : split [ 2 ] + split [ 3 ] + split [ 4 ] } ;
108
- } ) ;
109
- dates . sort ( ( a , b ) => a . date < b . date ? 1 : - 1 ) ;
110
- toolVersion = nightlies [ dates [ 0 ] . index ] ;
111
- window . showInformationMessage ( `Using latest nightly version: ${ toolVersion } ` ) ;
112
- break ;
113
- }
114
- default : {
115
- toolVersion = versions . filter ( l => l . startsWith ( versionDescription ) ) [ 0 ] ;
116
- context . globalState . update ( DafnyInstaller . CurrentVersionTag , versionDescription ) ;
117
- }
96
+ switch ( versionDescription ) {
97
+ case LanguageServerConstants . LatestStable : {
98
+ const version = LanguageServerConstants . LatestVersion ;
99
+ toolVersion = await DafnyInstaller . dafny4upgradeCheck (
100
+ context , versionDescription , versions . filter ( l => l . startsWith ( version ) ) [ 0 ] ) ;
101
+ window . showInformationMessage ( `Using latest stable version: ${ toolVersion } ` ) ;
102
+ break ;
103
+ }
104
+ case LanguageServerConstants . LatestNightly : {
105
+ const nightlies = versions . filter ( l => l . includes ( 'nightly' ) ) ;
106
+ const dates : { index : number , date : string } [ ] = nightlies . map ( ( n , index ) => {
107
+ const split : string [ ] = n . split ( '-' ) ;
108
+ return { index, date : split [ 2 ] + split [ 3 ] + split [ 4 ] } ;
109
+ } ) ;
110
+ dates . sort ( ( a , b ) => a . date < b . date ? 1 : - 1 ) ;
111
+ toolVersion = nightlies [ dates [ 0 ] . index ] ;
112
+ window . showInformationMessage ( `Using latest nightly version: ${ toolVersion } ` ) ;
113
+ break ;
114
+ }
115
+ default : {
116
+ toolVersion = versions . filter ( l => l . startsWith ( versionDescription ) ) [ 0 ] ;
117
+ context . globalState . update ( DafnyInstaller . CurrentVersionTag , versionDescription ) ;
118
+ }
119
+ }
120
+ return toolVersion ;
121
+ } catch ( e : unknown ) {
122
+ if ( e instanceof Error ) {
123
+ this . statusOutput . appendLine ( 'Failed to find current Dafny versions because:' + e . message ) ;
124
+ }
125
+ return LanguageServerConstants . LatestVersion ;
118
126
}
119
- return toolVersion ;
120
127
}
121
128
private writeStatus ( message : string ) : void {
122
129
this . statusOutput . appendLine ( message ) ;
0 commit comments