lean2/src/emacs/lean-type.el

97 lines
3.3 KiB
EmacsLisp
Raw Normal View History

;; -*- lexical-binding: t; -*-
2014-08-14 00:02:49 +00:00
;; Copyright (c) 2014 Microsoft Corporation. All rights reserved.
;; Released under Apache 2.0 license as described in the file LICENSE.
;;
;; Author: Soonho Kong
;;
(require 'cl-lib)
(require 'dash)
(require 'dash-functional)
2014-08-14 00:02:49 +00:00
(require 'lean-variable)
(require 'lean-util)
(require 'lean-cmd)
2014-08-14 00:02:49 +00:00
(require 'lean-server)
(require 'lean-changes)
2014-08-14 00:02:49 +00:00
(require 'lean-debug)
(require 'flymake)
2014-08-14 00:02:49 +00:00
(defun lean-fill-placeholder-cont (info-record)
"Continuation for lean-fill-placeholder"
(let ((synth (and info-record (cl-first (lean-info-record-synth info-record)))))
(when synth
(let ((synth-str
(replace-regexp-in-string "?M_[0-9]+" "_" (lean-info-synth-body-str synth))))
(when (search " " synth-str)
(setq synth-str (concat "(" synth-str ")")))
(when (looking-at "_")
(delete-forward-char 1)
(insert synth-str))))))
(defun lean-fill-placeholder ()
"Fill the placeholder with a synthesized expression by Lean."
(interactive)
(lean-get-info-record-at-point 'lean-fill-placeholder-cont))
(defun lean-eldoc-documentation-function-cont (info-record &optional add-to-kill-ring)
"Continuation for lean-eldoc-documentation-function"
(let ((info-string (lean-info-record-to-string info-record)))
(when info-string
(when add-to-kill-ring
(kill-new
(substring-no-properties info-string)))
(when (or lean-show-proofstate-in-minibuffer
(not (lean-info-record-proofstate info-record)))
(message "%s" info-string))
(lean-output-to-buffer "*lean-info*" "--------------------------\n" nil)
(lean-output-to-buffer "*lean-info*" "%s\n" (list info-string)))))
(defun lean-eldoc-documentation-function (&optional add-to-kill-ring)
2014-08-14 13:22:01 +00:00
"Show information of lean expression at point if any"
2014-08-14 00:02:49 +00:00
(interactive)
(cond ((and lean-flycheck-use
(or (get-char-property (point) 'flycheck-error)
(get-char-property (point) 'flycheck-warning)))
nil)
((or (and (not (looking-at (rx white)))
(not (eolp)))
(and (looking-back (rx (not white)))
(not (bolp))))
(lean-get-info-record-at-point
(lambda (info-record)
(lean-eldoc-documentation-function-cont info-record add-to-kill-ring))))))
(defun lean-show-type ()
"Show information of lean-expression at point if any."
(interactive)
(lean-eldoc-documentation-function lean-show-type-add-to-kill-ring))
;; =======================================================
;; eval
;; =======================================================
(defun lean-eval-parse-string (str)
"Parse the output of eval command."
(let ((str-list (split-string str "\n")))
;; Drop the first line "-- BEGINEVAL" and
;; the last line "-- ENDEVAL"
(setq str-list
(-take (- (length str-list) 2)
(-drop 1 str-list)))
(string-join str-list "\n")))
(defun lean-eval-cmd (lean-cmd)
"Evaluate lean command."
(interactive "sLean CMD: ")
(lean-server-send-cmd-async (lean-cmd-eval lean-cmd)
'message))
;; Clear Cache
(defun lean-clear-cache ()
"Send CLEAR_CACHE command to lean-server"
(interactive)
(call-process (lean-get-executable "linja") nil 0 nil "clear-cache")
(lean-server-send-cmd-async (lean-cmd-clear-cache)))
2014-08-14 00:02:49 +00:00
(provide 'lean-type)