Browse Source

docs(sql): sql_style 移项目根并重订 SQL 风格

tianyu.chu 2 tuần trước cách đây
mục cha
commit
35f6dfb10b
3 tập tin đã thay đổi với 147 bổ sung48 xóa
  1. 106 8
      kb/30-开发规范.md
  2. 1 0
      kb/92-重构进度.md
  3. 40 40
      sql_style.xml

+ 106 - 8
kb/30-开发规范.md

@@ -81,31 +81,129 @@ flowchart TD
 
 #### 3.2.1 IDE SQL 格式化配置
 
-`conf/sql_style.xml` 是 **JetBrains 系 IDE(PyCharm / DataGrip / IntelliJ)的 SQL Code Style 导出文件**,团队统一从此文件导入,避免每人格式化后 diff 里一堆空白噪音。
+`sql_style.xml`(项目根目录)是 **JetBrains 系 IDE(PyCharm / DataGrip / IntelliJ)的 SQL Code Style 导出文件**,团队统一从此文件导入,避免每人格式化后 diff 里一堆空白噪音。
 
 **导入方式**(PyCharm 为例):
 
 1. `File` → `Settings` → `Editor` → `Code Style` → `SQL`
 2. 右上角齿轮图标 → `Import Scheme` → `IntelliJ IDEA code style XML`
-3. 选择 `conf/sql_style.xml` → 确认覆盖当前 scheme
+3. 选择 `sql_style.xml` → 确认覆盖当前 scheme
 4. 应用后,`Ctrl+Alt+L` 触发格式化即按此风格
 
 **关键风格约定**(所有 SQL 方言统一生效):
 
 | 配置项 | 值 | 说明 |
 |--------|----|------|
-| `KEYWORD_CASE` | 0 | 关键字不强制大小写(保留作者原写法) |
-| `TYPE_CASE` | 3 | 类型名小写 |
+| `KEYWORD_CASE` | 2 | 关键字强制大写(`SELECT` / `FROM` / `WHERE` / `JOIN` 等) |
+| `TYPE_CASE` | 2 | 类型名强制大写(`STRING` / `BIGINT` / `DECIMAL` 等) |
 | `SELECT_EL_WRAP` / `FROM_EL_WRAP` | 2 | SELECT 字段 / FROM 表每个独占一行 |
 | `CORTEGE_COMMA_1ST` | true | **逗号前置**(`, col` 而不是 `col,`),减少增删行的 diff 噪音 |
 | `SELECT_USE_AS_WORD` | 1 | 别名写 `AS xxx`,不省略 |
-| `SELECT_ALIGN_AS` | **false** | **不对齐 AS 关键字**(见下方说明) |
-| `FROM_PLACE_ON` / `FROM_INDENT_JOIN` | 10 / false | JOIN 换行、不额外缩进 |
-| `INSERT_INTO_NL` | 1 / 2 | INSERT INTO 换行 |
+| `SELECT_ALIGN_AS` | **false** | **不对齐 AS 关键字**(见 §3.2.3) |
+| `FROM_PLACE_ON` / `FROM_INDENT_JOIN` | 10 / true | JOIN 换行、相对 FROM 缩进一级 |
+| `INSERT_INTO_NL` | 2 | INSERT 强制换行(表名 / PARTITION / SELECT 各独占一行) |
 | `EXPR_CASE_END` | 1 | CASE / END 换行 |
 | `CONTINUATION_INDENT_SIZE` | 4 | 续行缩进 4 空格 |
 
