@@ -30,6 +30,8 @@ pub fn pkgname(builder: &Builder<'_>, component: &str) -> String {
30
30
format ! ( "{}-{}" , component, builder. cargo_package_vers( ) )
31
31
} else if component == "rls" {
32
32
format ! ( "{}-{}" , component, builder. rls_package_vers( ) )
33
+ } else if component == "rust-analyzer" {
34
+ format ! ( "{}-{}" , component, builder. rust_analyzer_package_vers( ) )
33
35
} else if component == "clippy" {
34
36
format ! ( "{}-{}" , component, builder. clippy_package_vers( ) )
35
37
} else if component == "miri" {
@@ -1107,7 +1109,10 @@ impl Step for PlainSourceTarball {
1107
1109
if builder. rust_info . is_git ( ) {
1108
1110
// Vendor all Cargo dependencies
1109
1111
let mut cmd = Command :: new ( & builder. initial_cargo ) ;
1110
- cmd. arg ( "vendor" ) . current_dir ( & plain_dst_src) ;
1112
+ cmd. arg ( "vendor" )
1113
+ . arg ( "--sync" )
1114
+ . arg ( builder. src . join ( "./src/tools/rust-analyzer/Cargo.toml" ) )
1115
+ . current_dir ( & plain_dst_src) ;
1111
1116
builder. run ( & mut cmd) ;
1112
1117
}
1113
1118
@@ -1337,6 +1342,93 @@ impl Step for Rls {
1337
1342
}
1338
1343
}
1339
1344
1345
+ #[ derive( Debug , PartialOrd , Ord , Copy , Clone , Hash , PartialEq , Eq ) ]
1346
+ pub struct RustAnalyzer {
1347
+ pub compiler : Compiler ,
1348
+ pub target : Interned < String > ,
1349
+ }
1350
+
1351
+ impl Step for RustAnalyzer {
1352
+ type Output = PathBuf ;
1353
+ const ONLY_HOSTS : bool = true ;
1354
+
1355
+ fn should_run ( run : ShouldRun < ' _ > ) -> ShouldRun < ' _ > {
1356
+ run. path ( "rust-analyzer" )
1357
+ }
1358
+
1359
+ fn make_run ( run : RunConfig < ' _ > ) {
1360
+ run. builder . ensure ( RustAnalyzer {
1361
+ compiler : run. builder . compiler_for (
1362
+ run. builder . top_stage ,
1363
+ run. builder . config . build ,
1364
+ run. target ,
1365
+ ) ,
1366
+ target : run. target ,
1367
+ } ) ;
1368
+ }
1369
+
1370
+ fn run ( self , builder : & Builder < ' _ > ) -> PathBuf {
1371
+ let compiler = self . compiler ;
1372
+ let target = self . target ;
1373
+ assert ! ( builder. config. extended) ;
1374
+
1375
+ let src = builder. src . join ( "src/tools/rust-analyzer" ) ;
1376
+ let release_num = builder. release_num ( "rust-analyzer/crates/rust-analyzer" ) ;
1377
+ let name = pkgname ( builder, "rust-analyzer" ) ;
1378
+ let version = builder. rust_analyzer_info . version ( builder, & release_num) ;
1379
+
1380
+ let tmp = tmpdir ( builder) ;
1381
+ let image = tmp. join ( "rust-analyzer-image" ) ;
1382
+ drop ( fs:: remove_dir_all ( & image) ) ;
1383
+ builder. create_dir ( & image) ;
1384
+
1385
+ // Prepare the image directory
1386
+ // We expect rust-analyer to always build, as it doesn't depend on rustc internals
1387
+ // and doesn't have associated toolstate.
1388
+ let rust_analyzer = builder
1389
+ . ensure ( tool:: RustAnalyzer { compiler, target, extra_features : Vec :: new ( ) } )
1390
+ . expect ( "rust-analyzer always builds" ) ;
1391
+
1392
+ builder. install ( & rust_analyzer, & image. join ( "bin" ) , 0o755 ) ;
1393
+ let doc = image. join ( "share/doc/rust-analyzer" ) ;
1394
+ builder. install ( & src. join ( "README.md" ) , & doc, 0o644 ) ;
1395
+ builder. install ( & src. join ( "LICENSE-APACHE" ) , & doc, 0o644 ) ;
1396
+ builder. install ( & src. join ( "LICENSE-MIT" ) , & doc, 0o644 ) ;
1397
+
1398
+ // Prepare the overlay
1399
+ let overlay = tmp. join ( "rust-analyzer-overlay" ) ;
1400
+ drop ( fs:: remove_dir_all ( & overlay) ) ;
1401
+ t ! ( fs:: create_dir_all( & overlay) ) ;
1402
+ builder. install ( & src. join ( "README.md" ) , & overlay, 0o644 ) ;
1403
+ builder. install ( & src. join ( "LICENSE-APACHE" ) , & doc, 0o644 ) ;
1404
+ builder. install ( & src. join ( "LICENSE-MIT" ) , & doc, 0o644 ) ;
1405
+ builder. create ( & overlay. join ( "version" ) , & version) ;
1406
+
1407
+ // Generate the installer tarball
1408
+ let mut cmd = rust_installer ( builder) ;
1409
+ cmd. arg ( "generate" )
1410
+ . arg ( "--product-name=Rust" )
1411
+ . arg ( "--rel-manifest-dir=rustlib" )
1412
+ . arg ( "--success-message=rust-analyzer-ready-to-serve." )
1413
+ . arg ( "--image-dir" )
1414
+ . arg ( & image)
1415
+ . arg ( "--work-dir" )
1416
+ . arg ( & tmpdir ( builder) )
1417
+ . arg ( "--output-dir" )
1418
+ . arg ( & distdir ( builder) )
1419
+ . arg ( "--non-installed-overlay" )
1420
+ . arg ( & overlay)
1421
+ . arg ( format ! ( "--package-name={}-{}" , name, target) )
1422
+ . arg ( "--legacy-manifest-dirs=rustlib,cargo" )
1423
+ . arg ( "--component-name=rust-analyzer-preview" ) ;
1424
+
1425
+ builder. info ( & format ! ( "Dist rust-analyzer stage{} ({})" , compiler. stage, target) ) ;
1426
+ let _time = timeit ( builder) ;
1427
+ builder. run ( & mut cmd) ;
1428
+ distdir ( builder) . join ( format ! ( "{}-{}.tar.gz" , name, target) )
1429
+ }
1430
+ }
1431
+
1340
1432
#[ derive( Debug , PartialOrd , Ord , Copy , Clone , Hash , PartialEq , Eq ) ]
1341
1433
pub struct Clippy {
1342
1434
pub compiler : Compiler ,
@@ -1656,6 +1748,7 @@ impl Step for Extended {
1656
1748
let cargo_installer = builder. ensure ( Cargo { compiler, target } ) ;
1657
1749
let rustfmt_installer = builder. ensure ( Rustfmt { compiler, target } ) ;
1658
1750
let rls_installer = builder. ensure ( Rls { compiler, target } ) ;
1751
+ let rust_analyzer_installer = builder. ensure ( RustAnalyzer { compiler, target } ) ;
1659
1752
let llvm_tools_installer = builder. ensure ( LlvmTools { target } ) ;
1660
1753
let clippy_installer = builder. ensure ( Clippy { compiler, target } ) ;
1661
1754
let miri_installer = builder. ensure ( Miri { compiler, target } ) ;
@@ -1690,6 +1783,7 @@ impl Step for Extended {
1690
1783
tarballs. push ( rustc_installer) ;
1691
1784
tarballs. push ( cargo_installer) ;
1692
1785
tarballs. extend ( rls_installer. clone ( ) ) ;
1786
+ tarballs. push ( rust_analyzer_installer. clone ( ) ) ;
1693
1787
tarballs. push ( clippy_installer) ;
1694
1788
tarballs. extend ( miri_installer. clone ( ) ) ;
1695
1789
tarballs. extend ( rustfmt_installer. clone ( ) ) ;
@@ -1767,6 +1861,7 @@ impl Step for Extended {
1767
1861
if rls_installer. is_none ( ) {
1768
1862
contents = filter ( & contents, "rls" ) ;
1769
1863
}
1864
+ contents = filter ( & contents, "rust-analyzer" ) ;
1770
1865
if miri_installer. is_none ( ) {
1771
1866
contents = filter ( & contents, "miri" ) ;
1772
1867
}
@@ -1813,6 +1908,7 @@ impl Step for Extended {
1813
1908
if rls_installer. is_some ( ) {
1814
1909
prepare ( "rls" ) ;
1815
1910
}
1911
+ prepare ( "rust-analyzer" ) ;
1816
1912
if miri_installer. is_some ( ) {
1817
1913
prepare ( "miri" ) ;
1818
1914
}
@@ -1846,6 +1942,8 @@ impl Step for Extended {
1846
1942
format ! ( "{}-{}" , name, target)
1847
1943
} else if name == "rls" {
1848
1944
"rls-preview" . to_string ( )
1945
+ } else if name == "rust-analyzer" {
1946
+ "rust-analyzer-preview" . to_string ( )
1849
1947
} else if name == "clippy" {
1850
1948
"clippy-preview" . to_string ( )
1851
1949
} else if name == "miri" {
@@ -1868,6 +1966,7 @@ impl Step for Extended {
1868
1966
if rls_installer. is_some ( ) {
1869
1967
prepare ( "rls" ) ;
1870
1968
}
1969
+ prepare ( "rust-analyzer" ) ;
1871
1970
if miri_installer. is_some ( ) {
1872
1971
prepare ( "miri" ) ;
1873
1972
}
@@ -1967,6 +2066,23 @@ impl Step for Extended {
1967
2066
. arg ( etc. join ( "msi/remove-duplicates.xsl" ) ) ,
1968
2067
) ;
1969
2068
}
2069
+ builder. run (
2070
+ Command :: new ( & heat)
2071
+ . current_dir ( & exe)
2072
+ . arg ( "dir" )
2073
+ . arg ( "rust-analyzer" )
2074
+ . args ( & heat_flags)
2075
+ . arg ( "-cg" )
2076
+ . arg ( "RustAnalyzerGroup" )
2077
+ . arg ( "-dr" )
2078
+ . arg ( "RustAnalyzer" )
2079
+ . arg ( "-var" )
2080
+ . arg ( "var.RustAnalyzerDir" )
2081
+ . arg ( "-out" )
2082
+ . arg ( exe. join ( "RustAnalyzerGroup.wxs" ) )
2083
+ . arg ( "-t" )
2084
+ . arg ( etc. join ( "msi/remove-duplicates.xsl" ) ) ,
2085
+ ) ;
1970
2086
builder. run (
1971
2087
Command :: new ( & heat)
1972
2088
. current_dir ( & exe)
@@ -2060,6 +2176,7 @@ impl Step for Extended {
2060
2176
if rls_installer. is_some ( ) {
2061
2177
cmd. arg ( "-dRlsDir=rls" ) ;
2062
2178
}
2179
+ cmd. arg ( "-dRustAnalyzerDir=rust-analyzer" ) ;
2063
2180
if miri_installer. is_some ( ) {
2064
2181
cmd. arg ( "-dMiriDir=miri" ) ;
2065
2182
}
@@ -2079,6 +2196,7 @@ impl Step for Extended {
2079
2196
if rls_installer. is_some ( ) {
2080
2197
candle ( "RlsGroup.wxs" . as_ref ( ) ) ;
2081
2198
}
2199
+ candle ( "RustAnalyzerGroup.wxs" . as_ref ( ) ) ;
2082
2200
if miri_installer. is_some ( ) {
2083
2201
candle ( "MiriGroup.wxs" . as_ref ( ) ) ;
2084
2202
}
@@ -2116,6 +2234,7 @@ impl Step for Extended {
2116
2234
if rls_installer. is_some ( ) {
2117
2235
cmd. arg ( "RlsGroup.wixobj" ) ;
2118
2236
}
2237
+ cmd. arg ( "RustAnalyzerGroup.wixobj" ) ;
2119
2238
if miri_installer. is_some ( ) {
2120
2239
cmd. arg ( "MiriGroup.wixobj" ) ;
2121
2240
}
@@ -2209,6 +2328,7 @@ impl Step for HashSign {
2209
2328
cmd. arg ( addr) ;
2210
2329
cmd. arg ( builder. package_vers ( & builder. release_num ( "cargo" ) ) ) ;
2211
2330
cmd. arg ( builder. package_vers ( & builder. release_num ( "rls" ) ) ) ;
2331
+ cmd. arg ( builder. package_vers ( & builder. release_num ( "rust-analyzer/crates/rust-analyzer" ) ) ) ;
2212
2332
cmd. arg ( builder. package_vers ( & builder. release_num ( "clippy" ) ) ) ;
2213
2333
cmd. arg ( builder. package_vers ( & builder. release_num ( "miri" ) ) ) ;
2214
2334
cmd. arg ( builder. package_vers ( & builder. release_num ( "rustfmt" ) ) ) ;
0 commit comments