elisp: SMIE setup
22.7.1.1 SMIE Setup and Features
................................
SMIE is meant to be a one-stop shop for structural navigation and
various other features which rely on the syntactic structure of code, in
particular automatic indentation. The main entry point is ‘smie-setup’
which is a function typically called while setting up a major mode.
-- Function: smie-setup grammar rules-function &rest keywords
Setup SMIE navigation and indentation. GRAMMAR is a grammar table
generated by ‘smie-prec2->grammar’. RULES-FUNCTION is a set of
indentation rules for use on ‘smie-rules-function’. KEYWORDS are
additional arguments, which can include the following keywords:
• ‘:forward-token’ FUN: Specify the forward lexer to use.
• ‘:backward-token’ FUN: Specify the backward lexer to use.
Calling this function is sufficient to make commands such as
‘forward-sexp’, ‘backward-sexp’, and ‘transpose-sexps’ be able to
properly handle structural elements other than just the paired
parentheses already handled by syntax tables. For example, if the
provided grammar is precise enough, ‘transpose-sexps’ can correctly
transpose the two arguments of a ‘+’ operator, taking into account the
precedence rules of the language.
Calling ‘smie-setup’ is also sufficient to make TAB indentation work
in the expected way, extends ‘blink-matching-paren’ to apply to elements
like ‘begin...end’, and provides some commands that you can bind in the
major mode keymap.
-- Command: smie-close-block
This command closes the most recently opened (and not yet closed)
block.
-- Command: smie-down-list &optional arg
This command is like ‘down-list’ but it also pays attention to
nesting of tokens other than parentheses, such as ‘begin...end’.