lean2/doc/server.org

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