diff --git a/src/bootstrap/src/core/build_steps/setup.rs b/src/bootstrap/src/core/build_steps/setup.rs index 2b5700699c4..3aa8d3a67d8 100644 --- a/src/bootstrap/src/core/build_steps/setup.rs +++ b/src/bootstrap/src/core/build_steps/setup.rs @@ -522,6 +522,7 @@ fn install_git_hook_maybe(builder: &Builder<'_>, config: &Config) -> io::Result< #[derive(Clone, Debug, Eq, PartialEq)] enum EditorKind { Vscode, + Vim, Emacs, Helix, } @@ -532,7 +533,7 @@ impl EditorKind { /// outdated vs. user-modified settings files. fn hashes(&self) -> Vec<&str> { match self { - EditorKind::Vscode => vec![ + EditorKind::Vscode | EditorKind::Vim => vec![ "ea67e259dedf60d4429b6c349a564ffcd1563cf41c920a856d1f5b16b4701ac8", "56e7bf011c71c5d81e0bf42e84938111847a810eee69d906bba494ea90b51922", "af1b5efe196aed007577899db9dae15d6dbc923d6fa42fa0934e68617ba9bbe0", @@ -546,9 +547,9 @@ fn hashes(&self) -> Vec<&str> { "51068d4747a13732440d1a8b8f432603badb1864fa431d83d0fd4f8fa57039e0", "d29af4d949bbe2371eac928a3c31cf9496b1701aa1c45f11cd6c759865ad5c45", ], - EditorKind::Helix => vec![ - "2d3069b8cf1b977e5d4023965eb6199597755e6c96c185ed5f2854f98b83d233" - ] + EditorKind::Helix => { + vec!["2d3069b8cf1b977e5d4023965eb6199597755e6c96c185ed5f2854f98b83d233"] + } } } @@ -559,6 +560,7 @@ fn settings_path(&self, config: &Config) -> PathBuf { fn settings_short_path(&self) -> PathBuf { self.settings_folder().join(match self { EditorKind::Vscode => "settings.json", + EditorKind::Vim => "coc-settings.json", EditorKind::Emacs => ".dir-locals.el", EditorKind::Helix => "languages.toml", }) @@ -567,6 +569,7 @@ fn settings_short_path(&self) -> PathBuf { fn settings_folder(&self) -> PathBuf { match self { EditorKind::Vscode => PathBuf::new().join(".vscode"), + EditorKind::Vim => PathBuf::new().join(".vim"), EditorKind::Emacs => PathBuf::new(), EditorKind::Helix => PathBuf::new().join(".helix"), } @@ -574,18 +577,16 @@ fn settings_folder(&self) -> PathBuf { fn settings_template(&self) -> &str { match self { - EditorKind::Vscode => include_str!("../../../../etc/rust_analyzer_settings.json"), + EditorKind::Vscode | EditorKind::Vim => { + include_str!("../../../../etc/rust_analyzer_settings.json") + } EditorKind::Emacs => include_str!("../../../../etc/rust_analyzer_eglot.el"), EditorKind::Helix => include_str!("../../../../etc/rust_analyzer_helix.toml"), } } - fn backup_extension(&self) -> &str { - match self { - EditorKind::Vscode => "json.bak", - EditorKind::Emacs => "el.bak", - EditorKind::Helix => "toml.bak", - } + fn backup_extension(&self) -> String { + format!("{}.bak", self.settings_short_path().extension().unwrap().to_str().unwrap()) } } @@ -627,6 +628,7 @@ fn run(self, builder: &Builder<'_>) -> Self::Output { } impl_editor_support!(vscode, Vscode); +impl_editor_support!(vim, Vim); impl_editor_support!(emacs, Emacs); impl_editor_support!(helix, Helix); diff --git a/src/bootstrap/src/core/builder.rs b/src/bootstrap/src/core/builder.rs index dcffeccbaff..67f9a3ab3ed 100644 --- a/src/bootstrap/src/core/builder.rs +++ b/src/bootstrap/src/core/builder.rs @@ -1001,7 +1001,15 @@ macro_rules! describe { run::GenerateCompletions, ), Kind::Setup => { - describe!(setup::Profile, setup::Hook, setup::Link, setup::Vscode, setup::Emacs, setup::Helix) + describe!( + setup::Profile, + setup::Hook, + setup::Link, + setup::Vscode, + setup::Emacs, + setup::Helix, + setup::Vim + ) } Kind::Clean => describe!(clean::CleanAll, clean::Rustc, clean::Std), Kind::Vendor => describe!(vendor::Vendor), diff --git a/src/bootstrap/src/core/config/flags.rs b/src/bootstrap/src/core/config/flags.rs index 2957e47c771..fb27d1ebb18 100644 --- a/src/bootstrap/src/core/config/flags.rs +++ b/src/bootstrap/src/core/config/flags.rs @@ -450,13 +450,14 @@ pub enum Subcommand { To only set up the git hook, VS Code config or toolchain link, you may use ./x.py setup hook ./x.py setup vscode + ./x.py setup vim ./x.py setup emacs ./x.py setup helix ./x.py setup link", Profile::all_for_help(" ").trim_end()))] Setup { /// Either the profile for `config.toml` or another setup action. /// May be omitted to set up interactively - #[arg(value_name = "|hook|vscode|emacs|helix|link")] + #[arg(value_name = "|hook|vscode|vim|emacs|helix|link")] profile: Option, }, /// Suggest a subset of tests to run, based on modified files diff --git a/src/bootstrap/src/utils/change_tracker.rs b/src/bootstrap/src/utils/change_tracker.rs index e6f7f105fa2..e6f5363dbf2 100644 --- a/src/bootstrap/src/utils/change_tracker.rs +++ b/src/bootstrap/src/utils/change_tracker.rs @@ -270,4 +270,9 @@ pub fn human_readable_changes(changes: &[ChangeInfo]) -> String { severity: ChangeSeverity::Info, summary: "If `llvm.download-ci-llvm` is not defined, it defaults to `true`.", }, + ChangeInfo { + change_id: 131075, + severity: ChangeSeverity::Info, + summary: "New options for ./x setup added - ./x setup [vim|emacs|helix]", + }, ]; diff --git a/src/etc/completions/x.py.sh b/src/etc/completions/x.py.sh index 15475b976ea..913b0e820cb 100644 --- a/src/etc/completions/x.py.sh +++ b/src/etc/completions/x.py.sh @@ -2741,7 +2741,7 @@ _x.py() { return 0 ;; x.py__setup) - opts="-v -i -j -h --verbose --incremental --config --build-dir --build --host --target --exclude --skip --include-default-paths --rustc-error-format --on-fail --dry-run --dump-bootstrap-shims --stage --keep-stage --keep-stage-std --src --jobs --warnings --error-format --json-output --color --bypass-bootstrap-lock --rust-profile-generate --rust-profile-use --llvm-profile-use --llvm-profile-generate --enable-bolt-settings --skip-stage0-validation --reproducible-artifact --set --help [|hook|vscode|emacs|helix|link] [PATHS]... [ARGS]..." + opts="-v -i -j -h --verbose --incremental --config --build-dir --build --host --target --exclude --skip --include-default-paths --rustc-error-format --on-fail --dry-run --dump-bootstrap-shims --stage --keep-stage --keep-stage-std --src --jobs --warnings --error-format --json-output --color --bypass-bootstrap-lock --rust-profile-generate --rust-profile-use --llvm-profile-use --llvm-profile-generate --enable-bolt-settings --skip-stage0-validation --reproducible-artifact --set --help [|hook|vscode|vim|emacs|helix|link] [PATHS]... [ARGS]..." if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) return 0