Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2.3 KiB
Lean can process input incrementally, and extract type information.
This feature is useful for implementing "intelligent" support for Lean
in editors such as Emacs. It provides a convenient way to access
descriptions of functions, overloaded symbols, and typing information.
We must use the option --server
to enable this feature.
Commands
Lean implements a simple set of commands for loading files, extracting typing information, and "replacing" lines. The commands should be sent to the standard input.
Load file
FILE [file-name]
This command loads the Lean file named [file-name]
.
Lean will create a "snapshot" (aka backtracking point) after each
command. Lean uses the "snapshots" to process incremental updates efficiently.
Replace line
REPLACE [line-number]
[new-line]
This command replaces the line [line-number]
with [new-line]
.
Lean uses the snapshots to process the request efficiently.
If [line-number]
is greater than the total number of lines in the lean
buffer, then empty lines are introduced. The lines are indexed from 1.
Insert line
INSERT [line-number]
[new-line]
This command inserts [new-line]
before line [line-number]
.
If [line-number]
is greater than the total number of lines in the lean
buffer, then empty lines are introduced. The lines are indexed from 1.
Remove line
REMOVE [line-number]
Remove line [line-number]
. The lines are indexed from 1.
If [line-number]
is greater than the total number of lines in the lean
buffer, then the command is ignored.
Extracting typing information
INFO [line-number]
This command extracts typing information associated with line [line-number]
.
Lean produces a possible empty sequence of entries terminated with
-- ENDINFO
A type information entry is of the form
-- TYPE|[line-number]|[column-number]
[type]
-- ACK
Information for overloaded operators and symbols is of the form
-- OVERLOAD|[line-number]|[column-number]
[overload-1]
--
...
--
[overload-n]
-- ACK
Here is an example of output produced by Lean
-- TYPE|15|38
num
-- ACK
-- TYPE|15|40
num → num → Prop
-- ACK
-- OVERLOAD|15|42
f
--
foo.f
-- ACK
-- TYPE|15|42
num → num
-- ACK
-- TYPE|15|44
num
-- ACK
-- ENDINFO