Skip to content

Commit b184288

Browse files
committed
update format basic
1 parent f279da5 commit b184288

File tree

2 files changed

+47
-3
lines changed

2 files changed

+47
-3
lines changed

crates/emmylua_code_style/src/format/mod.rs

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,59 @@
1-
use emmylua_parser::{LuaAst, LuaAstNode};
1+
mod syntax_node_change;
2+
3+
use std::collections::HashMap;
4+
5+
use emmylua_parser::{LuaAst, LuaAstNode, LuaSyntaxId};
26
use rowan::NodeOrToken;
37

8+
use crate::format::syntax_node_change::TokenNodeChange;
9+
410
#[allow(unused)]
511
#[derive(Debug)]
612
pub struct LuaFormatter {
713
root: LuaAst,
14+
token_changes: HashMap<LuaSyntaxId, TokenNodeChange>,
815
}
916

1017
#[allow(unused)]
1118
impl LuaFormatter {
1219
pub fn new(root: LuaAst) -> Self {
13-
Self { root }
20+
Self {
21+
root,
22+
token_changes: HashMap::new(),
23+
}
24+
}
25+
26+
pub fn add_token_change(&mut self, syntax_id: LuaSyntaxId, change: TokenNodeChange) {
27+
self.token_changes.insert(syntax_id, change);
28+
}
29+
30+
pub fn get_token_change(&self, syntax_id: &LuaSyntaxId) -> Option<&TokenNodeChange> {
31+
self.token_changes.get(syntax_id)
1432
}
1533

1634
pub fn get_formatted_text(&self) -> String {
1735
let mut formatted_text = String::new();
1836
for node_or_token in self.root.syntax().descendants_with_tokens() {
1937
if let NodeOrToken::Token(token) = node_or_token {
20-
formatted_text.push_str(&token.text());
38+
let syntax_id = LuaSyntaxId::from_token(&token);
39+
if let Some(change) = self.token_changes.get(&syntax_id) {
40+
match change {
41+
TokenNodeChange::Remove => continue,
42+
TokenNodeChange::AddLeft(s) => {
43+
formatted_text.push_str(s);
44+
formatted_text.push_str(&token.text());
45+
}
46+
TokenNodeChange::AddRight(s) => {
47+
formatted_text.push_str(&token.text());
48+
formatted_text.push_str(s);
49+
}
50+
TokenNodeChange::ReplaceWith(s) => {
51+
formatted_text.push_str(s);
52+
}
53+
}
54+
} else {
55+
formatted_text.push_str(&token.text());
56+
}
2157
}
2258
}
2359

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#[derive(Debug)]
2+
#[allow(unused)]
3+
pub enum TokenNodeChange {
4+
Remove,
5+
AddLeft(String),
6+
AddRight(String),
7+
ReplaceWith(String),
8+
}

0 commit comments

Comments
 (0)