Skip to content

Commit 2442cb5

Browse files
committed
자동 포멧팅 기능 개선
1 parent 56eb090 commit 2442cb5

7 files changed

Lines changed: 1166 additions & 136 deletions

File tree

change.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3808,3 +3808,51 @@ RETURNING과 시스템/애플리케이션 시간 구문까지 open/body/sibling/
38083808
| `cargo test` | 6,720 통과·232 ignored·실패 0, doc-test 실패 0 |
38093809
| `cargo clippy --locked --all-targets -- -D warnings -W clippy::perf -W clippy::complexity` | 통과, 경고 0 |
38103810
| `cargo fmt --all -- --check` / `git diff --check` | 통과 |
3811+
3812+
## 27-1. 생산 경로 하이라이팅 양방향 전수 감사
3813+
3814+
AS-IS: 하이라이터가 `AS` 다음 단어를 자체 상태로 별칭 추정하고, SQL editor의 별칭
3815+
수집기는 별도의 휴리스틱을 사용했다. 이중 판정 때문에 `GENERATED ALWAYS`, `AS CLOB`,
3816+
`STORE AS BASICFILE`, `FOR UPDATE`, CASE의 `END` 같은 문법 토큰이 별칭으로 오인될 수
3817+
있었다. 또한 기존 단위 테스트는 등록된 키워드와 오브젝트 종류별 예시는 검사했지만,
3818+
fixture 전체 단어·오브젝트·문자열/주석 영역을 한 보고서에서 양방향 감사하지 않았다.
3819+
3820+
TO-BE: `collect_local_alias_context`가 실제 별칭 선언 범위를 한 번 계산하고 최초 전체
3821+
렌더링, 증분 줄 재하이라이팅, visible semantic refresh가 같은 문맥을 공유하도록 생산
3822+
경로를 통합했다. 타입 변환, 생성 컬럼, XML/LOB storage, Oracle object type, CTE/window,
3823+
relation alias 문맥은 토큰 깊이와 절 소유자를 기준으로 구분한다. 하이라이터 내부의
3824+
`AS` 다음 단어 추정 상태는 제거했다.
3825+
3826+
`syntax_highlighting_sweep_all_files_generate_out_report`는 다음을 수행한다.
3827+
3828+
- Oracle/MySQL/MariaDB 61개 원본 fixture를 실제 줄별 상태 전파 경로로 렌더링한다.
3829+
- lexer가 코드로 판정한 모든 단어의 기대/실제 스타일을 비교한다.
3830+
- fixture DDL에서 table/view/materialized view/function/procedure/package/sequence/trigger/
3831+
event/type/index/synonym/schema를 수집해 생산 `HighlightData` 경로로 주입한다.
3832+
- 등록되지 않은 일반 단어가 keyword/function/object/column으로 잘못 칠해지는 경우도
3833+
실패시킨다.
3834+
- parser lexical span의 문자열·주석·인용 영역에 semantic highlight가 침범하는 경우도
3835+
실패시킨다.
3836+
- 파일별 `target/highlight-sweep/**.highlight.out`과 aggregate 보고서를 생성한다.
3837+
3838+
전수 감사에서 확인한 dialect 누락은 공용 카탈로그에 반영했다. Oracle PL/SQL cursor/
3839+
SQL 속성, GROUPING 문법, object/member built-in과 MySQL/MariaDB ARRAY/SRID, temporal,
3840+
application-time, vector index, ROWS EXAMINED, UUID v7 문법/함수가 포함된다.
3841+
3842+
| 하이라이팅 전수 감사 항목 | 결과 |
3843+
| --- | ---: |
3844+
| fixture / 코드 단어 | 61 / 70,087 |
3845+
| catalog 단어 / 정상 강조 / 문맥 식별자 | 37,892 / 37,377 / 515 |
3846+
| 오브젝트 단어 / 정상 강조 / 문맥 식별자 | 2,927 / 2,927 / 0 |
3847+
| 보호 lexical span / byte | 8,763 / 251,967 |
3848+
| 잘못 강조된 일반 단어 / 실패 | 0 / 0 |
3849+
3850+
## 27-2. 최종 품질 게이트
3851+
3852+
| 검증 | 결과 |
3853+
| --- | --- |
3854+
| `syntax_highlighting_sweep_all_files_generate_out_report` | 통과, 61개 파일·70,087단어·failure 0 |
3855+
| `formatting_sweep_all_files_generate_out_report` | 통과, 61개 파일·failure 0 |
3856+
| `cargo test --lib` | 6,575 통과·229 ignored·실패 0 |
3857+
| `cargo clippy --locked --all-targets -- -D warnings -W clippy::perf -W clippy::complexity` | 통과, 경고 0 |
3858+
| `cargo fmt --all -- --check` / `git diff --check` | 통과 |

