aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-05-13 13:26:47 +0100
committergingerBill <bill@gingerbill.org>2024-05-13 13:26:47 +0100
commit215ef3d985724fa0ef7092fa8f672cc502db87be (patch)
tree2c18dccdcfbe0ad391a0858ed5c3342d55f6154d
parent8808e5584a4a69e401010cbfe8800e0b2a430941 (diff)
Make `core:runtime` etc a warning, and an error with `-vet`
-rw-r--r--src/build_settings.cpp5
-rw-r--r--src/parser.cpp25
2 files changed, 27 insertions, 3 deletions
diff --git a/src/build_settings.cpp b/src/build_settings.cpp
index c6ef33af2..ec7d03a84 100644
--- a/src/build_settings.cpp
+++ b/src/build_settings.cpp
@@ -730,10 +730,11 @@ enum VetFlags : u64 {
VetFlag_Semicolon = 1u<<4,
VetFlag_UnusedVariables = 1u<<5,
VetFlag_UnusedImports = 1u<<6,
+ VetFlag_Deprecated = 1u<<7,
VetFlag_Unused = VetFlag_UnusedVariables|VetFlag_UnusedImports,
- VetFlag_All = VetFlag_Unused|VetFlag_Shadowing|VetFlag_UsingStmt,
+ VetFlag_All = VetFlag_Unused|VetFlag_Shadowing|VetFlag_UsingStmt|VetFlag_Deprecated,
VetFlag_Using = VetFlag_UsingStmt|VetFlag_UsingParam,
};
@@ -755,6 +756,8 @@ u64 get_vet_flag_from_name(String const &name) {
return VetFlag_Style;
} else if (name == "semicolon") {
return VetFlag_Semicolon;
+ } else if (name == "deprecated") {
+ return VetFlag_Deprecated;
}
return VetFlag_NONE;
}
diff --git a/src/parser.cpp b/src/parser.cpp
index ad962f53e..66e175765 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -11,6 +11,9 @@ gb_internal bool ast_file_vet_style(AstFile *f) {
return (ast_file_vet_flags(f) & VetFlag_Style) != 0;
}
+gb_internal bool ast_file_vet_deprecated(AstFile *f) {
+ return (ast_file_vet_flags(f) & VetFlag_Deprecated) != 0;
+}
gb_internal bool file_allow_newline(AstFile *f) {
bool is_strict = build_context.strict_style || ast_file_vet_style(f);
@@ -5694,8 +5697,26 @@ gb_internal bool determine_path_from_string(BlockingMutex *file_mutex, Ast *node
if (collection_name.len > 0) {
// NOTE(bill): `base:runtime` == `core:runtime`
- if (collection_name == "core" && string_starts_with(file_str, str_lit("runtime"))) {
- collection_name = str_lit("base");
+ if (collection_name == "core") {
+ bool replace_with_base = false;
+ if (string_starts_with(file_str, str_lit("runtime"))) {
+ replace_with_base = true;
+ } else if (string_starts_with(file_str, str_lit("intrinsics"))) {
+ replace_with_base = true;
+ } if (string_starts_with(file_str, str_lit("builtin"))) {
+ replace_with_base = true;
+ }
+
+ if (replace_with_base) {
+ collection_name = str_lit("base");
+ }
+ if (replace_with_base) {
+ if (ast_file_vet_deprecated(node->file())) {
+ syntax_error(node, "import \"core:%.*s\" has been deprecated in favour of \"base:%.*s\"", LIT(file_str), LIT(file_str));
+ } else {
+ syntax_warning(ast_token(node), "import \"core:%.*s\" has been deprecated in favour of \"base:%.*s\"", LIT(file_str), LIT(file_str));
+ }
+ }
}
if (collection_name == "system") {