mod completion;
mod prompt;
mod r_source;
#[cfg(test)]
mod tests;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
use std::fmt;
pub use completion::StaticFormalsMode;
use completion::{RCompletionConfig, ShellCompletionConfig};
use prompt::SpinnerConfigSchema;
pub use prompt::{PromptDurationConfig, SpinnerConfig};
pub use r_source::RSourceOverride;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(default)]
#[derive(Default)]
pub struct ExperimentalConfig {
#[serde(default)]
pub history_forget: HistoryForgetConfig,
#[serde(default)]
pub completion_min_chars: Option<usize>,
#[serde(default)]
pub prompt_spinner: SpinnerConfig,
#[serde(default)]
pub prompt_duration: PromptDurationConfig,
#[serde(default)]
pub r_completion: RCompletionConfig,
#[serde(default)]
pub r_help: RHelpConfig,
#[serde(default)]
pub shell_completion: ShellCompletionConfig,
#[serde(default)]
pub shell_semicolon_shortcut: bool,
#[serde(default)]
pub shell_abbreviations: BTreeMap<String, String>,
#[serde(default)]
pub r_source_overrides: Vec<RSourceOverride>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema, Default)]
#[serde(rename_all = "lowercase")]
pub enum HelpViewer {
Auto,
#[default]
R,
}
impl fmt::Display for HelpViewer {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(match self {
Self::Auto => "auto",
Self::R => "r",
})
}
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, Default)]
#[serde(default)]
pub struct RHelpConfig {
pub viewer: HelpViewer,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(default)]
#[derive(Default)]
struct ExperimentalConfigSchema {
pub history_forget: HistoryForgetConfig,
pub completion_min_chars: Option<usize>,
pub prompt_spinner: SpinnerConfigSchema,
pub prompt_duration: PromptDurationConfig,
pub r_completion: RCompletionConfig,
pub r_help: RHelpConfig,
pub shell_completion: ShellCompletionConfig,
pub shell_semicolon_shortcut: bool,
pub shell_abbreviations: BTreeMap<String, String>,
pub r_source_overrides: Vec<RSourceOverride>,
}
impl JsonSchema for ExperimentalConfig {
fn schema_name() -> std::borrow::Cow<'static, str> {
std::borrow::Cow::Borrowed("ExperimentalConfig")
}
fn json_schema(generator: &mut schemars::SchemaGenerator) -> schemars::Schema {
generator.subschema_for::<ExperimentalConfigSchema>()
}
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(default)]
pub struct HistoryForgetConfig {
pub enabled: bool,
pub delay: usize,
pub on_exit_only: bool,
}
impl Default for HistoryForgetConfig {
fn default() -> Self {
HistoryForgetConfig {
enabled: false,
delay: 2,
on_exit_only: false,
}
}
}