-#### 3.2.2 为什么不对齐 AS
+> **XML 仅覆盖把握确定的 option**。§3.2.2 的换行规则(WHERE/HAVING 条件、CASE 分支、CTE、UNION、`OVER()`、分号等)若 XML 未完整覆盖,以 §3.2.2 文字规则为准。开发者自行在 IDEA GUI 里配齐后 `Export Scheme` 覆盖 `sql_style.xml`。
+
+#### 3.2.2 换行与缩进规则
+
+XML 未穷举的格式约定,以本节为准。示例均以 Hive / Spark SQL 写法呈现。
+
+**WHERE / HAVING 条件换行**
+
+按逻辑单元分行,`AND` / `OR` 置于行首并缩进一级(与 SELECT 字段逗号前置一致):
+
+```sql
+WHERE dt = '${bizdate}'
+  AND is_deleted = 0
+  AND pay_amt > 0
+```
+
+**CASE 表达式**
+
+`WHEN` / `THEN` / `ELSE` / `END` 各自独立换行,`WHEN` / `ELSE` 缩进一级于 `CASE`,`END` 回到 `CASE` 同列:
+
+```sql
+CASE
+    WHEN status = 'paid'   THEN amt
+    WHEN status = 'refund' THEN -amt
+    ELSE 0
+END
+```
+
+**JOIN / ON**
+
+`JOIN` 关键字相对 `FROM` 缩进一级,`ON` 子句相对 `JOIN` 再缩进一级:
+
+```sql
+FROM fact_order o
+    LEFT JOIN dim_user u
+        ON o.user_id = u.user_id
+    LEFT JOIN dim_shop s
+        ON o.shop_id = s.shop_id
+```
+
+**CTE(WITH 子句)**
+
+多个 CTE 之间空一行,提高可分辨度:
+
+```sql
+WITH base AS (
+    SELECT ...
+)
+
+   , agg AS (
+    SELECT ...
+)
+
+SELECT ...
+FROM   agg
+```
+
+**UNION / UNION ALL**
+
+`UNION` / `UNION ALL` 关键字前后各空一行:
+
+```sql
+SELECT ... FROM a
+
+UNION ALL
+
+SELECT ... FROM b
+```
+
+**窗函数 `OVER()`**
+
+`PARTITION BY` / `ORDER BY` / 帧子句各独占一行:
+
+```sql
+ROW_NUMBER() OVER (
+    PARTITION BY user_id
+    ORDER BY pay_time DESC
+)
+```
+
+**INSERT OVERWRITE**
+
+表名 / `PARTITION` / `SELECT` 各独占一行(业界 Hive / Spark 主流写法):
+
+```sql
+INSERT OVERWRITE TABLE trd.dwd_trd_order_di
+PARTITION (dt = '${bizdate}')
+SELECT
+    col_a
+  , col_b
+  , ...
+FROM ...
+```
+
+**分号**
+
+每条语句末尾分号独占一行(对应 `NEW_LINE_AROUND_SEMICOLON=true`)。
+
+#### 3.2.3 为什么不对齐 AS
 
 字段别名**不对齐** AS 关键字是刻意的,理由:
 

+ 1 - 0
kb/92-重构进度.md

@@ -188,3 +188,4 @@
 | 2026-04-21 | **聚簇 A.1 环境变量外配到 `conf/env.sh`(bash + Python 单源)**:新建 `conf/env.sh` 统一 5 vars —— `RELEASE_USER="bigdata"`(替换 `"alvis"`)/ `RELEASE_ROOT_DIR="/home/bigdata/release"` / `PYTHON3_PATH` / `DATAX_HOME`(保持原有 `${DATAX_HOME:-/opt/datax}` 条件赋值)/ `LOG_ROOT_DIR="${HOME}/log"`。Python 侧新建 `dw_base/utils/env_loader.bootstrap_env()` 通过 `subprocess.run(['bash', '-c', '. env.sh && env -0'])` 让 bash 自己解析 env.sh,再 `os.environ.setdefault(...)` 注入(避免重写一套解析器导致 bash/py 双解析漂移;setdefault 允许 shell 侧已 export 的值优先)。`dw_base/__init__.py` 顶部加 `bootstrap_env()` 调用 + 读 `os.environ['RELEASE_USER' / 'RELEASE_ROOT_DIR' / 'LOG_ROOT_DIR']`,删 `/opt/data/log` vs `${HOME}/data/log` 的 whoami 分流(对齐 kb/90 §7.2.1 的单值决策)。`bin/common/init.sh` 顶部加 `. conf/env.sh` + 删对应硬编码变量 + 删 whoami 分流 + 删 `export LOG_ROOT_DIR / PYTHON3_PATH / RELEASE_ROOT_DIR / DATAX_HOME`(env.sh 已 export);`bin/publish.sh` 加 `. conf/env.sh` + 删 L15 `RELEASE_ROOT_DIR="/home/alvis/release"` 硬编码。联动 kb/90 §2.1 删 5 行已完成硬编码(DATAX_HOME / PYTHON3_PATH / RELEASE_USER / RELEASE_ROOT_DIR / LOG_ROOT_DIR)+ §2.2 config 结构删 `env.py`(单源不做双份)+ §7.2.1 大幅瘦身(去掉现状/为什么/代码改动三段,仅保留日志路径 `{module}/{dt}/{file}.log` 约定)+ 本文阶段 2 checklist 4 处 [x] | — |
 | 2026-04-21 | **`dw_base/common/__init__.py` 撤销删除(反转先前空壳判断)**:早先 `ls` 只看到 `__init__.py` 0 字节就判定"空壳"、按 CLAUDE.md "空 __init__.py + 无 README 下次清理直接删"规则挂入 A.1 执行清单第 9 项。`grep` 查证发现 `dw_base/common/` 下 `config_constants.py` / `container.py` / `template_constants.py` 分别被 `bin/spark-sql-starter.py` / `bin/datax-job-config-generator.py` / `dw_base/utils/log_utils.py` / `dw_base/datax/plugins/reader/mysql_reader.py` import,`__init__.py` 0 字节是 Python 正常的 package 标识(`dw_base/__init__.py` 含 bootstrap 逻辑,保持 regular package 一致性优于切 namespace package)。结论:不删。教训:空壳判断必须 `ls` 整个目录 + grep 所有子模块引用,不能只看 `__init__.py` 字节数 | — |
 | 2026-04-21 | **删除 `bin/flume-control.sh`(194 行;事实不可用)**:脚本顶部 shebang 损坏(`ho#!/bin/bash`)+ 依赖已在 2026-04-20 删除的 `bin/wechat-work-alert.sh` + L64 `conf/flume/*.properties` 与 L162 `conf/flume/config/*.properties` 路径自相矛盾,实际已跑不起来。决定:整文件删 + Kafka→HDFS 接入通道的设计理念归档到 kb/90 §5.2 历史档案,按需重建时以该档为参考(不沿用老 `SKB_LITTLE_CUTE` / 手机号硬编码告警,重建时按 `conf/alerter.ini` 外配走) | — |
