forked from starship/starship
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(deno): create module (starship#2565)
* Add deno module * Update docs * Update src/utils.rs Co-authored-by: Dario Vladović <[email protected]> * Update src/modules/deno.rs Co-authored-by: Dario Vladović <[email protected]> * Update src/modules/deno.rs Co-authored-by: Dario Vladović <[email protected]> * Update src/modules/deno.rs Co-authored-by: Dario Vladović <[email protected]> * Update src/modules/deno.rs Co-authored-by: Dario Vladović <[email protected]> * run rust fmt * Use deno -V * fmt * Fix deno module * do clippy * Update src/configs/deno.rs Co-authored-by: David Knaack <[email protected]> * Update src/modules/deno.rs Co-authored-by: David Knaack <[email protected]> * Update docs/config/README.md Co-authored-by: David Knaack <[email protected]> * Fix test and docs * Remove unused code * fmt * update configs * Add more tests * Update docs/config/README.md Co-authored-by: Dario Vladović <[email protected]> Co-authored-by: Dario Vladović <[email protected]> Co-authored-by: David Knaack <[email protected]>
- Loading branch information
1 parent
51c2ae0
commit 3cb15ab
Showing
8 changed files
with
201 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
use crate::config::ModuleConfig; | ||
|
||
use serde::Serialize; | ||
use starship_module_config_derive::ModuleConfig; | ||
|
||
#[derive(Clone, ModuleConfig, Serialize)] | ||
pub struct DenoConfig<'a> { | ||
pub format: &'a str, | ||
pub symbol: &'a str, | ||
pub style: &'a str, | ||
pub disabled: bool, | ||
pub detect_extensions: Vec<&'a str>, | ||
pub detect_files: Vec<&'a str>, | ||
pub detect_folders: Vec<&'a str>, | ||
} | ||
|
||
impl<'a> Default for DenoConfig<'a> { | ||
fn default() -> Self { | ||
DenoConfig { | ||
format: "via [$symbol($version )]($style)", | ||
symbol: "🦕 ", | ||
style: "green bold", | ||
disabled: false, | ||
detect_extensions: vec![], | ||
detect_files: vec!["mod.ts", "deps.ts", "mod.js", "deps.js"], | ||
detect_folders: vec![], | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
use super::{Context, Module, RootModuleConfig}; | ||
|
||
use crate::configs::deno::DenoConfig; | ||
use crate::formatter::StringFormatter; | ||
|
||
/// Creates a module with the current Deno version | ||
pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> { | ||
let mut module = context.new_module("deno"); | ||
let config = DenoConfig::try_load(module.config); | ||
let is_deno_project = context | ||
.try_begin_scan()? | ||
.set_files(&config.detect_files) | ||
.is_match(); | ||
|
||
if !is_deno_project { | ||
return None; | ||
} | ||
|
||
let parsed = StringFormatter::new(config.format).and_then(|formatter| { | ||
formatter | ||
.map_meta(|var, _| match var { | ||
"symbol" => Some(config.symbol), | ||
_ => None, | ||
}) | ||
.map_style(|variable| match variable { | ||
"style" => Some(Ok(config.style)), | ||
_ => None, | ||
}) | ||
.map(|variable| match variable { | ||
"version" => context | ||
.exec_cmd("deno", &["-V"]) | ||
.and_then(|output| parse_deno_version(output.stdout.trim())) | ||
.map(Ok), | ||
_ => None, | ||
}) | ||
.parse(None) | ||
}); | ||
|
||
module.set_segments(match parsed { | ||
Ok(segments) => segments, | ||
Err(error) => { | ||
log::warn!("Error in module `deno`:\n{}", error); | ||
return None; | ||
} | ||
}); | ||
|
||
Some(module) | ||
} | ||
|
||
fn parse_deno_version(deno_version: &str) -> Option<String> { | ||
let version = deno_version | ||
// split into ["deno", "1.8.3"] | ||
.split_whitespace() | ||
// return "1.8.3" | ||
.nth(1)?; | ||
|
||
Some(format!("v{}", version)) | ||
} | ||
|
||
#[cfg(test)] | ||
mod tests { | ||
use super::parse_deno_version; | ||
use crate::test::ModuleRenderer; | ||
use ansi_term::Color; | ||
use std::fs::File; | ||
use std::io; | ||
|
||
#[test] | ||
fn test_parse_deno_version() { | ||
const OUTPUT: &str = "deno 1.8.3\n"; | ||
assert_eq!( | ||
parse_deno_version(OUTPUT.trim()), | ||
Some("v1.8.3".to_string()) | ||
) | ||
} | ||
|
||
#[test] | ||
fn folder_without_deno_files() -> io::Result<()> { | ||
let dir = tempfile::tempdir()?; | ||
let actual = ModuleRenderer::new("deno").path(dir.path()).collect(); | ||
let expected = None; | ||
assert_eq!(expected, actual); | ||
dir.close() | ||
} | ||
|
||
#[test] | ||
fn folder_with_mod_ts() -> io::Result<()> { | ||
let dir = tempfile::tempdir()?; | ||
File::create(dir.path().join("mod.ts"))?.sync_all()?; | ||
let actual = ModuleRenderer::new("deno").path(dir.path()).collect(); | ||
let expected = Some(format!("via {}", Color::Green.bold().paint("🦕 v1.8.3 "))); | ||
assert_eq!(expected, actual); | ||
dir.close() | ||
} | ||
|
||
#[test] | ||
fn folder_with_mod_js() -> io::Result<()> { | ||
let dir = tempfile::tempdir()?; | ||
File::create(dir.path().join("mod.js"))?.sync_all()?; | ||
let actual = ModuleRenderer::new("deno").path(dir.path()).collect(); | ||
let expected = Some(format!("via {}", Color::Green.bold().paint("🦕 v1.8.3 "))); | ||
assert_eq!(expected, actual); | ||
dir.close() | ||
} | ||
|
||
#[test] | ||
fn folder_with_deps_ts() -> io::Result<()> { | ||
let dir = tempfile::tempdir()?; | ||
File::create(dir.path().join("deps.ts"))?.sync_all()?; | ||
let actual = ModuleRenderer::new("deno").path(dir.path()).collect(); | ||
let expected = Some(format!("via {}", Color::Green.bold().paint("🦕 v1.8.3 "))); | ||
assert_eq!(expected, actual); | ||
dir.close() | ||
} | ||
|
||
#[test] | ||
fn folder_with_deps_js() -> io::Result<()> { | ||
let dir = tempfile::tempdir()?; | ||
File::create(dir.path().join("deps.js"))?.sync_all()?; | ||
let actual = ModuleRenderer::new("deno").path(dir.path()).collect(); | ||
let expected = Some(format!("via {}", Color::Green.bold().paint("🦕 v1.8.3 "))); | ||
assert_eq!(expected, actual); | ||
dir.close() | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters