Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
lemonadern committed Sep 6, 2024
1 parent 3ca7c5a commit c9972e2
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 22 deletions.
13 changes: 6 additions & 7 deletions crates/uroborosql-fmt/src/cst/expr/column_list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,17 @@ pub(crate) struct ColumnList {
}

impl ColumnList {
pub(crate) fn new(cols: Vec<AlignedExpr>, loc: Location) -> ColumnList {
pub(crate) fn new(
cols: Vec<AlignedExpr>,
loc: Location,
start_comments: Vec<Comment>,
) -> ColumnList {
ColumnList {
cols,
loc,
force_multi_line: false,
head_comment: None,
start_comments: vec![],
start_comments,
}
}

Expand Down Expand Up @@ -69,11 +73,6 @@ impl ColumnList {
self.loc = loc;
}

/// 開きかっこから最初の式の間に現れるコメントを追加する
pub(crate) fn add_start_comment(&mut self, comment: Comment) {
self.start_comments.push(comment);
}

/// 列リストを複数行で描画するかを指定する。
/// true を与えたら必ず複数行で描画され、false を与えたらできるだけ単一行で描画する。
pub(crate) fn set_force_multi_line(&mut self, b: bool) {
Expand Down
23 changes: 8 additions & 15 deletions crates/uroborosql-fmt/src/visitor/expr/column_list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,14 @@ impl Visitor {

// カラムリストが空の場合
if cursor.node().kind() == ")" {
return Ok(ColumnList::new(vec![], loc));
return Ok(ColumnList::new(vec![], loc, vec![]));
}

// 開き括弧と式との間にあるコメントを保持
// 最後の要素はバインドパラメータの可能性があるので、最初の式を処理した後で付け替える
let mut comment_buf = vec![];
let mut start_comments = vec![];
while cursor.node().kind() == COMMENT {
comment_buf.push(Comment::new(cursor.node(), src));
start_comments.push(Comment::new(cursor.node(), src));
cursor.goto_next_sibling();
}

Expand All @@ -40,15 +40,15 @@ impl Visitor {
// (
// -- comment
// /* bind */expr ...
// ^^^^^^^^^^ comment_buf.last()
// ^^^^^^^^^^ start_comments.last()
//```
// 開き括弧の後のコメントのうち最後のもの(最初の式の直前にあるもの)を取得
if let Some(comment) = comment_buf.last() {
if let Some(comment) = start_comments.last() {
if comment.is_block_comment() && comment.loc().is_next_to(&first_expr.loc()) {
// ブロックコメントかつ式に隣接していればバインドパラメータなので、式に付与する
first_expr.set_head_comment(comment.clone());
// comment_buf からも削除
comment_buf.pop().unwrap();
// start_comments からも削除
start_comments.pop().unwrap();
}
}

Expand Down Expand Up @@ -91,13 +91,6 @@ impl Visitor {
}
}

let mut column_list = ColumnList::new(exprs, loc);

// 開き括弧の後のコメントを追加
for comment in comment_buf {
column_list.add_start_comment(comment)
}

Ok(column_list)
Ok(ColumnList::new(exprs, loc, start_comments))
}
}

0 comments on commit c9972e2

Please sign in to comment.