src/sql_text.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ pub const ORACLE_SQL_KEYWORDS: &[&str] = &[
2121
"AFTER",
2222
"ALL",
2323
"ALTER",
24+
"ALWAYS",
2425
"ANALYZE",
2526
"AND",
2627
"ANTI",
@@ -57,6 +58,7 @@ pub const ORACLE_SQL_KEYWORDS: &[&str] = &[
5758
"BREAK",
5859
"BREAKS",
5960
"BULK",
61+
"BULK_EXCEPTIONS",
6062
"BY",
6163
"CACHE",
6264
"CALL",
@@ -96,6 +98,7 @@ pub const ORACLE_SQL_KEYWORDS: &[&str] = &[
9698
"CONNECT_BY_ISCYCLE",
9799
"CONNECT_BY_ISLEAF",
98100
"CONNECT_BY_ROOT",
101+
"CONSTANT",
99102
"CONSTRAINT",
100103
"CONSTRUCTOR",
101104
"CONTAINER",
@@ -105,6 +108,7 @@ pub const ORACLE_SQL_KEYWORDS: &[&str] = &[
105108
"COUNT",
106109
"CREATE",
107110
"CROSS",
111+
"CUBE",
108112
"CUME_DIST",
109113
"CURRENT",
110114
"CURRENT_DATE",
@@ -188,6 +192,7 @@ pub const ORACLE_SQL_KEYWORDS: &[&str] = &[
188192
"FORCE",
189193
"FOREIGN",
190194
"FORMAT",
195+
"FOUND",
191196
"FREEPOOLS",
192197
"FROM",
193198
"FULL",
@@ -231,6 +236,7 @@ pub const ORACLE_SQL_KEYWORDS: &[&str] = &[
231236
"IS",
232237
"ISOLATION",
233238
"ISOLATION_LEVEL",
239+
"ISOPEN",
234240
"ITERATE",
235241
"JAVA",
236242
"JOIN",
@@ -301,6 +307,7 @@ pub const ORACLE_SQL_KEYWORDS: &[&str] = &[
301307
"NCLOB",
302308
"NESTED",
303309
"NEVER",
310+
"NEW",
304311
"NEW_VALUE",
305312
"NEXT",
306313
"NEXTVAL",
@@ -340,6 +347,7 @@ pub const ORACLE_SQL_KEYWORDS: &[&str] = &[
340347
"NOSCALE",
341348
"NOSORT",
342349
"NOT",
350+
"NOTFOUND",
343351
"NOTHING",
344352
"NOVALIDATE",
345353
"NOWAIT",
@@ -354,6 +362,7 @@ pub const ORACLE_SQL_KEYWORDS: &[&str] = &[
354362
"OF",
355363
"OFF",
356364
"OFFSET",
365+
"OLD",
357366
"OMIT",
358367
"ON",
359368
"ONE",
@@ -459,9 +468,11 @@ pub const ORACLE_SQL_KEYWORDS: &[&str] = &[
459468
"ROLE",
460469
"ROLLBACK",
461470
"ROW",
471+
"ROWCOUNT",
462472
"ROWID",
463473
"ROWNUM",
464474
"ROWS",
475+
"ROWTYPE",
465476
"ROW_NUMBER",
466477
"RULES",
467478
"SAMPLE",
@@ -483,6 +494,7 @@ pub const ORACLE_SQL_KEYWORDS: &[&str] = &[
483494
"SESSION",
484495
"SESSIONTIMEZONE",
485496
"SET",
497+
"SETS",
486498
"SETTINGS",
487499
"SHARE",
488500
"SHARING",
@@ -497,6 +509,7 @@ pub const ORACLE_SQL_KEYWORDS: &[&str] = &[
497509
"SOURCE",
498510
"SPECIFICATION",
499511
"SPOOL",
512+
"SQL",
500513
"SQLCODE",
501514
"SQLERRM",
502515
"SQLERROR",
@@ -571,6 +584,7 @@ pub const ORACLE_SQL_KEYWORDS: &[&str] = &[
571584
"VERIFY",
572585
"VERSIONS",
573586
"VIEW",
587+
"VIRTUAL",
574588
"VISIBLE",
575589
"WAIT",
576590
"WELLFORMED",
@@ -828,6 +842,7 @@ pub const MYSQL_SQL_KEYWORDS: &[&str] = &[
828842
"ALWAYS",
829843
"ANALYZE",
830844
"AND",
845+
"ARRAY",
831846
"AS",
832847
"ASC",
833848
"ASENSITIVE",
@@ -871,6 +886,7 @@ pub const MYSQL_SQL_KEYWORDS: &[&str] = &[
871886
"CONSTRAINT",
872887
"CONTINUE",
873888
"CONVERT",
889+
"COSINE",
874890
"CREATE",
875891
"CROSS",
876892
"CURRENT",
@@ -880,6 +896,7 @@ pub const MYSQL_SQL_KEYWORDS: &[&str] = &[
880896
"CURRENT_TIMESTAMP",
881897
"CURRENT_USER",
882898
"CURSOR",
899+
"CYCLE",
883900
"DATA",
884901
"DATABASE",
885902
"DATABASES",
@@ -907,6 +924,7 @@ pub const MYSQL_SQL_KEYWORDS: &[&str] = &[
907924
"DIAGNOSTICS",
908925
"DISABLE",
909926
"DISCARD",
927+
"DISTANCE",
910928
"DISTINCT",
911929
"DISTINCTROW",
912930
"DIV",
@@ -930,10 +948,13 @@ pub const MYSQL_SQL_KEYWORDS: &[&str] = &[
930948
"ENGINES",
931949
"ENGINE_ATTRIBUTE",
932950
"ENUM",
951+
"ERROR",
933952
"ERRORS",
934953
"ESCAPED",
954+
"EUCLIDEAN",
935955
"EVENT",
936956
"EVENTS",
957+
"EXAMINED",
937958
"EXCEPT",
938959
"EXCLUDE",
939960
"EXECUTE",
@@ -992,10 +1013,13 @@ pub const MYSQL_SQL_KEYWORDS: &[&str] = &[
9921013
"IGNORE",
9931014
"IGNORE_DOMAIN_IDS",
9941015
"IGNORE_SERVER_IDS",
1016+
"IMMEDIATE",
9951017
"IMPORT",
9961018
"IN",
1019+
"INCREMENT",
9971020
"INDEX",
9981021
"INDEXES",
1022+
"INET6",
9991023
"INFILE",
10001024
"INITIAL_SIZE",
10011025
"INNER",
@@ -1029,6 +1053,7 @@ pub const MYSQL_SQL_KEYWORDS: &[&str] = &[
10291053
"LEADING",
10301054
"LEAVE",
10311055
"LEFT",
1056+
"LESS",
10321057
"LEVEL",
10331058
"LIKE",
10341059
"LIMIT",
@@ -1058,14 +1083,17 @@ pub const MYSQL_SQL_KEYWORDS: &[&str] = &[
10581083
"MEDIUMBLOB",
10591084
"MEDIUMINT",
10601085
"MEDIUMTEXT",
1086+
"MEMBER",
10611087
"MEMORY",
10621088
"MERGE",
10631089
"MESSAGE_TEXT",
10641090
"MICROSECOND",
10651091
"MIDDLEINT",
1092+
"MINUS",
10661093
"MINUTE",
10671094
"MINUTE_MICROSECOND",
10681095
"MINUTE_SECOND",
1096+
"MINVALUE",
10691097
"MIN_ROWS",
10701098
"MOD",
10711099
"MODE",
@@ -1097,6 +1125,7 @@ pub const MYSQL_SQL_KEYWORDS: &[&str] = &[
10971125
"NULLS",
10981126
"NUMERIC",
10991127
"NVARCHAR",
1128+
"OF",
11001129
"OFFSET",
11011130
"OLD",
11021131
"ON",
@@ -1113,6 +1142,7 @@ pub const MYSQL_SQL_KEYWORDS: &[&str] = &[
11131142
"OUTER",
11141143
"OUTFILE",
11151144
"OVER",
1145+
"OVERLAPS",
11161146
"PACK_KEYS",
11171147
"PAGE_CHECKSUM",
11181148
"PARSER",
@@ -1122,13 +1152,16 @@ pub const MYSQL_SQL_KEYWORDS: &[&str] = &[
11221152
"PARTITIONS",
11231153
"PASSWORD",
11241154
"PATH",
1155+
"PERIOD",
11251156
"PERSIST",
1157+
"PERSISTENT",
11261158
"PLUGIN",
11271159
"PLUGINS",
11281160
"PLUGIN_DIR",
11291161
"POINT",
11301162
"POLYGON",
11311163
"PORT",
1164+
"PORTION",
11321165
"PRECEDING",
11331166
"PRECISION",
11341167
"PREPARE",
@@ -1194,6 +1227,7 @@ pub const MYSQL_SQL_KEYWORDS: &[&str] = &[
11941227
"SELECT",
11951228
"SENSITIVE",
11961229
"SEPARATOR",
1230+
"SEQUENCE",
11971231
"SERIAL",
11981232
"SERIALIZABLE",
11991233
"SERVER",
@@ -1256,6 +1290,7 @@ pub const MYSQL_SQL_KEYWORDS: &[&str] = &[
12561290
"SQL_NO_CACHE",
12571291
"SQL_SMALL_RESULT",
12581292
"SQL_THREAD",
1293+
"SRID",
12591294
"SSL",
12601295
"START",
12611296
"STARTING",
@@ -1272,6 +1307,7 @@ pub const MYSQL_SQL_KEYWORDS: &[&str] = &[
12721307
"SUBPARTITIONS",
12731308
"SUPER",
12741309
"SYSTEM",
1310+
"SYSTEM_TIME",
12751311
"TABLE",
12761312
"TABLES",
12771313
"TABLESAMPLE",
@@ -1328,6 +1364,7 @@ pub const MYSQL_SQL_KEYWORDS: &[&str] = &[
13281364
"VARYING",
13291365
"VCPU",
13301366
"VECTOR",
1367+
"VERSIONING",
13311368
"VIEW",
13321369
"VIRTUAL",
13331370
"VISIBLE",
@@ -1339,6 +1376,8 @@ pub const MYSQL_SQL_KEYWORDS: &[&str] = &[
13391376
"WHILE",
13401377
"WINDOW",
13411378
"WITH",
1379+
"WITHIN",
1380+
"WITHOUT",
13421381
"WORK",
13431382
"WRITE",
13441383
"XA",

src/ui/intellisense.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ pub const ORACLE_FUNCTIONS: &[&str] = &[
5353
"CUME_DIST",
5454
"CURRENT_DATE",
5555
"CURRENT_TIMESTAMP",
56+
"CV",
5657
"DBTIMEZONE",
5758
"DECODE",
5859
"DECOMPOSE",
@@ -113,6 +114,7 @@ pub const ORACLE_FUNCTIONS: &[&str] = &[
113114
"LPAD",
114115
"LTRIM",
115116
"MAKE_REF",
117+
"MATCH_NUMBER",
116118
"MAX",
117119
"MEDIAN",
118120
"MIN",
@@ -132,6 +134,7 @@ pub const ORACLE_FUNCTIONS: &[&str] = &[
132134
"NUMTOYMINTERVAL",
133135
"NVL",
134136
"NVL2",
137+
"ODCINUMBERLIST",
135138
"ORA_HASH",
136139
"ORA_INVOKING_USER",
137140
"ORA_INVOKING_USERID",
@@ -145,6 +148,7 @@ pub const ORACLE_FUNCTIONS: &[&str] = &[
145148
"PREDICTION_DETAILS",
146149
"PREDICTION_PROBABILITY",
147150
"PREDICTION_SET",
151+
"PREV",
148152
"RANK",
149153
"RATIO_TO_REPORT",
150154
"RAWTOHEX",
@@ -626,7 +630,7 @@ pub const MYSQL_FUNCTIONS: &[&str] = &[
626630
/// MariaDB built-ins that are not available in MySQL. Keep this separate from
627631
/// the shared MySQL-family catalog so dialect-specific completion never offers
628632
/// executable-looking functions to the wrong server.
629-
pub const MARIADB_FUNCTIONS: &[&str] = &["COLUMN_CHECK", "COLUMN_JSON", "JSON_EXISTS"];
633+
pub const MARIADB_FUNCTIONS: &[&str] = &["COLUMN_CHECK", "COLUMN_JSON", "JSON_EXISTS", "UUID_V7"];
630634

631635
pub static MYSQL_FUNCTIONS_SET: once_cell::sync::Lazy<std::collections::HashSet<&'static str>> =
632636
once_cell::sync::Lazy::new(|| MYSQL_FUNCTIONS.iter().copied().collect());

0 commit comments

Comments
 (0)