SMIE: Weakness is Power!

Auto-indentation with incomplete information

Stefan Monnier1

The Art, Science, and Engineering of Programming, 2021, Vol. 5, Issue 1, Article 1

Submission date: 2019-10-02
Publication date: 2020-06-09
DOI: https://doi.org/10.22152/programming-journal.org/2021/5/1
Full text: PDF

Abstract

Automatic indentation of source code is fundamentally a simple matter of parsing the code and then applying language- and style-specific rules about relative indentation of the various constructs. Yet, in practice, full parsing is not always an option, either because of quirks of the language, or because the code is temporarily syntactically incorrect, or because of an incomplete or broken grammar.

I present the design of Emacs’s Simple-Minded Indentation Engine (SMIE), which gets its power from the weakness of the underlying parsing technique. It makes it possible to perform local parsing, which is hence unaffected by irrelevant surrounding code. This provides a form of graceful degradation in the face of incomplete, erroneous, or just plain problematic information.

  1. monnier@iro.umontreal.ca, University of Montreal, Canada