Add configurable venv path and improve Python detection (#116)
Some checks failed
lint / pre-commit (push) Waiting to run
release / linux (map[runner:ubuntu-22.04 target:aarch64]) (push) Failing after 5s
release / linux (map[runner:ubuntu-22.04 target:armv7]) (push) Failing after 3s
release / linux (map[runner:ubuntu-22.04 target:ppc64le]) (push) Failing after 3s
release / linux (map[runner:ubuntu-22.04 target:s390x]) (push) Failing after 3s
release / test (push) Has been skipped
release / linux (map[runner:ubuntu-22.04 target:x86]) (push) Failing after 3s
release / linux (map[runner:ubuntu-22.04 target:x86_64]) (push) Failing after 3s
release / musllinux (map[runner:ubuntu-22.04 target:aarch64]) (push) Failing after 3s
release / musllinux (map[runner:ubuntu-22.04 target:armv7]) (push) Failing after 3s
release / musllinux (map[runner:ubuntu-22.04 target:x86]) (push) Failing after 3s
release / musllinux (map[runner:ubuntu-22.04 target:x86_64]) (push) Failing after 4s
release / sdist (push) Has been cancelled
release / windows (map[runner:windows-latest target:x64]) (push) Has been cancelled
release / windows (map[runner:windows-latest target:x86]) (push) Has been cancelled
release / macos (map[runner:macos-13 target:x86_64]) (push) Has been cancelled
release / macos (map[runner:macos-14 target:aarch64]) (push) Has been cancelled
release / release (push) Has been cancelled

This commit is contained in:
Josh Thomas 2025-04-29 23:01:00 -05:00 committed by GitHub
parent 36c57cff35
commit 3b7ffe0b70
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 562 additions and 31 deletions

View file

@ -17,9 +17,10 @@ pub enum ConfigError {
}
#[derive(Debug, Deserialize, Default, PartialEq)]
#[serde(default)]
pub struct Settings {
#[serde(default)]
debug: bool,
venv_path: Option<String>,
}
impl Settings {
@ -76,6 +77,10 @@ impl Settings {
pub fn debug(&self) -> bool {
self.debug
}
pub fn venv_path(&self) -> Option<&str> {
self.venv_path.as_deref()
}
}
#[cfg(test)]
@ -91,9 +96,14 @@ mod tests {
fn test_load_no_files() {
let dir = tempdir().unwrap();
let settings = Settings::new(dir.path()).unwrap();
// Should load defaults
assert_eq!(settings, Settings { debug: false });
// Add assertions for future default fields here
assert_eq!(
settings,
Settings {
debug: false,
venv_path: None
}
);
}
}
@ -105,7 +115,27 @@ mod tests {
let dir = tempdir().unwrap();
fs::write(dir.path().join("djls.toml"), "debug = true").unwrap();
let settings = Settings::new(dir.path()).unwrap();
assert_eq!(settings, Settings { debug: true });
assert_eq!(
settings,
Settings {
debug: true,
..Default::default()
}
);
}
#[test]
fn test_load_venv_path_config() {
let dir = tempdir().unwrap();
fs::write(dir.path().join("djls.toml"), "venv_path = '/path/to/venv'").unwrap();
let settings = Settings::new(dir.path()).unwrap();
assert_eq!(
settings,
Settings {
venv_path: Some("/path/to/venv".to_string()),
..Default::default()
}
);
}
#[test]
@ -113,7 +143,13 @@ mod tests {
let dir = tempdir().unwrap();
fs::write(dir.path().join(".djls.toml"), "debug = true").unwrap();
let settings = Settings::new(dir.path()).unwrap();
assert_eq!(settings, Settings { debug: true });
assert_eq!(
settings,
Settings {
debug: true,
..Default::default()
}
);
}
#[test]
@ -123,7 +159,13 @@ mod tests {
let content = "[tool.djls]\ndebug = true\n";
fs::write(dir.path().join("pyproject.toml"), content).unwrap();
let settings = Settings::new(dir.path()).unwrap();
assert_eq!(settings, Settings { debug: true });
assert_eq!(
settings,
Settings {
debug: true,
..Default::default()
}
);
}
}
@ -136,7 +178,14 @@ mod tests {
fs::write(dir.path().join(".djls.toml"), "debug = false").unwrap();
fs::write(dir.path().join("djls.toml"), "debug = true").unwrap();
let settings = Settings::new(dir.path()).unwrap();
assert_eq!(settings, Settings { debug: true }); // djls.toml wins
// djls.toml wins
assert_eq!(
settings,
Settings {
debug: true,
..Default::default()
}
);
}
#[test]
@ -146,7 +195,14 @@ mod tests {
fs::write(dir.path().join("pyproject.toml"), pyproject_content).unwrap();
fs::write(dir.path().join(".djls.toml"), "debug = true").unwrap();
let settings = Settings::new(dir.path()).unwrap();
assert_eq!(settings, Settings { debug: true }); // .djls.toml wins
// .djls.toml wins
assert_eq!(
settings,
Settings {
debug: true,
..Default::default()
}
);
}
#[test]
@ -157,7 +213,14 @@ mod tests {
fs::write(dir.path().join(".djls.toml"), "debug = false").unwrap();
fs::write(dir.path().join("djls.toml"), "debug = true").unwrap();
let settings = Settings::new(dir.path()).unwrap();
assert_eq!(settings, Settings { debug: true }); // djls.toml wins
// djls.toml wins
assert_eq!(
settings,
Settings {
debug: true,
..Default::default()
}
);
}
#[test]
@ -171,7 +234,14 @@ mod tests {
let settings =
Settings::load_from_paths(project_dir.path(), Some(&user_conf_path)).unwrap();
assert_eq!(settings, Settings { debug: false }); // pyproject.toml overrides user
// pyproject.toml overrides user
assert_eq!(
settings,
Settings {
debug: false,
..Default::default()
}
);
}
#[test]
@ -184,7 +254,14 @@ mod tests {
let settings =
Settings::load_from_paths(project_dir.path(), Some(&user_conf_path)).unwrap();
assert_eq!(settings, Settings { debug: false }); // djls.toml overrides user
// djls.toml overrides user
assert_eq!(
settings,
Settings {
debug: false,
..Default::default()
}
);
}
}
@ -200,7 +277,13 @@ mod tests {
let settings =
Settings::load_from_paths(project_dir.path(), Some(&user_conf_path)).unwrap();
assert_eq!(settings, Settings { debug: true });
assert_eq!(
settings,
Settings {
debug: true,
..Default::default()
}
);
}
#[test]
@ -214,7 +297,13 @@ mod tests {
// Should load project settings fine, ignoring non-existent user config
let settings =
Settings::load_from_paths(project_dir.path(), Some(&user_conf_path)).unwrap();
assert_eq!(settings, Settings { debug: true });
assert_eq!(
settings,
Settings {
debug: true,
..Default::default()
}
);
}
#[test]
@ -225,7 +314,13 @@ mod tests {
// Call helper with None for user path
let settings = Settings::load_from_paths(project_dir.path(), None).unwrap();
assert_eq!(settings, Settings { debug: true });
assert_eq!(
settings,
Settings {
debug: true,
..Default::default()
}
);
}
}