From c1cb9bd7bf1075afa4e8586f9b059eb5928bfc64 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Wed, 13 May 2026 05:48:59 +0200 Subject: [PATCH] Refactor publicity system --- mist-test/src/app.mist | 12 ++++++------ mist-test/src/event.mist | 2 +- mist-test/src/logger.mist | 14 +++++++------- mist-test/src/plugin.mist | 12 ++++++------ mist-test/src/task.mist | 12 ++++++------ parser/src/ast.rs | 1 + parser/src/grammar.pest | 20 ++++++++++---------- parser/src/lib.rs | 14 +++++++++----- src/codegen.rs | 6 +++--- 9 files changed, 49 insertions(+), 44 deletions(-) diff --git a/mist-test/src/app.mist b/mist-test/src/app.mist index 3ffd4ec..01fbd87 100644 --- a/mist-test/src/app.mist +++ b/mist-test/src/app.mist @@ -2,7 +2,7 @@ use ; use ; use ; -public class Application { +pub class Application { String name; Vec tasks; @@ -13,7 +13,7 @@ public class Application { bool running; i32 ticks; - public constructor(str* name) { + pub constructor(str* name) { self.name = name.to_string(); self.tasks = new Vec(); @@ -25,7 +25,7 @@ public class Application { self.ticks = 0; } - public void boot(self mut*) { + pub void boot(self mut*) { self.logger.info("booting application"); self.running = true; @@ -33,7 +33,7 @@ public class Application { self.emit(event::Event::Startup); } - public void run(self mut*) { + pub void run(self mut*) { while(self.running) { self.tick(); @@ -55,7 +55,7 @@ public class Application { println!("tasks: {}", self.tasks.len()); } - public void shutdown(self mut*) { + pub void shutdown(self mut*) { self.emit(event::Event::Shutdown); self.logger.warning("shutdown"); @@ -63,7 +63,7 @@ public class Application { self.running = false; } - public void register_plugin(self mut*, String name) { + pub void register_plugin(self mut*, String name) { self.plugins.push(name.clone()); self.emit(event::Event::PluginLoaded(name)); diff --git a/mist-test/src/event.mist b/mist-test/src/event.mist index 2c5cdb2..6340bf4 100644 --- a/mist-test/src/event.mist +++ b/mist-test/src/event.mist @@ -1,4 +1,4 @@ -public enum Event { +pub enum Event { Startup, Shutdown, TaskExecuted(String), diff --git a/mist-test/src/logger.mist b/mist-test/src/logger.mist index 788c7bb..483159e 100644 --- a/mist-test/src/logger.mist +++ b/mist-test/src/logger.mist @@ -1,10 +1,10 @@ use ; -public trait TestLogging: fmt::Display { +pub trait TestLogging: fmt::Display { String get(); } -public enum LogLevel { +pub enum LogLevel { Info, Warning, Error, @@ -28,22 +28,22 @@ impl fmt::Display for LogLevel { } } -public class Logger { +pub class Logger { String prefix; - public constructor(str* prefix) { + pub constructor(str* prefix) { self.prefix = prefix.to_string(); } - public void info(self*, str* message) { + pub void info(self*, str* message) { self.log(LogLevel::Info, message); } - public void warning(self*, str* message) { + pub void warning(self*, str* message) { self.log(LogLevel::Warning, message); } - public void error(self*, str* message) { + pub void error(self*, str* message) { self.log(LogLevel::Error, message); } diff --git a/mist-test/src/plugin.mist b/mist-test/src/plugin.mist index 9a706f0..a3d16ba 100644 --- a/mist-test/src/plugin.mist +++ b/mist-test/src/plugin.mist @@ -1,16 +1,16 @@ -public struct PluginInfo { - public String name, - public String version, +pub struct PluginInfo { + pub String name, + pub String version, } -public class PluginRegistry { +pub class PluginRegistry { T plugins; - public constructor(T plugins) { + pub constructor(T plugins) { self.plugins = plugins; } - public T plugins(self) { + pub T plugins(self) { return self.plugins; } } \ No newline at end of file diff --git a/mist-test/src/task.mist b/mist-test/src/task.mist index e3befaa..d902258 100644 --- a/mist-test/src/task.mist +++ b/mist-test/src/task.mist @@ -1,17 +1,17 @@ -public enum TaskState { +pub enum TaskState { Pending, Running, Finished, Failed, } -public struct Task { - public String name, - public TaskState state, - public i32 executions, +pub struct Task { + pub String name, + pub TaskState state, + pub i32 executions, } -public Task create_task(str* name) { +pub Task create_task(str* name) { return Task { name: name.to_string(), state: TaskState::Pending, diff --git a/parser/src/ast.rs b/parser/src/ast.rs index ed75ba1..54407a9 100644 --- a/parser/src/ast.rs +++ b/parser/src/ast.rs @@ -20,6 +20,7 @@ pub enum TypePostfix { #[derive(Debug, Clone, Serialize)] pub enum Visibility { Public, + PublicTarget(Path), Private, } diff --git a/parser/src/grammar.pest b/parser/src/grammar.pest index 9c0aca9..b2b9b20 100644 --- a/parser/src/grammar.pest +++ b/parser/src/grammar.pest @@ -48,7 +48,7 @@ program = { // MODIFIERS // ====================================================== -export = { "public" } +visibility = { "pub" ~ ("(" ~ static_path ~ ")")? } mutable = { "mut" } var = { "var" } @@ -154,7 +154,7 @@ var_decl = { } field = { - export? ~ type_expr ~ identifier + visibility? ~ type_expr ~ identifier } field_list = { @@ -182,7 +182,7 @@ mod_package = { // ====================================================== struct_decl = { - export? ~ "struct" ~ identifier ~ generics? ~ "{" ~ field_list? ~ "}" + visibility? ~ "struct" ~ identifier ~ generics? ~ "{" ~ field_list? ~ "}" } // ====================================================== @@ -212,7 +212,7 @@ enum_fields = _{ } enum_decl = { - export? ~ "enum" ~ identifier ~ generics? ~ "{" ~ enum_fields ~ "}" + visibility? ~ "enum" ~ identifier ~ generics? ~ "{" ~ enum_fields ~ "}" } // ====================================================== @@ -220,7 +220,7 @@ enum_decl = { // ====================================================== class_constructor = { - export? ~ "constructor" ~ generics? ~ "(" ~ param_list? ~ ")" ~ block + visibility? ~ "constructor" ~ generics? ~ "(" ~ param_list? ~ ")" ~ block } class_fields = { @@ -236,7 +236,7 @@ self_param = { } method = { - export? ~ type_expr ~ identifier ~ generics? ~ "(" ~ self_param? ~ ("," ~ param_list?)? ~ ")" ~ block + visibility? ~ type_expr ~ identifier ~ generics? ~ "(" ~ self_param? ~ ("," ~ param_list?)? ~ ")" ~ block } class_item = _{ @@ -245,7 +245,7 @@ class_item = _{ } class_decl = { - export? ~ "class" ~ identifier ~ generics? ~ "{" ~ class_fields ~ class_constructor ~ class_item* ~ "}" + visibility? ~ "class" ~ identifier ~ generics? ~ "{" ~ class_fields ~ class_constructor ~ class_item* ~ "}" } // ====================================================== @@ -265,7 +265,7 @@ impl_decl = { trait_requirements = { ":" ~ type_expr_param ~ ("+" ~ type_expr_param)* } method_no_body = { - export? ~ type_expr ~ identifier ~ generics? ~ "(" ~ self_param? ~ ("," ~ param_list?)? ~ ")" ~ semicolon + visibility? ~ type_expr ~ identifier ~ generics? ~ "(" ~ self_param? ~ ("," ~ param_list?)? ~ ")" ~ semicolon } trait_item = _{ @@ -274,7 +274,7 @@ trait_item = _{ } trait_decl = { - export? ~ "trait" ~ identifier ~ generics? ~ trait_requirements? ~ "{" ~ trait_item* ~ "}" + visibility? ~ "trait" ~ identifier ~ generics? ~ trait_requirements? ~ "{" ~ trait_item* ~ "}" } // ====================================================== @@ -282,7 +282,7 @@ trait_decl = { // ====================================================== function_decl = { - export? ~ type_expr ~ identifier ~ "(" ~ param_list? ~ ")" ~ block + visibility? ~ type_expr ~ identifier ~ "(" ~ param_list? ~ ")" ~ block } // ====================================================== diff --git a/parser/src/lib.rs b/parser/src/lib.rs index ba4193b..1569000 100644 --- a/parser/src/lib.rs +++ b/parser/src/lib.rs @@ -791,11 +791,15 @@ impl From> for FunctionDecl { impl From<&mut pest::iterators::Pairs<'_, Rule>> for Visibility { fn from(pairs: &mut pest::iterators::Pairs<'_, Rule>) -> Self { - if listen_rule(pairs, Rule::export) { - Visibility::Public - } else { - Visibility::Private - } + consume_rule(pairs, Rule::visibility) + .map(|pair| { + if let Some(path) = pair.into_inner().next() { + Visibility::PublicTarget(Path::from(path)) + } else { + Visibility::Public + } + }) + .unwrap_or_else(|| Visibility::Private) } } diff --git a/src/codegen.rs b/src/codegen.rs index 057ca63..8775eeb 100644 --- a/src/codegen.rs +++ b/src/codegen.rs @@ -739,10 +739,10 @@ impl GetRust for TypePostfix { impl GetRust for Visibility { fn get_rust(&self) -> String { match self { - Visibility::Public => "pub ", - Visibility::Private => "", + Visibility::Public => "pub ".to_string(), + Visibility::PublicTarget(path) => format!("pub({}) ", path.get_rust()), + Visibility::Private => "".to_string(), } - .to_string() } }