Skip to main content

LspFoldingMode

Struct LspFoldingMode 

Source
pub struct LspFoldingMode;
Expand description

Guard for lsp-folding-mode. Holds the prior foldmethod value + a config handle; Drop restores the prior value via folding_sync::on_deactivate. None prior means activation was a no-op (foldmethod was already Lsp), so Drop also does nothing. 4.4.f: textDocument/foldingRange feeding FoldMethod::Lsp.

Coupled to the foldmethod option — declaratively, through [Mode::options]. Activation resolves foldmethod = lsp on this mode’s buffers; deactivation drops the contribution and resolution falls back to whatever the buffer would otherwise have had.

2026-08-16. This used to be a hand-written lifecycle that wrote the option through ConfigRegistry::set_typed from on_activate and restored it from a Drop guard. set_typed is the GLOBAL registry: attaching a language server to one buffer set foldmethod = lsp for every buffer in the editor, including ones with no server, whose folds were then recomputed through the LSP provider’s cascade. The module’s own doc claimed it swapped “the buffer’s foldmethod” — the buffer-scoped mechanism was Mode::options(), sitting right here returning an empty set.

The stash-and-restore machinery (folding_sync, LspFoldingGuard, the prior-value slot) existed only to undo a global write. A contribution is scoped and reverts itself, so all of it is gone rather than repaired.

Implementations§

Source§

impl LspFoldingMode

Source

pub fn mode_id() -> ModeId

Trait Implementations§

Source§

impl Mode for LspFoldingMode

Source§

fn options(&self) -> OptionOverrideSet

The whole of this mode’s option coupling. Buffer-scoped by construction, and reverted by deactivation without a guard — see the type docs for what this replaced.

Source§

fn on_activate(&self, _ctx: ModeContext) -> LifecycleFuture<'_, ()>

Nothing to do: the option contribution above IS the activation.

Source§

type Guard = ()

Owned cleanup token returned by [Self::on_activate]. Read more
Source§

fn id(&self) -> ModeId

Canonical identity. Same value every call. Read more
Source§

fn kind(&self) -> ModeKind

Major or minor. Read at registration and on every activation call (activate_major on a minor, or vice versa, is [ModeActivationError::WrongKind]).
Source§

fn required_capabilities(&self) -> CapabilitySet

Capabilities the mode requires. Validated at activation; missing capability ⇒ [ModeActivationError::MissingCapability], never silent skip.
§

fn target_buffer_kind(&self) -> Option<BufferKind>

For major modes, the [BufferKind] this mode is the default major for (H.2, 2026-05-31). ModeRegistry::register indexes this so ModeRegistry::find_major_for_kind can dispatch buffer-creation events to the right major without host-side match BufferKind { ... } blocks. Read more
§

fn target_language(&self) -> Option<&str>

For major modes, the language this mode is the default major for, by canonical name (Lang::name() — "rust", "org") (OM.1). The peer of target_buffer_kind for the dispatch path [BufferKind::Document] takes: language detection rather than kind dispatch. Read more
§

fn keymap(&self) -> Keymap

Keymap chord → command additions / overrides. Read more
§

fn decorations(&self) -> Vec<DecorationProvider>

Decoration providers (gutter / inline / overlay / statusline). Stub — reserved for the WIT plugin path (M.10).
§

