Merge pull request #22 from mattwparas/mwp-improving-docs

Improving docs
pull/8675/merge^2
Matthew Paras 2025-04-27 09:52:39 -07:00 committed by GitHub
commit 85f99f8d5a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 77 additions and 59 deletions

View File

@ -70,7 +70,6 @@ pub static INTERRUPT_HANDLER: OnceCell<InterruptHandler> = OnceCell::new();
// We just have to look at functions that have been defined at // We just have to look at functions that have been defined at
// the top level, _after_ they // the top level, _after_ they
pub static GLOBAL_OFFSET: OnceCell<usize> = OnceCell::new(); pub static GLOBAL_OFFSET: OnceCell<usize> = OnceCell::new();
// pub static AVAILABLE_FUNCTIONS: Lazy<RwLock<Vec<String>>> = Lazy::new(|| RwLock::new(Vec::new()));
// The Steel scripting engine instance. This is what drives the whole integration. // The Steel scripting engine instance. This is what drives the whole integration.
pub static GLOBAL_ENGINE: Lazy<Mutex<steel::steel_vm::engine::Engine>> = Lazy::new(|| { pub static GLOBAL_ENGINE: Lazy<Mutex<steel::steel_vm::engine::Engine>> = Lazy::new(|| {
@ -233,6 +232,22 @@ fn load_keymap_api(engine: &mut Engine, api: KeyMapApi, generate_sources: bool)
engine.register_module(module); engine.register_module(module);
} }
fn format_docstring(doc: &str) -> String {
let mut docstring = doc
.lines()
.map(|x| {
let mut line = ";;".to_string();
line.push_str(x);
line.push_str("\n");
line
})
.collect::<String>();
docstring.pop();
docstring
}
fn load_static_commands(engine: &mut Engine, generate_sources: bool) { fn load_static_commands(engine: &mut Engine, generate_sources: bool) {
let mut module = BuiltInModule::new("helix/core/static"); let mut module = BuiltInModule::new("helix/core/static");
@ -263,17 +278,7 @@ fn load_static_commands(engine: &mut Engine, generate_sources: bool) {
module.register_fn(name, fun); module.register_fn(name, fun);
if generate_sources { if generate_sources {
let mut docstring = doc let docstring = format_docstring(doc);
.lines()
.map(|x| {
let mut line = ";;".to_string();
line.push_str(x);
line.push_str("\n");
line
})
.collect::<String>();
docstring.pop();
builtin_static_command_module.push_str(&format!( builtin_static_command_module.push_str(&format!(
r#" r#"
@ -291,17 +296,7 @@ fn load_static_commands(engine: &mut Engine, generate_sources: bool) {
let mut template_function_arity_1 = |name: &str, doc: &str| { let mut template_function_arity_1 = |name: &str, doc: &str| {
if generate_sources { if generate_sources {
let mut docstring = doc let docstring = format_docstring(doc);
.lines()
.map(|x| {
let mut line = ";;".to_string();
line.push_str(x);
line.push_str("\n");
line
})
.collect::<String>();
docstring.pop();
builtin_static_command_module.push_str(&format!( builtin_static_command_module.push_str(&format!(
r#" r#"
@ -367,43 +362,79 @@ fn load_static_commands(engine: &mut Engine, generate_sources: bool) {
after the existing function context has exited." after the existing function context has exited."
); );
let mut template_function_arity_0 = |name: &str| { let mut template_function_arity_0 = |name: &str, doc: &str| {
if generate_sources { if generate_sources {
let docstring = format_docstring(doc);
builtin_static_command_module.push_str(&format!( builtin_static_command_module.push_str(&format!(
r#" r#"
(provide {}) (provide {})
;;@doc
{}
(define ({}) (define ({})
(helix.static.{} *helix.cx*)) (helix.static.{} *helix.cx*))
"#, "#,
name, name, name name, docstring, name, name
)); ));
} }
}; };
macro_rules! function0 { macro_rules! function0 {
($name:expr, $function:expr) => {{ ($name:expr, $function:expr, $doc:expr) => {{
module.register_fn($name, $function); module.register_fn($name, $function);
template_function_arity_0($name); template_function_arity_0($name, $doc);
}}; }};
} }
function0!("current_selection", get_selection); function0!(
function0!("load-buffer!", load_buffer); "current_selection",
function0!("current-highlighted-text!", get_highlighted_text); get_selection,
function0!("get-current-line-number", current_line_number); "Returns the current selection as a string"
function0!("current-selection-object", current_selection); );
function0!("get-helix-cwd", get_helix_cwd); function0!("load-buffer!", load_buffer, "Evaluates the current buffer");
function0!("move-window-far-left", move_window_to_the_left); function0!(
function0!("move-window-far-right", move_window_to_the_right); "current-highlighted-text!",
get_highlighted_text,
"Returns the currently highlighted text as a string"
);
function0!(
"get-current-line-number",
current_line_number,
"Returns the current line number"
);
function0!(
"current-selection-object",
current_selection,
"Returns the current selection object"
);
function0!(
"get-helix-cwd",
get_helix_cwd,
"Returns the current working directly that helix is using"
);
function0!(
"move-window-far-left",
move_window_to_the_left,
"Moves the current window to the far left"
);
function0!(
"move-window-far-right",
move_window_to_the_right,
"Moves the current window to the far right"
);
let mut template_function_no_context = |name: &str| { let mut template_function_no_context = |name: &str, doc: &str| {
if generate_sources { if generate_sources {
let docstring = format_docstring(doc);
builtin_static_command_module.push_str(&format!( builtin_static_command_module.push_str(&format!(
r#" r#"
(provide {}) (provide {})
;;@doc
{}
(define {} helix.static.{}) (define {} helix.static.{})
"#, "#,
name, name, name name, docstring, name, name
)) ))
} }
}; };
@ -411,8 +442,14 @@ fn load_static_commands(engine: &mut Engine, generate_sources: bool) {
module.register_fn("get-helix-scm-path", get_helix_scm_path); module.register_fn("get-helix-scm-path", get_helix_scm_path);
module.register_fn("get-init-scm-path", get_init_scm_path); module.register_fn("get-init-scm-path", get_init_scm_path);
template_function_no_context("get-helix-scm-path"); template_function_no_context(
template_function_no_context("get-init-scm-path"); "get-helix-scm-path",
"Returns the path to the helix.scm file as a string",
);
template_function_no_context(
"get-init-scm-path",
"Returns the path to the init.scm file as a string",
);
if generate_sources { if generate_sources {
let mut target_directory = helix_runtime_search_path(); let mut target_directory = helix_runtime_search_path();
@ -475,24 +512,7 @@ fn load_typed_commands(engine: &mut Engine, generate_sources: bool) {
(helix.{} *helix.cx* args)) (helix.{} *helix.cx* args))
"#, "#,
command.name, command.name,
{ format_docstring(command.doc),
// Ugly hack to drop the extra newline from
// the docstring
let mut docstring = command
.doc
.lines()
.map(|x| {
let mut line = ";;".to_string();
line.push_str(x);
line.push_str("\n");
line
})
.collect::<String>();
docstring.pop();
docstring
},
command.name, command.name,
command.name command.name
)); ));
@ -3221,8 +3241,6 @@ fn await_value(cx: &mut Context, value: SteelVal, callback_fn: SteelVal) {
let callback = move |engine: &mut Engine, args: Vec<SteelVal>| { let callback = move |engine: &mut Engine, args: Vec<SteelVal>| {
let context = args[0].clone(); let context = args[0].clone();
engine.update_value("*helix.cx*", context); engine.update_value("*helix.cx*", context);
// args.push(inner);
engine.call_function_with_args(cloned_func.clone(), vec![inner]) engine.call_function_with_args(cloned_func.clone(), vec![inner])
}; };