aboutsummaryrefslogtreecommitdiff
path: root/src/formatter/utils.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2025-08-30 14:29:50 -0400
committerBruce Hill <bruce@bruce-hill.com>2025-08-30 14:29:50 -0400
commitf2ad722780f96dc5fb7d93f536c7267741be3f6f (patch)
tree1cea1fd4c16bddd5a8a92794d0ebd3ee42b6cf1d /src/formatter/utils.c
parent9f17271a07f10f05e63e0064d8ab4a92267f5f66 (diff)
Fix line gaps
Diffstat (limited to 'src/formatter/utils.c')
-rw-r--r--src/formatter/utils.c36
1 files changed, 29 insertions, 7 deletions
diff --git a/src/formatter/utils.c b/src/formatter/utils.c
index 1f4e64d8..5619e6ce 100644
--- a/src/formatter/utils.c
+++ b/src/formatter/utils.c
@@ -38,24 +38,45 @@ bool range_has_comment(const char *start, const char *end, Table_t comments) {
return (comment.length >= 0);
}
-CONSTFUNC int suggested_blank_lines(ast_t *ast) {
- switch (ast->tag) {
+CONSTFUNC int suggested_blank_lines(ast_t *first, ast_t *second) {
+ if (second == NULL) return 0;
+
+ if (first->tag == Use && second->tag != Use) return 1;
+
+ switch (first->tag) {
+ case If:
+ case When:
+ case Repeat:
+ case While:
+ case For:
+ case Block:
+ case Defer:
+ case ConvertDef:
+ case FunctionDef:
+ case StructDef:
+ case EnumDef:
+ case LangDef:
+ case Extend: return 1;
+ default: break;
+ }
+
+ switch (second->tag) {
case If:
case When:
case Repeat:
case While:
case For:
case Block:
- case Defer: return 1;
- case Use: return 1;
+ case Defer:
case ConvertDef:
- case FunctionDef: return 1;
+ case FunctionDef:
case StructDef:
case EnumDef:
case LangDef:
- case Extend: return 2;
- default: return 0;
+ case Extend: return 1;
+ default: break;
}
+ return 0;
}
Text_t indent_code(Text_t code) {
@@ -73,6 +94,7 @@ CONSTFUNC ast_t *unwrap_block(ast_t *ast) {
while (ast->tag == Block && Match(ast, Block)->statements && Match(ast, Block)->statements->next == NULL) {
ast = Match(ast, Block)->statements->ast;
}
+ if (ast->tag == Block && Match(ast, Block)->statements == NULL) return NULL;
return ast;
}