From 310f3d7db6d96c1cc70fb7c648947362c5d022de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Riegel?= Date: Mon, 28 Apr 2025 00:45:49 +0200 Subject: [PATCH 1/4] fix: use the RIGHT declids --- src/formatting.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/formatting.rs b/src/formatting.rs index 0deacf6..c584709 100644 --- a/src/formatting.rs +++ b/src/formatting.rs @@ -14,10 +14,10 @@ struct DeclId; #[allow(non_upper_case_globals)] impl DeclId { - const If: usize = 22; - const Let: usize = 30; const Def: usize = 5; - const ExportDefEnv: usize = 6; + const ExportDefEnv: usize = 13; + const If: usize = 21; + const Let: usize = 28; } fn get_engine_state() -> EngineState { @@ -183,7 +183,6 @@ fn write_only_if_have_hastag_or_equal( fn resolve_call(c_bytes: &[u8], declid: usize, mut out: Vec) -> Vec { out = match declid { DeclId::If => insert_newline(out), - DeclId::Let => insert_newline(out), DeclId::Def => insert_newline(out), DeclId::ExportDefEnv | _ => out, }; From db4bc15d6b6861ae448339efedb05f02858ad1bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Riegel?= Date: Mon, 28 Apr 2025 00:21:55 +0200 Subject: [PATCH 2/4] wip decl_name from id --- src/formatting.rs | 59 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 15 deletions(-) diff --git a/src/formatting.rs b/src/formatting.rs index c584709..0b1b3e4 100644 --- a/src/formatting.rs +++ b/src/formatting.rs @@ -7,17 +7,36 @@ use nu_parser::{flatten_block, parse, FlatShape}; use nu_protocol::{ ast::Block, engine::{EngineState, StateWorkingSet}, - Span, + DeclId, Span, }; -struct DeclId; +#[derive(Debug, Clone)] +struct NewDeclId<'a> { + decls: &'a Vec<(Vec, DeclId)>, +} + +impl<'a> NewDeclId<'a> { + pub fn new(decls: &'a Vec<(Vec, DeclId)>) -> NewDeclId<'a> { + NewDeclId { decls } + } -#[allow(non_upper_case_globals)] -impl DeclId { - const Def: usize = 5; - const ExportDefEnv: usize = 13; - const If: usize = 21; - const Let: usize = 28; + pub fn get_decl_id(&self, decl_name: &str) -> Option { + let decl_name_utf8 = decl_name.as_bytes().to_vec(); + for decl in self.decls { + if decl_name_utf8 == decl.0 { + return Some(decl.1.get()); + } + } + None + } + pub fn get_decl_name(&'a self, decl_id: usize) -> Option<&'a str> { + for decl in self.decls { + if decl_id == decl.1.get() { + return Some(std::str::from_utf8(&decl.0).expect("Failed to parse DeclId's name")); + } + } + None + } } fn get_engine_state() -> EngineState { @@ -29,6 +48,12 @@ fn get_engine_state() -> EngineState { /// Reading the file gives you a list of bytes pub(crate) fn format_inner(contents: &[u8], _config: &Config) -> Vec { let engine_state = get_engine_state(); + let decls_sorted: Vec<(Vec, nu_protocol::Id)> = + engine_state.get_decls_sorted(false); + //dbg!(&decls_sorted); + + let decl_ids = NewDeclId::new(&decls_sorted); + let mut working_set = StateWorkingSet::new(&engine_state); let parsed_block = parse(&mut working_set, None, contents, false); @@ -94,10 +119,14 @@ pub(crate) fn format_inner(contents: &[u8], _config: &Config) -> Vec { } FlatShape::InternalCall(declid) => { let declid = declid.get(); + let decl_name = decl_ids.get_decl_name(declid); trace!("Called Internal call with {declid}"); - out = resolve_call(bytes, declid, out); - after_a_def = declid == DeclId::Def; + + if let Some(decl_name) = decl_name { + out = resolve_call(bytes, decl_name, out); + after_a_def = decl_name == "def"; + } } FlatShape::External => out = resolve_external(bytes, out), FlatShape::ExternalArg | FlatShape::Signature | FlatShape::Keyword => { @@ -180,11 +209,11 @@ fn write_only_if_have_hastag_or_equal( } #[allow(clippy::wildcard_in_or_patterns)] -fn resolve_call(c_bytes: &[u8], declid: usize, mut out: Vec) -> Vec { - out = match declid { - DeclId::If => insert_newline(out), - DeclId::Def => insert_newline(out), - DeclId::ExportDefEnv | _ => out, +fn resolve_call(c_bytes: &[u8], decl_name: &str, mut out: Vec) -> Vec { + out = match decl_name { + "if" => insert_newline(out), + "def" => insert_newline(out), + "export def" | _ => out, }; out.extend(c_bytes); out.extend(b" "); From f59caffc6c03fb6f09c47dbea256e3473691bfe2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Riegel?= Date: Mon, 28 Apr 2025 22:58:24 +0200 Subject: [PATCH 3/4] cleanup --- src/formatting.rs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/formatting.rs b/src/formatting.rs index 0b1b3e4..d76fbeb 100644 --- a/src/formatting.rs +++ b/src/formatting.rs @@ -20,15 +20,6 @@ impl<'a> NewDeclId<'a> { NewDeclId { decls } } - pub fn get_decl_id(&self, decl_name: &str) -> Option { - let decl_name_utf8 = decl_name.as_bytes().to_vec(); - for decl in self.decls { - if decl_name_utf8 == decl.0 { - return Some(decl.1.get()); - } - } - None - } pub fn get_decl_name(&'a self, decl_id: usize) -> Option<&'a str> { for decl in self.decls { if decl_id == decl.1.get() { @@ -50,7 +41,6 @@ pub(crate) fn format_inner(contents: &[u8], _config: &Config) -> Vec { let engine_state = get_engine_state(); let decls_sorted: Vec<(Vec, nu_protocol::Id)> = engine_state.get_decls_sorted(false); - //dbg!(&decls_sorted); let decl_ids = NewDeclId::new(&decls_sorted); From b080634ec0be07839545fc670f44fdeca0be357c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Riegel?= Date: Mon, 28 Apr 2025 23:12:44 +0200 Subject: [PATCH 4/4] use extension trait pattern --- src/formatting.rs | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/formatting.rs b/src/formatting.rs index d76fbeb..52298d4 100644 --- a/src/formatting.rs +++ b/src/formatting.rs @@ -10,18 +10,13 @@ use nu_protocol::{ DeclId, Span, }; -#[derive(Debug, Clone)] -struct NewDeclId<'a> { - decls: &'a Vec<(Vec, DeclId)>, +trait DeclsExt { + fn get_decl_name(&self, decl_id: usize) -> Option<&str>; } -impl<'a> NewDeclId<'a> { - pub fn new(decls: &'a Vec<(Vec, DeclId)>) -> NewDeclId<'a> { - NewDeclId { decls } - } - - pub fn get_decl_name(&'a self, decl_id: usize) -> Option<&'a str> { - for decl in self.decls { +impl DeclsExt for Vec<(Vec, DeclId)> { + fn get_decl_name(&self, decl_id: usize) -> Option<&str> { + for decl in self { if decl_id == decl.1.get() { return Some(std::str::from_utf8(&decl.0).expect("Failed to parse DeclId's name")); } @@ -42,8 +37,6 @@ pub(crate) fn format_inner(contents: &[u8], _config: &Config) -> Vec { let decls_sorted: Vec<(Vec, nu_protocol::Id)> = engine_state.get_decls_sorted(false); - let decl_ids = NewDeclId::new(&decls_sorted); - let mut working_set = StateWorkingSet::new(&engine_state); let parsed_block = parse(&mut working_set, None, contents, false); @@ -109,7 +102,7 @@ pub(crate) fn format_inner(contents: &[u8], _config: &Config) -> Vec { } FlatShape::InternalCall(declid) => { let declid = declid.get(); - let decl_name = decl_ids.get_decl_name(declid); + let decl_name = decls_sorted.get_decl_name(declid); trace!("Called Internal call with {declid}");