Skip to content

Feat/linter#215

Draft
lemonadern wants to merge 11 commits intomainfrom
feat/linter
Draft

Feat/linter#215
lemonadern wants to merge 11 commits intomainfrom
feat/linter

Conversation

@lemonadern
Copy link
Copy Markdown
Collaborator

@lemonadern lemonadern commented Oct 23, 2025

概要

uroborosql-fmt に linter を導入するための親 PR です。
関連する PR をこのブランチに積んでいき、対応が完了次第 main に合流させます。

Checklist

  • lint 実行基盤を追加
  • uroborosql-lint-cli を追加
  • ルール実装
    • no_distinct
    • no_union_distinct
    • too_large_in_list
    • no_not_in
    • no_wildcard_projection
    • missing_two_way_sample
    • no_function_on_column_in_join_or_where
  • ルールごとのテストを追加
  • lint config 対応( feat(lint): add config store and CLI support #235
    • uroborosql-lint 側の config 解決処理
    • uroborosql-lint-cli--config 対応
  • language server 対応
  • Node-API から language server を起動できるようにする
  • vscode-uroborosql-fmt 側で新しい language server 構成を利用できるようにする

補足

もともと作業していた #216 は変更が試行錯誤のうちに様々な変更が混ざった大きな差分になりました(lint config 対応・language server 対応・ Node-API エントリポイント整理 等)
そのため個別の変更に切り分けて PR を出す方針とします。

@ppputtyo
Copy link
Copy Markdown
Collaborator

ppputtyo commented Oct 31, 2025

現時点ではルールが数個しかないため変更不要ですが、1点高速化案です。

現状は全てのルールでループを回し、全てのノードに対してルールに対応するか判定しているため、 $O(Rules \times Nodes)$ の計算量になっていると思います。

以下のようにすることで計算量を $O(Nodes \times AvgRulesPerKind)$に削減することができると思います。(target_kindsが指定されているルールが多いほど高速になります。)

  1. 各ルールで以下のList、Map作成
    1. 全てのノードに対して実行するルールのList (target_kindsが指定されていないルールはここに格納)
    2. ノードの種別に対してどのルールを実行するかのkeyがノード種別、valueがルールのMap (target_kindsが指定されているルールはここに格納)
  2. nodesを1度だけ走査し、以下実行
    1. 1-iで作成したListを利用して、全てのノードに対して実行するルールを実行
    2. 1-iiで作成したMapを利用して、該当するルールを全て実行

Co-authored-by: Taishi Naka <lemonadern@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants