Skip to content

Commit 58f6c2f

Browse files
authored
Merge pull request #203 from mrbenevolentcanard/mrbenevolentcanard/issue202
Format for 0 before decimal
2 parents d6d1c4c + ba1be79 commit 58f6c2f

File tree

3 files changed

+32
-2
lines changed

3 files changed

+32
-2
lines changed

CodeFormatCore/include/CodeFormatCore/Config/LuaStyle.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@ class LuaStyle {
117117
// [Indent]
118118

119119
/*
120-
* if语句的条件可以无延续行缩进
121-
*/
120+
* if语句的条件可以无延续行缩进
121+
*/
122122
bool never_indent_before_if_condition = false;
123123

124124
bool never_indent_comment_on_if_branch = false;
@@ -168,4 +168,7 @@ class LuaStyle {
168168
bool leading_comma_style = false;
169169

170170
EndStmtWithSemicolon end_statement_with_semicolon = EndStmtWithSemicolon::Keep;
171+
172+
// [preference] Remove leading zero in floats between 0 and 1 (e.g., 0.5 -> .5)
173+
bool remove_leading_zero_in_float = false;
171174
};

CodeFormatCore/src/Config/LuaStyle.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,4 +409,7 @@ void LuaStyle::Parse(std::map<std::string, std::string, std::less<>> &configMap)
409409
end_statement_with_semicolon = EndStmtWithSemicolon::Never;
410410
}
411411
}
412+
413+
// Custom: remove_leading_zero_in_float
414+
BOOL_OPTION(remove_leading_zero_in_float)
412415
}

CodeFormatCore/src/Format/FormatBuilder.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,30 @@ void FormatBuilder::WriteSyntaxNode(LuaSyntaxNode &syntaxNode, const LuaSyntaxTr
3434
WriteText(text);
3535
break;
3636
}
37+
case TK_NUMBER: {
38+
// Remove leading zero in floats between 0 and 1 if enabled
39+
const auto &style = _state.GetStyle();
40+
if (style.remove_leading_zero_in_float) {
41+
// Handle positive and negative numbers
42+
if (text.size() > 1 && text[0] == '0' && text[1] == '.') {
43+
// 0.xxx -> .xxx
44+
_state.CurrentWidth() += utf8::Utf8nLen(text.data() + 1, text.size() - 1);
45+
_formattedText.append(text.substr(1));
46+
break;
47+
} else if (text.size() > 2 && text[0] == '-' && text[1] == '0' && text[2] == '.') {
48+
// -0.xxx -> -.xxx
49+
_state.CurrentWidth() += utf8::Utf8nLen(text.data(), 1); // '-'
50+
_state.CurrentWidth() += utf8::Utf8nLen(text.data() + 2, text.size() - 2);
51+
_formattedText.push_back('-');
52+
_formattedText.append(text.substr(2));
53+
break;
54+
}
55+
}
56+
// Default behavior
57+
_state.CurrentWidth() += syntaxNode.GetUtf8Length(t);
58+
_formattedText.append(text);
59+
break;
60+
}
3761
default: {
3862
_state.CurrentWidth() += syntaxNode.GetUtf8Length(t);
3963
_formattedText.append(text);

0 commit comments

Comments
 (0)