fn gutter_decorations(&self, _ctx: &DecorationCtx<'_>) -> Vec<GutterDecoration>

Gutter sign decorations this mode contributes while active. Called once per pane per frame with a [DecorationCtx] carrying relevant render-state snapshots (diff sign map, LSP diagnostics arc). Returns per-line GutterDecoration values; the renderer partitions them by variant into the appropriate gutter column. Default: empty (no contribution).
§

fn completion_sources(&self) -> Vec<CompletionSourceContribution>

Insert-mode completion sources this mode contributes while active on a buffer. Empty by default; minors that own a completion source (lsp-completion-mode, snippet-completion-mode, buffer-words-mode, tree-sitter-completion-mode, path-completion-mode, plugin sources) override.
§

fn action_handlers(&self) -> Vec<ActionHandlerContribution>

Global (buffer-agnostic) action handlers this mode contributes (SN.3c.0). The host walks every registered mode’s action_handlers() once at boot, resolves each action_name → CommandId, registers the handler in the ActionHandlerRegistry, and holds the tokens for the app’s lifetime. Use this for handlers that read the active buffer / cursor / services from the ActionContext at call time and close over no per-buffer state (e.g. snippet expand). Per-buffer, session-scoped handlers register in on_activate instead, so their tokens drop with the Guard. Default: none. See feedback_effect_vocabulary_is_host_boundary.
§

fn conflicts_with(&self) -> &[ModeId]

Modes this one cannot be active alongside. Read more
§

fn implies(&self) -> &[ModeId]

Minor modes activating this mode also activates. Used by relative-line-numbers-mode ⇒ line-numbers-mode, and by read-only majors ⇒ read-only-mode. Read more
§

fn presents_extensions(&self) -> &[&'static str]

File extensions (lowercase, no dot) this major PRESENTS rather than edits — the file is never loaded as text. Read more
§

fn mirrors_option(&self) -> Option<&'static str>

Declarative mirror hint for “this mode is the on/off switch for a typed option of the same observable state”. Some(canonical_name) ⇒ a host-driven cascade keeps the mode’s active state and the option’s value in sync.
§

fn invocation_runner(&self) -> Option<ModeId>

Invocation-runner discovery (2026-05-26). Modes that own command-invocation dispatch for their buffer kind (terminal-mode, oil-mode, file-tree-mode, help-mode, …) return their canonical [ModeId]; the host registers a runner function under that id at boot, and Editor::run_invocation looks it up by walking the active modes on the active pane’s buffer (minors first, then major) before falling back to the central grammar Action gate. Read more
§

fn refresh_action(&self) -> Option<&'static str>

Which of this mode’s own actions refreshes its view, or None (the default) when the mode backs nothing refreshable (RV.1, 2026-08-10). Read more
§

fn fold_toggle_action(&self) -> Option<&'static str>

Which of this mode’s actions <Tab> fires, and the declaration that pulls in foldable-view-mode — the shared minor owning the chord. Read more
§

fn refresh_on_open(&self) -> bool

Should re-opening this view re-run its refresh? Read more
§

fn activation_policy(&self) -> ActivationPolicy

A minor mode’s default auto-activation policy (MA.1; mode-architecture.md §7.4). The host’s minor-activation resolver reads this for every registered minor when a buffer enters a major mode, and activates those whose policy admits the entered major. The default is [ActivationPolicy::Manual] — auto-activate nowhere until the mode or the user opts in. Ignored for major modes (a buffer’s major is chosen by the major resolver, not this allowlist).
§

fn editable_tail(&self) -> Option<EditableTail>

The mode’s editable tail on an otherwise read-only buffer, or None (the default) for a fully read-only / fully writable buffer (AU‑3). Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<M> DynMode for M
where M: Mode,

§

fn id(&self) -> ModeId

Forwards to [Mode::id].
§

fn kind(&self) -> ModeKind

Forwards to [Mode::kind].
§

fn target_buffer_kind(&self) -> Option<BufferKind>

Forwards to [Mode::target_buffer_kind].
§

fn target_language(&self) -> Option<&str>

Forwards to [Mode::target_language].
§

fn options(&self) -> OptionOverrideSet

Forwards to [Mode::options].
§

fn keymap(&self) -> Keymap

Forwards to [Mode::keymap].
§

fn decorations(&self) -> Vec<DecorationProvider>

Forwards to [Mode::decorations].
§

fn gutter_decorations(&self, ctx: &DecorationCtx<'_>) -> Vec<GutterDecoration>

Forwards to [Mode::gutter_decorations].
§

fn completion_sources(&self) -> Vec<CompletionSourceContribution>

Forwards to [Mode::completion_sources].
§

fn action_handlers(&self) -> Vec<ActionHandlerContribution>

Forwards to [Mode::action_handlers].
§

fn required_capabilities(&self) -> CapabilitySet

Forwards to [Mode::required_capabilities].
§

fn conflicts_with(&self) -> &[ModeId]

Forwards to [Mode::conflicts_with].
§

fn implies(&self) -> &[ModeId]

Forwards to [Mode::implies].
§

fn presents_extensions(&self) -> &[&'static str]

Forwards to [Mode::presents_extensions].
§

fn mirrors_option(&self) -> Option<&'static str>

Forwards to [Mode::mirrors_option].
§

fn invocation_runner(&self) -> Option<ModeId>

Forwards to [Mode::invocation_runner].
§

fn refresh_action(&self) -> Option<&'static str>

Forwards to [Mode::refresh_action].
§

fn fold_toggle_action(&self) -> Option<&'static str>

Forwards to [Mode::fold_toggle_action].
§

fn refresh_on_open(&self) -> bool

Forwards to [Mode::refresh_on_open].
§

fn activation_policy(&self) -> ActivationPolicy

Forwards to [Mode::activation_policy].
§

fn editable_tail(&self) -> Option<EditableTail>

Forwards to [Mode::editable_tail].
§

fn on_activate_dyn<'a>( &'a self, ctx: ModeContext, ) -> Pin<Box<dyn Future<Output = Result<Box<dyn Any + Send>, ModeActivationError>> + Send + 'a>>

Type-erased lifecycle entry. Returns a future whose output is the typed Guard erased to Box<dyn Any + Send>. The dispatcher stashes this box keyed by (BufferId, ModeId); deactivation drops it.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more