Browse Source

Add `-strict-style-init-only`

gingerBill 4 years ago
parent
commit
e65e0b5db2
3 changed files with 18 additions and 1 deletions
  1. 1 1
      src/build_settings.cpp
  2. 15 0
      src/main.cpp
  3. 2 0
      src/parser.cpp

+ 1 - 1
src/build_settings.cpp

@@ -206,7 +206,7 @@ struct BuildContext {
 	bool   disallow_do;
 
 	bool   strict_style;
-
+	bool   strict_style_init_only;
 
 	bool   ignore_warnings;
 	bool   warnings_as_errors;

+ 15 - 0
src/main.cpp

@@ -635,6 +635,7 @@ enum BuildFlagKind {
 	BuildFlag_DefaultToNilAllocator,
 	BuildFlag_InsertSemicolon,
 	BuildFlag_StrictStyle,
+	BuildFlag_StrictStyleInitOnly,
 
 	BuildFlag_Compact,
 	BuildFlag_GlobalDefinitions,
@@ -762,6 +763,7 @@ bool parse_build_flags(Array<String> args) {
 	add_flag(&build_flags, BuildFlag_DefaultToNilAllocator, str_lit("default-to-nil-allocator"), BuildFlagParam_None, Command__does_check);
 	add_flag(&build_flags, BuildFlag_InsertSemicolon,       str_lit("insert-semicolon"),         BuildFlagParam_None, Command__does_check);
 	add_flag(&build_flags, BuildFlag_StrictStyle,           str_lit("strict-style"),             BuildFlagParam_None, Command__does_check);
+	add_flag(&build_flags, BuildFlag_StrictStyleInitOnly,   str_lit("strict-style-init-only"),   BuildFlagParam_None, Command__does_check);
 	add_flag(&build_flags, BuildFlag_Compact,           str_lit("compact"),            BuildFlagParam_None, Command_query);
 	add_flag(&build_flags, BuildFlag_GlobalDefinitions, str_lit("global-definitions"), BuildFlagParam_None, Command_query);
 	add_flag(&build_flags, BuildFlag_GoToDefinitions,   str_lit("go-to-definitions"),  BuildFlagParam_None, Command_query);
@@ -1312,8 +1314,17 @@ bool parse_build_flags(Array<String> args) {
 							break;
 
 						case BuildFlag_StrictStyle:
+							if (build_context.strict_style_init_only) {
+								gb_printf_err("-strict-style and -strict-style-init-only cannot be used together\n");
+							}
 							build_context.strict_style = true;
 							break;
+						case BuildFlag_StrictStyleInitOnly:
+							if (build_context.strict_style) {
+								gb_printf_err("-strict-style and -strict-style-init-only cannot be used together\n");
+							}
+							build_context.strict_style_init_only = true;
+							break;
 
 
 						case BuildFlag_Compact:
@@ -1873,6 +1884,10 @@ void print_show_help(String const arg0, String const &command) {
 		print_usage_line(1, "-strict-style");
 		print_usage_line(2, "Errs on unneeded tokens, such as unneeded semicolons");
 		print_usage_line(0, "");
+		
+		print_usage_line(1, "-strict-style-init-only");
+		print_usage_line(2, "Errs on unneeded tokens, such as unneeded semicolons, only on the initial project");
+		print_usage_line(0, "");
 
 		print_usage_line(1, "-ignore-warnings");
 		print_usage_line(2, "Ignores warning messages");

+ 2 - 0
src/parser.cpp

@@ -1516,6 +1516,8 @@ void assign_removal_flag_to_semicolon(AstFile *f) {
 		if (ok) {
 			if (build_context.strict_style) {
 				syntax_error(*prev_token, "Found unneeded semicolon");
+			} else if (build_context.strict_style_init_only && f->pkg->kind == Package_Init) {
+				syntax_error(*prev_token, "Found unneeded semicolon");
 			}
 			prev_token->flags |= TokenFlag_Remove;
 		}