@@ -309,36 +309,26 @@ impl Display for ToolchainName {
309
309
}
310
310
311
311
pub ( crate ) fn toolchain_sort ( v : & mut [ ToolchainName ] ) {
312
- use semver:: { BuildMetadata , Prerelease , Version } ;
312
+ use semver:: Version ;
313
313
314
314
v. sort_by_key ( |name| {
315
- let s: & str = & format ! ( "{name}" ) ;
316
- let default_ver = Version {
317
- major : 0 ,
318
- minor : 0 ,
319
- patch : 0 ,
320
- pre : Prerelease :: EMPTY ,
321
- build : BuildMetadata :: EMPTY ,
322
- } ;
323
-
315
+ let s = name. to_string ( ) ;
324
316
if s. starts_with ( "stable" ) {
325
- let pre = Prerelease :: new ( & format ! ( "pre.{}.{}" , 0 , s. replace( '_' , "-" ) ) ) . unwrap ( ) ;
326
- return Version { pre, ..default_ver } ;
317
+ return ( 0 , None , s) ;
327
318
}
328
319
if s. starts_with ( "beta" ) {
329
- let pre = Prerelease :: new ( & format ! ( "pre.{}.{}" , 1 , s. replace( '_' , "-" ) ) ) . unwrap ( ) ;
330
- return Version { pre, ..default_ver } ;
320
+ return ( 1 , None , s) ;
331
321
}
332
322
if s. starts_with ( "nightly" ) {
333
- let pre = Prerelease :: new ( & format ! ( "pre.{}.{}" , 2 , s. replace( '_' , "-" ) ) ) . unwrap ( ) ;
334
- return Version { pre, ..default_ver } ;
323
+ return ( 2 , None , s) ;
335
324
}
336
- if let Ok ( v) = Version :: parse ( & s. replace ( '_' , "-" ) ) {
337
- return v;
325
+ if let Some ( ( ver_str, suffix) ) = s. split_once ( '-' ) {
326
+ if let Ok ( ver) = Version :: parse ( ver_str) {
327
+ return ( 3 , Some ( ver) , suffix. to_owned ( ) ) ;
328
+ }
338
329
}
339
- let pre = Prerelease :: new ( & format ! ( "pre.{}.{}" , 3 , s. replace( '_' , "-" ) ) ) . unwrap ( ) ;
340
- Version { pre, ..default_ver }
341
- } ) ;
330
+ ( 4 , None , s)
331
+ } )
342
332
}
343
333
344
334
/// ResolvableLocalToolchainName is used to process values set in
0 commit comments