move hide behind @ and specify with :

This commit is contained in:
2026-08-10 22:45:41 +02:00
parent 5244bfbf1b
commit ba6052eef3
27 changed files with 162 additions and 149 deletions
+20 -14
View File
@@ -65,20 +65,21 @@ collect_local_names :: proc(parser: ^Parser) {
depth += 1
case .Right_Brace:
depth = max(depth-1, 0)
case .Keyword_Hide:
if depth != 0 {
case .At:
if depth != 0 || index+1 >= len(parser.tokens.items) ||
parser.tokens.items[index+1].kind != .Identifier ||
token_text(parser, parser.tokens.items[index+1]) != "hide" {
continue
}
visibility := types.Visibility.Package
name_index := index+1
name_index := index+2
if name_index < len(parser.tokens.items) &&
parser.tokens.items[name_index].kind == .Left_Paren {
if index+4 >= len(parser.tokens.items) ||
parser.tokens.items[index+2].kind != .Identifier ||
parser.tokens.items[index+3].kind != .Right_Paren {
parser.tokens.items[name_index].kind == .Colon {
if index+3 >= len(parser.tokens.items) ||
parser.tokens.items[index+3].kind != .Identifier {
continue
}
scope := token_text(parser, parser.tokens.items[index+2])
scope := token_text(parser, parser.tokens.items[index+3])
if scope == "file" {
visibility = .File
} else if scope != "package" {
@@ -86,6 +87,10 @@ collect_local_names :: proc(parser: ^Parser) {
}
name_index = index+4
}
for name_index < len(parser.tokens.items) &&
parser.tokens.items[name_index].kind == .Newline {
name_index += 1
}
if name_index < len(parser.tokens.items) &&
parser.tokens.items[name_index].kind == .Identifier {
append(&parser.local_names, Local_Name{
@@ -3324,12 +3329,15 @@ parse_test :: proc(parser: ^Parser, name: token.Token) {
parse_top_level :: proc(parser: ^Parser) {
modifier := current(parser)
hide_name := peek(parser)
visibility := types.Visibility.Public
has_modifier := modifier.kind == .Keyword_Hide
has_modifier := modifier.kind == .At && hide_name.kind == .Identifier &&
token_text(parser, hide_name) == "hide"
if has_modifier {
visibility = .Package
advance(parser)
if _, scoped := allow(parser, .Left_Paren); scoped {
advance(parser)
if _, scoped := allow(parser, .Colon); scoped {
if current(parser).kind == .Identifier {
scope := advance(parser)
scope_text := token_text(parser, scope)
@@ -3344,12 +3352,10 @@ parse_top_level :: proc(parser: ^Parser) {
)
}
} else {
source.add(parser.diagnostics, current(parser).span, "expected 'package' or 'file' in hide scope")
}
if _, closed := allow(parser, .Right_Paren); !closed {
source.add(parser.diagnostics, current(parser).span, "expected ')' after hide scope")
source.add(parser.diagnostics, current(parser).span, "expected 'package' or 'file' after '@hide:'")
}
}
skip_newlines(parser)
}
if current(parser).kind == .Keyword_Test && peek(parser).kind == .Keyword_Import {
if has_modifier {