+| 2026-04-21 | **SQL 风格基线重订 + `sql_style.xml` 移项目根**:从 `conf/` 挪到项目根(IDE 配置不属于运行时 conf)。团队 SQL 写作基线从"保留原写法"切到强基线:关键字 / 类型强制大写;SELECT / FROM / ORDER BY / GROUP BY 字段一项一行;JOIN 相对 FROM 缩进一级、ON 子句再缩一级;CASE 的 WHEN / THEN / ELSE / END 各独立行;WHERE / HAVING 按逻辑单元分行、AND / OR 前导缩进;CTE 间空行;UNION / UNION ALL 前后空行;窗函数 `OVER()` 中 PARTITION BY / ORDER BY / 帧子句各独占一行;INSERT OVERWRITE / PARTITION / SELECT 三段独立行;语句末分号独占一行。XML 仅覆盖把握确定的 option(`KEYWORD_CASE=2` / `TYPE_CASE=2` / `INSERT_INTO_NL=2` / `FROM_INDENT_JOIN=true`);其余 option 名 JetBrains 非公开、跨版本可能漂移,由开发者在 IDEA GUI 配齐后 `Export Scheme` 覆盖 XML。kb/30 §3.2.1 关键风格表更新 + 新增 §3.2.2 换行与缩进规则(九段带样例)+ 原 §3.2.2 不对齐 AS 顺延为 §3.2.3 | — |

+ 40 - 40
conf/sql_style.xml → sql_style.xml

@@ -1,11 +1,11 @@
 <code_scheme name="Default" version="173">
   <option name="LINE_SEPARATOR" value="&#xA;" />
   <DB2CodeStyleSettings version="2">
-    <option name="KEYWORD_CASE" value="0" />
-    <option name="TYPE_CASE" value="3" />
+    <option name="KEYWORD_CASE" value="2" />
+    <option name="TYPE_CASE" value="2" />
     <option name="QUERY_EL_COMMA" value="1" />
     <option name="QUERY_TRUE_INDENT" value="false" />
-    <option name="INSERT_INTO_NL" value="1" />
+    <option name="INSERT_INTO_NL" value="2" />
     <option name="INSERT_TABLE_EL_LINE" value="1" />
     <option name="SET_ALIGN_EQUAL_SIGN" value="false" />
     <option name="SELECT_EL_WRAP" value="2" />
@@ -15,7 +15,7 @@
     <option name="FROM_EL_WRAP" value="2" />
     <option name="FROM_EL_COMMA" value="1" />
     <option name="FROM_WRAP_ON" value="true" />
