bootstrap: Add support for ./x setup vim

This commit is contained in:
Kajetan Puchalski 2024-09-30 22:38:36 +01:00
parent dfc7e396a6
commit 9b24fae0be
No known key found for this signature in database
GPG Key ID: 324AF44011D9FFE3
5 changed files with 30 additions and 14 deletions

View File

@ -522,6 +522,7 @@ fn install_git_hook_maybe(builder: &Builder<'_>, config: &Config) -> io::Result<
#[derive(Clone, Debug, Eq, PartialEq)] #[derive(Clone, Debug, Eq, PartialEq)]
enum EditorKind { enum EditorKind {
Vscode, Vscode,
Vim,
Emacs, Emacs,
Helix, Helix,
} }
@ -532,7 +533,7 @@ impl EditorKind {
/// outdated vs. user-modified settings files. /// outdated vs. user-modified settings files.
fn hashes(&self) -> Vec<&str> { fn hashes(&self) -> Vec<&str> {
match self { match self {
EditorKind::Vscode => vec![ EditorKind::Vscode | EditorKind::Vim => vec![
"ea67e259dedf60d4429b6c349a564ffcd1563cf41c920a856d1f5b16b4701ac8", "ea67e259dedf60d4429b6c349a564ffcd1563cf41c920a856d1f5b16b4701ac8",
"56e7bf011c71c5d81e0bf42e84938111847a810eee69d906bba494ea90b51922", "56e7bf011c71c5d81e0bf42e84938111847a810eee69d906bba494ea90b51922",
"af1b5efe196aed007577899db9dae15d6dbc923d6fa42fa0934e68617ba9bbe0", "af1b5efe196aed007577899db9dae15d6dbc923d6fa42fa0934e68617ba9bbe0",
@ -546,9 +547,9 @@ fn hashes(&self) -> Vec<&str> {
"51068d4747a13732440d1a8b8f432603badb1864fa431d83d0fd4f8fa57039e0", "51068d4747a13732440d1a8b8f432603badb1864fa431d83d0fd4f8fa57039e0",
"d29af4d949bbe2371eac928a3c31cf9496b1701aa1c45f11cd6c759865ad5c45", "d29af4d949bbe2371eac928a3c31cf9496b1701aa1c45f11cd6c759865ad5c45",
], ],
EditorKind::Helix => vec![ EditorKind::Helix => {
"2d3069b8cf1b977e5d4023965eb6199597755e6c96c185ed5f2854f98b83d233" vec!["2d3069b8cf1b977e5d4023965eb6199597755e6c96c185ed5f2854f98b83d233"]
] }
} }
} }
@ -559,6 +560,7 @@ fn settings_path(&self, config: &Config) -> PathBuf {
fn settings_short_path(&self) -> PathBuf { fn settings_short_path(&self) -> PathBuf {
self.settings_folder().join(match self { self.settings_folder().join(match self {
EditorKind::Vscode => "settings.json", EditorKind::Vscode => "settings.json",
EditorKind::Vim => "coc-settings.json",
EditorKind::Emacs => ".dir-locals.el", EditorKind::Emacs => ".dir-locals.el",
EditorKind::Helix => "languages.toml", EditorKind::Helix => "languages.toml",
}) })
@ -567,6 +569,7 @@ fn settings_short_path(&self) -> PathBuf {
fn settings_folder(&self) -> PathBuf { fn settings_folder(&self) -> PathBuf {
match self { match self {
EditorKind::Vscode => PathBuf::new().join(".vscode"), EditorKind::Vscode => PathBuf::new().join(".vscode"),
EditorKind::Vim => PathBuf::new().join(".vim"),
EditorKind::Emacs => PathBuf::new(), EditorKind::Emacs => PathBuf::new(),
EditorKind::Helix => PathBuf::new().join(".helix"), EditorKind::Helix => PathBuf::new().join(".helix"),
} }
@ -574,18 +577,16 @@ fn settings_folder(&self) -> PathBuf {
fn settings_template(&self) -> &str { fn settings_template(&self) -> &str {
match self { 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::Emacs => include_str!("../../../../etc/rust_analyzer_eglot.el"),
EditorKind::Helix => include_str!("../../../../etc/rust_analyzer_helix.toml"), EditorKind::Helix => include_str!("../../../../etc/rust_analyzer_helix.toml"),
} }
} }
fn backup_extension(&self) -> &str { fn backup_extension(&self) -> String {
match self { format!("{}.bak", self.settings_short_path().extension().unwrap().to_str().unwrap())
EditorKind::Vscode => "json.bak",
EditorKind::Emacs => "el.bak",
EditorKind::Helix => "toml.bak",
}
} }
} }
@ -627,6 +628,7 @@ fn run(self, builder: &Builder<'_>) -> Self::Output {
} }
impl_editor_support!(vscode, Vscode); impl_editor_support!(vscode, Vscode);
impl_editor_support!(vim, Vim);
impl_editor_support!(emacs, Emacs); impl_editor_support!(emacs, Emacs);
impl_editor_support!(helix, Helix); impl_editor_support!(helix, Helix);

View File

@ -1001,7 +1001,15 @@ macro_rules! describe {
run::GenerateCompletions, run::GenerateCompletions,
), ),
Kind::Setup => { 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::Clean => describe!(clean::CleanAll, clean::Rustc, clean::Std),
Kind::Vendor => describe!(vendor::Vendor), Kind::Vendor => describe!(vendor::Vendor),

View File

@ -450,13 +450,14 @@ pub enum Subcommand {
To only set up the git hook, VS Code config or toolchain link, you may use To only set up the git hook, VS Code config or toolchain link, you may use
./x.py setup hook ./x.py setup hook
./x.py setup vscode ./x.py setup vscode
./x.py setup vim
./x.py setup emacs ./x.py setup emacs
./x.py setup helix ./x.py setup helix
./x.py setup link", Profile::all_for_help(" ").trim_end()))] ./x.py setup link", Profile::all_for_help(" ").trim_end()))]
Setup { Setup {
/// Either the profile for `config.toml` or another setup action. /// Either the profile for `config.toml` or another setup action.
/// May be omitted to set up interactively /// May be omitted to set up interactively
#[arg(value_name = "<PROFILE>|hook|vscode|emacs|helix|link")] #[arg(value_name = "<PROFILE>|hook|vscode|vim|emacs|helix|link")]
profile: Option<PathBuf>, profile: Option<PathBuf>,
}, },
/// Suggest a subset of tests to run, based on modified files /// Suggest a subset of tests to run, based on modified files

View File

@ -270,4 +270,9 @@ pub fn human_readable_changes(changes: &[ChangeInfo]) -> String {
severity: ChangeSeverity::Info, severity: ChangeSeverity::Info,
summary: "If `llvm.download-ci-llvm` is not defined, it defaults to `true`.", 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]",
},
]; ];

View File

@ -2741,7 +2741,7 @@ _x.py() {
return 0 return 0
;; ;;
x.py__setup) 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 [<PROFILE>|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 [<PROFILE>|hook|vscode|vim|emacs|helix|link] [PATHS]... [ARGS]..."
if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0 return 0