@@ -311,27 +311,33 @@ impl Display for ToolchainName {
311
311
pub ( crate ) fn toolchain_sort ( v : & mut [ ToolchainName ] ) {
312
312
use semver:: { BuildMetadata , Prerelease , Version } ;
313
313
314
- fn special_version ( ord : u64 , s : & str ) -> Version {
315
- Version {
314
+ v. sort_by_key ( |name| {
315
+ let s: & str = & format ! ( "{name}" ) ;
316
+ let default_ver = Version {
316
317
major : 0 ,
317
318
minor : 0 ,
318
319
patch : 0 ,
319
- pre : Prerelease :: new ( & format ! ( "pre.{}.{}" , ord , s . replace ( '_' , "-" ) ) ) . unwrap ( ) ,
320
+ pre : Prerelease :: EMPTY ,
320
321
build : BuildMetadata :: EMPTY ,
321
- }
322
- }
322
+ } ;
323
323
324
- v. sort_by_key ( |name| {
325
- let s: & str = & format ! ( "{name}" ) ;
326
324
if s. starts_with ( "stable" ) {
327
- special_version ( 0 , s)
328
- } else if s. starts_with ( "beta" ) {
329
- special_version ( 1 , s)
330
- } else if s. starts_with ( "nightly" ) {
331
- special_version ( 2 , s)
332
- } else {
333
- Version :: parse ( & s. replace ( '_' , "-" ) ) . unwrap_or_else ( |_| special_version ( 3 , s) )
325
+ let pre = Prerelease :: new ( & format ! ( "pre.{}.{}" , 0 , s. replace( '_' , "-" ) ) ) . unwrap ( ) ;
326
+ return Version { pre, ..default_ver } ;
327
+ }
328
+ if s. starts_with ( "beta" ) {
329
+ let pre = Prerelease :: new ( & format ! ( "pre.{}.{}" , 1 , s. replace( '_' , "-" ) ) ) . unwrap ( ) ;
330
+ return Version { pre, ..default_ver } ;
331
+ }
332
+ if s. starts_with ( "nightly" ) {
333
+ let pre = Prerelease :: new ( & format ! ( "pre.{}.{}" , 2 , s. replace( '_' , "-" ) ) ) . unwrap ( ) ;
334
+ return Version { pre, ..default_ver } ;
335
+ }
336
+ if let Ok ( v) = Version :: parse ( & s. replace ( '_' , "-" ) ) {
337
+ return v;
334
338
}
339
+ let pre = Prerelease :: new ( & format ! ( "pre.{}.{}" , 3 , s. replace( '_' , "-" ) ) ) . unwrap ( ) ;
340
+ Version { pre, ..default_ver }
335
341
} ) ;
336
342
}
337
343
0 commit comments