-    <option name="FROM_INDENT_JOIN" value="false" />
+    <option name="FROM_INDENT_JOIN" value="true" />
     <option name="FROM_ONLY_JOIN_INDENT" value="2" />
     <option name="FROM_PLACE_ON" value="10" />
     <option name="CORTEGE_COMMA_1ST" value="true" />
@@ -31,7 +31,7 @@
     <option name="SELECT_ALIGN_AS" value="false" />
     <option name="FROM_EL_COMMA" value="1" />
     <option name="FROM_WRAP_ON" value="true" />
-    <option name="FROM_INDENT_JOIN" value="false" />
+    <option name="FROM_INDENT_JOIN" value="true" />
     <option name="FROM_ONLY_JOIN_INDENT" value="2" />
     <option name="FROM_PLACE_ON" value="10" />
     <option name="ORDER_EL_WRAP" value="0" />
@@ -42,11 +42,11 @@
     <option name="NEW_LINE_AROUND_SEMICOLON" value="true" />
   </DerbyCodeStyleSettings>
   <H2CodeStyleSettings version="2">
-    <option name="KEYWORD_CASE" value="0" />
-    <option name="TYPE_CASE" value="3" />
+    <option name="KEYWORD_CASE" value="2" />
+    <option name="TYPE_CASE" value="2" />
     <option name="QUERY_EL_COMMA" value="1" />
     <option name="QUERY_TRUE_INDENT" value="false" />
-    <option name="INSERT_INTO_NL" value="1" />
+    <option name="INSERT_INTO_NL" value="2" />
     <option name="INSERT_TABLE_EL_LINE" value="1" />
     <option name="SET_ALIGN_EQUAL_SIGN" value="false" />
     <option name="SELECT_EL_WRAP" value="2" />
@@ -56,18 +56,18 @@
     <option name="FROM_EL_WRAP" value="2" />
     <option name="FROM_EL_COMMA" value="1" />
     <option name="FROM_WRAP_ON" value="true" />
-    <option name="FROM_INDENT_JOIN" value="false" />
+    <option name="FROM_INDENT_JOIN" value="true" />
     <option name="FROM_ONLY_JOIN_INDENT" value="2" />
     <option name="FROM_PLACE_ON" value="10" />
     <option name="CORTEGE_COMMA_1ST" value="true" />
     <option name="EXPR_CASE_END" value="1" />
   </H2CodeStyleSettings>
   <HSQLCodeStyleSettings version="2">
-    <option name="KEYWORD_CASE" value="0" />
-    <option name="TYPE_CASE" value="3" />
+    <option name="KEYWORD_CASE" value="2" />
+    <option name="TYPE_CASE" value="2" />
     <option name="QUERY_EL_COMMA" value="1" />
     <option name="QUERY_TRUE_INDENT" value="false" />
-    <option name="INSERT_INTO_NL" value="1" />
+    <option name="INSERT_INTO_NL" value="2" />
     <option name="INSERT_TABLE_EL_LINE" value="1" />
     <option name="SET_ALIGN_EQUAL_SIGN" value="false" />
     <option name="SELECT_EL_WRAP" value="2" />
@@ -77,18 +77,18 @@
     <option name="FROM_EL_WRAP" value="2" />
     <option name="FROM_EL_COMMA" value="1" />
     <option name="FROM_WRAP_ON" value="true" />
-    <option name="FROM_INDENT_JOIN" value="false" />
+    <option name="FROM_INDENT_JOIN" value="true" />
     <option name="FROM_ONLY_JOIN_INDENT" value="2" />
     <option name="FROM_PLACE_ON" value="10" />
     <option name="CORTEGE_COMMA_1ST" value="true" />
     <option name="EXPR_CASE_END" value="1" />
   </HSQLCodeStyleSettings>
   <MSSQLCodeStyleSettings version="2">
-    <option name="KEYWORD_CASE" value="0" />
-    <option name="TYPE_CASE" value="3" />
+    <option name="KEYWORD_CASE" value="2" />
+    <option name="TYPE_CASE" value="2" />
     <option name="QUERY_EL_COMMA" value="1" />
     <option name="QUERY_TRUE_INDENT" value="false" />
-    <option name="INSERT_INTO_NL" value="1" />
+    <option name="INSERT_INTO_NL" value="2" />
     <option name="INSERT_TABLE_EL_LINE" value="1" />
     <option name="SET_ALIGN_EQUAL_SIGN" value="false" />
     <option name="SELECT_EL_WRAP" value="2" />
@@ -98,18 +98,18 @@
     <option name="FROM_EL_WRAP" value="2" />
     <option name="FROM_EL_COMMA" value="1" />
     <option name="FROM_WRAP_ON" value="true" />
-    <option name="FROM_INDENT_JOIN" value="false" />
+    <option name="FROM_INDENT_JOIN" value="true" />
     <option name="FROM_ONLY_JOIN_INDENT" value="2" />
     <option name="FROM_PLACE_ON" value="10" />
     <option name="CORTEGE_COMMA_1ST" value="true" />
     <option name="EXPR_CASE_END" value="1" />
   </MSSQLCodeStyleSettings>
   <MySQLCodeStyleSettings version="2">
-    <option name="KEYWORD_CASE" value="0" />
-    <option name="TYPE_CASE" value="3" />
+    <option name="KEYWORD_CASE" value="2" />
+    <option name="TYPE_CASE" value="2" />
     <option name="QUERY_EL_COMMA" value="1" />
     <option name="QUERY_TRUE_INDENT" value="false" />
-    <option name="INSERT_INTO_NL" value="1" />
+    <option name="INSERT_INTO_NL" value="2" />
     <option name="INSERT_TABLE_EL_LINE" value="1" />
     <option name="SET_ALIGN_EQUAL_SIGN" value="false" />
     <option name="SELECT_EL_WRAP" value="2" />
@@ -119,18 +119,18 @@
     <option name="FROM_EL_WRAP" value="2" />
     <option name="FROM_EL_COMMA" value="1" />
     <option name="FROM_WRAP_ON" value="true" />
-    <option name="FROM_INDENT_JOIN" value="false" />
+    <option name="FROM_INDENT_JOIN" value="true" />
     <option name="FROM_ONLY_JOIN_INDENT" value="2" />
     <option name="FROM_PLACE_ON" value="10" />
     <option name="CORTEGE_COMMA_1ST" value="true" />
     <option name="EXPR_CASE_END" value="1" />
   </MySQLCodeStyleSettings>
   <OracleCodeStyleSettings version="2">
-    <option name="KEYWORD_CASE" value="0" />
-    <option name="TYPE_CASE" value="3" />
+    <option name="KEYWORD_CASE" value="2" />
+    <option name="TYPE_CASE" value="2" />
     <option name="QUERY_EL_COMMA" value="1" />
     <option name="QUERY_TRUE_INDENT" value="false" />
-    <option name="INSERT_INTO_NL" value="1" />
+    <option name="INSERT_INTO_NL" value="2" />
     <option name="INSERT_TABLE_EL_LINE" value="1" />
     <option name="SET_ALIGN_EQUAL_SIGN" value="false" />
     <option name="SELECT_EL_WRAP" value="2" />
@@ -140,18 +140,18 @@
     <option name="FROM_EL_WRAP" value="2" />
     <option name="FROM_EL_COMMA" value="1" />
     <option name="FROM_WRAP_ON" value="true" />
-    <option name="FROM_INDENT_JOIN" value="false" />
+    <option name="FROM_INDENT_JOIN" value="true" />
     <option name="FROM_ONLY_JOIN_INDENT" value="2" />
     <option name="FROM_PLACE_ON" value="10" />
     <option name="CORTEGE_COMMA_1ST" value="true" />
     <option name="EXPR_CASE_END" value="1" />
   </OracleCodeStyleSettings>
   <PostgresCodeStyleSettings version="2">
-    <option name="KEYWORD_CASE" value="0" />
-    <option name="TYPE_CASE" value="3" />
+    <option name="KEYWORD_CASE" value="2" />
+    <option name="TYPE_CASE" value="2" />
     <option name="QUERY_EL_COMMA" value="1" />
     <option name="QUERY_TRUE_INDENT" value="false" />
-    <option name="INSERT_INTO_NL" value="1" />
+    <option name="INSERT_INTO_NL" value="2" />
     <option name="INSERT_TABLE_EL_LINE" value="1" />
     <option name="SET_ALIGN_EQUAL_SIGN" value="false" />
     <option name="SELECT_EL_WRAP" value="2" />
@@ -161,18 +161,18 @@
     <option name="FROM_EL_WRAP" value="2" />
     <option name="FROM_EL_COMMA" value="1" />
     <option name="FROM_WRAP_ON" value="true" />
-    <option name="FROM_INDENT_JOIN" value="false" />
+    <option name="FROM_INDENT_JOIN" value="true" />
     <option name="FROM_ONLY_JOIN_INDENT" value="2" />
     <option name="FROM_PLACE_ON" value="10" />
     <option name="CORTEGE_COMMA_1ST" value="true" />
     <option name="EXPR_CASE_END" value="1" />
   </PostgresCodeStyleSettings>
   <SQLiteCodeStyleSettings version="2">
-    <option name="KEYWORD_CASE" value="0" />
-    <option name="TYPE_CASE" value="3" />
+    <option name="KEYWORD_CASE" value="2" />
+    <option name="TYPE_CASE" value="2" />
     <option name="QUERY_EL_COMMA" value="1" />
     <option name="QUERY_TRUE_INDENT" value="false" />
-    <option name="INSERT_INTO_NL" value="1" />
+    <option name="INSERT_INTO_NL" value="2" />
     <option name="INSERT_TABLE_EL_LINE" value="1" />
     <option name="SET_ALIGN_EQUAL_SIGN" value="false" />
     <option name="SELECT_EL_WRAP" value="2" />
@@ -182,15 +182,15 @@
     <option name="FROM_EL_WRAP" value="2" />
     <option name="FROM_EL_COMMA" value="1" />
     <option name="FROM_WRAP_ON" value="true" />
-    <option name="FROM_INDENT_JOIN" value="false" />
+    <option name="FROM_INDENT_JOIN" value="true" />
     <option name="FROM_ONLY_JOIN_INDENT" value="2" />
     <option name="FROM_PLACE_ON" value="10" />
     <option name="CORTEGE_COMMA_1ST" value="true" />
     <option name="EXPR_CASE_END" value="1" />
   </SQLiteCodeStyleSettings>
   <SqlCodeStyleSettings version="2">
-    <option name="KEYWORD_CASE" value="0" />
-    <option name="TYPE_CASE" value="3" />
+    <option name="KEYWORD_CASE" value="2" />
+    <option name="TYPE_CASE" value="2" />
     <option name="QUERY_EL_COMMA" value="1" />
     <option name="QUERY_TRUE_INDENT" value="false" />
     <option name="SUBQUERY_OPENING" value="1" />
@@ -207,18 +207,18 @@
     <option name="FROM_EL_WRAP" value="2" />
     <option name="FROM_EL_COMMA" value="1" />
     <option name="FROM_WRAP_ON" value="true" />
-    <option name="FROM_INDENT_JOIN" value="false" />
+    <option name="FROM_INDENT_JOIN" value="true" />
     <option name="FROM_ONLY_JOIN_INDENT" value="2" />
     <option name="FROM_PLACE_ON" value="10" />
     <option name="CORTEGE_COMMA_1ST" value="true" />
     <option name="EXPR_CASE_END" value="1" />
   </SqlCodeStyleSettings>
   <SybaseCodeStyleSettings version="2">
-    <option name="KEYWORD_CASE" value="0" />
-    <option name="TYPE_CASE" value="3" />
+    <option name="KEYWORD_CASE" value="2" />
+    <option name="TYPE_CASE" value="2" />
     <option name="QUERY_EL_COMMA" value="1" />
     <option name="QUERY_TRUE_INDENT" value="false" />
-    <option name="INSERT_INTO_NL" value="1" />
+    <option name="INSERT_INTO_NL" value="2" />
     <option name="INSERT_TABLE_EL_LINE" value="1" />
     <option name="SET_ALIGN_EQUAL_SIGN" value="false" />
     <option name="SELECT_EL_WRAP" value="2" />
@@ -228,7 +228,7 @@
     <option name="FROM_EL_WRAP" value="2" />
     <option name="FROM_EL_COMMA" value="1" />
     <option name="FROM_WRAP_ON" value="true" />
-    <option name="FROM_INDENT_JOIN" value="false" />
+    <option name="FROM_INDENT_JOIN" value="true" />
     <option name="FROM_ONLY_JOIN_INDENT" value="2" />
     <option name="FROM_PLACE_ON" value="10" />
     <option name="CORTEGE_COMMA_1ST" value="true" />