From ccb24dd46e2d4dd7cfc5ab1deb2452625f7161ba Mon Sep 17 00:00:00 2001 From: Wojciech Kozlowski Date: Sat, 9 Sep 2017 00:25:09 +0100 Subject: [PATCH] Squashed 'emacs-racer/' content from commit 6e0d1b3 git-subtree-dir: emacs-racer git-subtree-split: 6e0d1b3ebd54497c0cc995a92f09328ff101cd33 --- .ert-runner | 1 + .gitignore | 1 + .travis.yml | 22 ++ CHANGELOG.md | 51 +++ Cask | 14 + Makefile | 21 + README.md | 112 ++++++ images/racer_completion.png | Bin 0 -> 41979 bytes images/racer_goto.gif | Bin 0 -> 68873 bytes images/racer_help.png | Bin 0 -> 50577 bytes racer.el | 768 ++++++++++++++++++++++++++++++++++++ test/racer-test.el | 340 ++++++++++++++++ test/test-helper.el | 12 + 13 files changed, 1342 insertions(+) create mode 100644 .ert-runner create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 CHANGELOG.md create mode 100644 Cask create mode 100644 Makefile create mode 100644 README.md create mode 100644 images/racer_completion.png create mode 100644 images/racer_goto.gif create mode 100644 images/racer_help.png create mode 100644 racer.el create mode 100644 test/racer-test.el create mode 100644 test/test-helper.el diff --git a/.ert-runner b/.ert-runner new file mode 100644 index 0000000..e35e9c9 --- /dev/null +++ b/.ert-runner @@ -0,0 +1 @@ +-L . diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d4691b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.cask diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..43a1c00 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,22 @@ +language: generic +before_install: + - curl -fsSkL https://gist.github.com/rejeep/ebcd57c3af83b049833b/raw > x.sh && source ./x.sh + - evm install $EVM_EMACS --use --skip + - cask +env: + - EVM_EMACS=emacs-24.3-travis + - EVM_EMACS=emacs-24.4-travis + - EVM_EMACS=emacs-24.5-travis + - EVM_EMACS=emacs-25.1-travis + - EVM_EMACS=emacs-git-snapshot-travis +script: + - emacs --version + - make test + +notifications: + email: false + +matrix: + fast_finish: true + allow_failures: + - env: EVM_EMACS=emacs-git-snapshot-travis diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..47e2cd6 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,51 @@ +# v1.3 (unreleased) + +* `racer-rust-src-path` is now set automatically by default. +* New simpler installation instructions based on `rustup`. +* Fixed an issue with racer completion in indirect buffers. + +# v1.2 + +* Added the command `racer-debug` to help users diagnose issues. +* We now explicitly try `~/.cargo/bin/racer` if `racer` isn't on path. +* We no longer offer completions inside comments by default (it tends + to be slow and rarely offers completions). See + `racer-complete-in-comments`. +* Eldoc descriptions of modules now abbreviate the path relative to + the project and the user's home directory. +* Several improvements to markdown rendering in `racer-describe`. + +# v1.1 + +* Fixed a crash when point is at the beginning of buffer. +* Fixed a crash when not in a cargo project. +* Added `racer-cargo-home`, which enables completion for cargo crates. +* Various improvements to formatting of completion candidates. +* Added `racer-describe`. + +# v1.0.2 + +* Trigger completions after `::` or `.`. +* Compatibility with latest company +* Fixed an issue where TAGS from other projects were also completion + candidates + +# v1.0.1 + +No changes since v0.0.2. + +This release was created to [work around an issue +where MELPA stable](https://github.com/milkypostman/melpa/issues/3205) +had created a v1.0.0 from an early version of racer.el + +# v0.0.2 + +Initial release. Includes: + +* Code completion with company +* Jump to definition +* Eldoc + +Early users who are using `racer-activate` or `racer-turn-on-eldoc` +should use `racer-mode` and `eldoc-mode` instead. The former have been +deprecated. diff --git a/Cask b/Cask new file mode 100644 index 0000000..a597c84 --- /dev/null +++ b/Cask @@ -0,0 +1,14 @@ +(source gnu) +(source melpa) + +(package-file "racer.el") + +(depends-on "company") +(depends-on "dash") +(depends-on "s") +(depends-on "f") +(depends-on "rust-mode") + +(development + (depends-on "ert-runner") + (depends-on "undercover")) diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2e34430 --- /dev/null +++ b/Makefile @@ -0,0 +1,21 @@ +EMACS ?= emacs +CASK ?= cask + +all: test + +test: clean-elc + ${MAKE} unit + ${MAKE} compile + ${MAKE} unit + ${MAKE} clean-elc + +unit: + ${CASK} exec ert-runner + +compile: + ${CASK} exec ${EMACS} -Q -batch -f batch-byte-compile racer.el + +clean-elc: + rm -f racer.elc + +.PHONY: all test unit compile diff --git a/README.md b/README.md new file mode 100644 index 0000000..6c075e0 --- /dev/null +++ b/README.md @@ -0,0 +1,112 @@ +# Racer for Emacs +[![MELPA](http://melpa.org/packages/racer-badge.svg)](http://melpa.org/#/racer) +[![MELPA Stable](http://stable.melpa.org/packages/racer-badge.svg)](http://stable.melpa.org/#/racer) +[![Build Status](https://travis-ci.org/racer-rust/emacs-racer.svg?branch=master)](https://travis-ci.org/racer-rust/emacs-racer) +[![Coverage Status](https://coveralls.io/repos/github/racer-rust/emacs-racer/badge.svg?branch=master)](https://coveralls.io/github/racer-rust/emacs-racer?branch=master) + +This is the official Emacs package for +[Racer](http://github.com/phildawes/racer). + + +**Table of Contents** + +- [Racer for Emacs](#racer-for-emacs) + - [Completion](#completion) + - [Find Definitions](#find-definitions) + - [Describe Functions and Types](#describe-functions-and-types) + - [Installation](#installation) + - [Testing your setup](#testing-your-setup) + - [Tests](#tests) + + + +## Completion + +racer.el supports code completion of variables, functions and modules. + +![racer completion screenshot](images/racer_completion.png) + +You can also press F1 to pop up a help buffer for the current +completion candidate. + +Note that due to a +[limitation of racer](https://github.com/phildawes/racer/issues/389), +racer.el cannot offer completion for macros. + +## Find Definitions + +racer.el can jump to definition of functions and types. + +![racer go to definition](images/racer_goto.gif) + +You can use M-. to go to the definition, and M-, +to go back. + +## Describe Functions and Types + +racer.el can show a help buffer based on the docstring of the thing at +point. + +![racer completion screenshot](images/racer_help.png) + +Use M-x racer-describe to open the help buffer. + +## Installation + +1. Install [Racer](http://github.com/phildawes/racer) and download the + source code of Rust: + + ``` + $ rustup component add rust-src + $ cargo install racer + ``` + +2. Allow Emacs to install packages from MELPA: + + ```el + (require 'package) + (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/")) + ``` + +3. Install the Emacs package for Racer: `M-x package-install RET racer RET` + +4. Configure Emacs to activate racer when rust-mode starts: + ```el + (add-hook 'rust-mode-hook #'racer-mode) + (add-hook 'racer-mode-hook #'eldoc-mode) + ``` + + For completions, install company with `M-x package-install RET company RET`. A sample configuration: + ```el + + (add-hook 'racer-mode-hook #'company-mode) + + (require 'rust-mode) + (define-key rust-mode-map (kbd "TAB") #'company-indent-or-complete-common) + (setq company-tooltip-align-annotations t) + ``` + For automatic completions, customize `company-idle-delay` and + `company-minimum-prefix-length`. + +### Testing your setup + +To test **completion**: Open a rust file and try typing ```use +std::io::B``` and press TAB. + +To test **go to definition**: Place your cursor over a symbol and press +`M-.` to jump to its definition. + +Press `M-,` to jump back to the previous cursor location. + +If **it doesn't work**, try `M-x racer-debug` to see what command was +run and what output was returned. + +## Tests + +racer.el includes tests. To run them, you need to install +[Cask](https://github.com/cask/cask), then: + +``` +$ cask install +$ cask exec ert-runner +``` diff --git a/images/racer_completion.png b/images/racer_completion.png new file mode 100644 index 0000000000000000000000000000000000000000..6a7f0e4a5320ace41796d316e2e6d606434ad74d GIT binary patch literal 41979 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 literal 0 HcmV?d00001 diff --git a/images/racer_goto.gif b/images/racer_goto.gif new file mode 100644 index 0000000000000000000000000000000000000000..3bca8a27118c8eb8be3bb59721b428d2256b2626 GIT binary patch literal 68873 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 literal 0 HcmV?d00001 diff --git a/images/racer_help.png b/images/racer_help.png new file mode 100644 index 0000000000000000000000000000000000000000..fc473fa73dbaa20d55640511c9312e106fc2d89f GIT binary patch literal 50577 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 literal 0 HcmV?d00001 diff --git a/racer.el b/racer.el new file mode 100644 index 0000000..97c8095 --- /dev/null +++ b/racer.el @@ -0,0 +1,768 @@ +;;; racer.el --- code completion, goto-definition and docs browsing for Rust via racer -*- lexical-binding: t -*- + +;; Copyright (c) 2014 Phil Dawes + +;; Author: Phil Dawes +;; URL: https://github.com/racer-rust/emacs-racer +;; Version: 1.3 +;; Package-Requires: ((emacs "24.3") (rust-mode "0.2.0") (dash "2.13.0") (s "1.10.0") (f "0.18.2")) +;; Keywords: abbrev, convenience, matching, rust, tools + +;; This file is not part of GNU Emacs. + +;; Permission is hereby granted, free of charge, to any +;; person obtaining a copy of this software and associated +;; documentation files (the "Software"), to deal in the +;; Software without restriction, including without +;; limitation the rights to use, copy, modify, merge, +;; publish, distribute, sublicense, and/or sell copies of +;; the Software, and to permit persons to whom the Software +;; is furnished to do so, subject to the following +;; conditions: + +;; The above copyright notice and this permission notice +;; shall be included in all copies or substantial portions +;; of the Software. + +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +;; ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +;; TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +;; PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +;; SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +;; CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +;; OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +;; IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +;; DEALINGS IN THE SOFTWARE. + +;;; Commentary: + +;; Please see the readme for full documentation: +;; https://github.com/racer-rust/emacs-racer + +;;; Quickstart: + +;; You will need to configure Emacs to find racer: +;; +;; (setq racer-rust-src-path "/src/") +;; (setq racer-cmd "/target/release/racer") +;; +;; To activate racer in Rust buffers, run: +;; +;; (add-hook 'rust-mode-hook #'racer-mode) +;; +;; You can also use racer to find definition at point via +;; `racer-find-definition', bound to `M-.' by default. +;; +;; Finally, you can also use Racer to show the signature of the +;; current function in the minibuffer: +;; +;; (add-hook 'racer-mode-hook #'eldoc-mode) + +;;; Code: + +(require 'dash) +(require 'etags) +(require 'rust-mode) +(require 's) +(require 'f) +(require 'thingatpt) +(require 'button) +(require 'help-mode) + +(defgroup racer nil + "Code completion, goto-definition and docs browsing for Rust via racer." + :link '(url-link "https://github.com/racer-rust/emacs-racer/") + :group 'rust-mode) + +(defcustom racer-cmd + (or (executable-find "racer") + (f-expand "~/.cargo/bin/racer") + "/usr/local/bin/racer") + "Path to the racer binary." + :type 'file + :group 'racer) + +(defcustom racer-rust-src-path + (or + (getenv "RUST_SRC_PATH") + (when (executable-find "rustc") + (let* ((sysroot (s-trim-right + (shell-command-to-string + (format "%s --print sysroot" (executable-find "rustc"))))) + (src-path (f-join sysroot "lib/rustlib/src/rust/src"))) + (when (file-exists-p src-path) + src-path) + src-path)) + "/usr/local/src/rust/src") + + "Path to the rust source tree. +If nil, we will query $RUST_SRC_PATH at runtime. +If $RUST_SRC_PATH is not set, look for rust source in rustup's install directory." + :type 'file + :group 'racer) + +(defcustom racer-cargo-home + (or + (getenv "CARGO_HOME") + "~/.cargo") + "Path to your current cargo home. Usually `~/.cargo'. +If nil, we will query $CARGO_HOME at runtime." + :type 'file + :group 'racer) + +(defun racer--cargo-project-root () + "Find the root of the current Cargo project." + (let ((root (locate-dominating-file (or (buffer-file-name (buffer-base-buffer)) default-directory) + "Cargo.toml"))) + (and root (file-truename root)))) + +(defun racer--header (text) + "Helper function for adding text properties to TEXT." + (propertize text 'face 'racer-help-heading-face)) + +(defvar racer--prev-state nil) + +(defun racer-debug () + "Open a buffer describing the last racer command run. +Helps users find configuration issues, or file bugs on +racer or racer.el." + (interactive) + (unless racer--prev-state + (user-error "Must run a racer command before debugging")) + (let ((buf (get-buffer-create "*racer-debug*")) + (inhibit-read-only t)) + (with-current-buffer buf + (erase-buffer) + (setq buffer-read-only t) + (let* ((process-environment + (plist-get racer--prev-state :process-environment)) + (rust-src-path-used + (--first (s-prefix-p "RUST_SRC_PATH=" it) process-environment)) + (cargo-home-used + (--first (s-prefix-p "CARGO_HOME=" it) process-environment)) + (stdout (plist-get racer--prev-state :stdout)) + (stderr (plist-get racer--prev-state :stderr))) + (insert + ;; Summarise the actual command that we run. + (racer--header "The last racer command was:\n\n") + (format "$ cd %s\n" + (plist-get racer--prev-state :default-directory)) + (format "$ export %s\n" cargo-home-used) + (format "$ export %s\n" rust-src-path-used) + (format "$ %s %s\n\n" + (plist-get racer--prev-state :program) + (s-join " " (plist-get racer--prev-state :args))) + + ;; Describe the exit code and outputs. + (racer--header + (format "This command terminated with exit code %s.\n\n" + (plist-get racer--prev-state :exit-code))) + (if (s-blank? stdout) + (racer--header "No output on stdout.\n\n") + (format "%s\n\n%s\n\n" + (racer--header "stdout:") + (s-trim-right stdout))) + (if (s-blank? stderr) + (racer--header "No output on stderr.\n\n") + (format "%s\n\n%s\n\n" + (racer--header "stderr:") + (s-trim-right stderr))) + + ;; Give copy-paste instructions for reproducing any errors + ;; the user has seen. + (racer--header + (s-word-wrap 60 "The temporary file will have been deleted. You should be able to reproduce the same output from racer with the following command:\n\n")) + (format "$ %s %s %s %s\n\n" cargo-home-used rust-src-path-used + (plist-get racer--prev-state :program) + (s-join " " + (-drop-last 1 (plist-get racer--prev-state :args)))) + + ;; Tell the user what to do next if they have problems. + (racer--header "Please report bugs ") + (racer--url-button "on GitHub" "https://github.com/racer-rust/emacs-racer/issues/new") + (racer--header ".")))) + (switch-to-buffer buf) + (goto-char (point-min)))) + +(defun racer--call (command &rest args) + "Call racer command COMMAND with args ARGS. +Return stdout if COMMAND exits normally, otherwise show an +error." + (let ((rust-src-path (or racer-rust-src-path (getenv "RUST_SRC_PATH"))) + (cargo-home (or racer-cargo-home (getenv "CARGO_HOME")))) + (when (null rust-src-path) + (user-error "You need to set `racer-rust-src-path' or `RUST_SRC_PATH'")) + (unless (file-exists-p rust-src-path) + (user-error "No such directory: %s. Please set `racer-rust-src-path' or `RUST_SRC_PATH'" + rust-src-path)) + (let ((default-directory (or (racer--cargo-project-root) default-directory)) + (process-environment (append (list + (format "RUST_SRC_PATH=%s" (expand-file-name rust-src-path)) + (format "CARGO_HOME=%s" (expand-file-name cargo-home))) + process-environment))) + (-let [(exit-code stdout _stderr) + (racer--shell-command racer-cmd (cons command args))] + ;; Use `equal' instead of `zero' as exit-code can be a string + ;; "Aborted" if racer crashes. + (unless (equal 0 exit-code) + (user-error "%s exited with %s. `M-x racer-debug' for more info" + racer-cmd exit-code)) + stdout)))) + +(defmacro racer--with-temporary-file (path-sym &rest body) + "Create a temporary file, and bind its path to PATH-SYM. +Evaluate BODY, then delete the temporary file." + (declare (indent 1) (debug (symbolp body))) + `(let ((,path-sym (make-temp-file "racer"))) + (unwind-protect + (progn ,@body) + (delete-file ,path-sym)))) + +(defun racer--slurp (file) + "Return the contents of FILE as a string." + (with-temp-buffer + (insert-file-contents-literally file) + (buffer-string))) + +(defun racer--shell-command (program args) + "Execute PROGRAM with ARGS. +Return a list (exit-code stdout stderr)." + (racer--with-temporary-file tmp-file-for-stderr + (let (exit-code stdout stderr) + ;; Create a temporary buffer for `call-process` to write stdout + ;; into. + (with-temp-buffer + (setq exit-code + (apply #'call-process program nil + (list (current-buffer) tmp-file-for-stderr) + nil args)) + (setq stdout (buffer-string))) + (setq stderr (racer--slurp tmp-file-for-stderr)) + (setq racer--prev-state + (list + :program program + :args args + :exit-code exit-code + :stdout stdout + :stderr stderr + :default-directory default-directory + :process-environment process-environment)) + (list exit-code stdout stderr)))) + +(defun racer--call-at-point (command) + "Call racer command COMMAND at point of current buffer. +Return a list of all the lines returned by the command." + (racer--with-temporary-file tmp-file + (write-region nil nil tmp-file nil 'silent) + (s-lines + (s-trim-right + (racer--call command + (number-to-string (line-number-at-pos)) + (number-to-string (racer--current-column)) + (buffer-file-name (buffer-base-buffer)) + tmp-file))))) + +(defun racer--read-rust-string (string) + "Convert STRING, a rust string literal, to an elisp string." + (when string + (->> string + ;; Remove outer double quotes. + (s-chop-prefix "\"") + (s-chop-suffix "\"") + ;; Replace escaped characters. + (s-replace "\\n" "\n") + (s-replace "\\\"" "\"") + (s-replace "\\'" "'") + (s-replace "\\;" ";")))) + +(defun racer--split-parts (raw-output) + "Given RAW-OUTPUT from racer, split on semicolons and doublequotes. +Unescape strings as necessary." + (let ((parts nil) + (current "") + (i 0)) + (while (< i (length raw-output)) + (let ((char (elt raw-output i)) + (prev-char (and (> i 0) (elt raw-output (1- i))))) + (cond + ;; A semicolon that wasn't escaped, start a new part. + ((and (equal char ?\;) (not (equal prev-char ?\\))) + (push current parts) + (setq current "")) + (t + (setq current (concat current (string char)))))) + (setq i (1+ i))) + (push current parts) + (mapcar #'racer--read-rust-string (nreverse parts)))) + +(defun racer--split-snippet-match (line) + "Given LINE, a string \"MATCH ...\" from complete-with-snippet, +split it into its constituent parts." + (let* ((match-parts (racer--split-parts line)) + (docstring (nth 7 match-parts))) + (when (and match-parts (equal (length match-parts) 8)) + (list :name (s-chop-prefix "MATCH " (nth 0 match-parts)) + :line (string-to-number (nth 2 match-parts)) + :column (string-to-number (nth 3 match-parts)) + :path (nth 4 match-parts) + ;; Struct or Function: + :kind (nth 5 match-parts) + :signature (nth 6 match-parts) + :docstring (if (> (length docstring) 0) docstring nil))))) + +(defun racer--describe-at-point (name) + "Get a description of the symbol at point matching NAME. +If there are multiple possibilities with this NAME, prompt +the user to choose." + (let* ((output-lines (save-excursion + ;; Move to the end of the current symbol, to + ;; increase racer accuracy. + (skip-syntax-forward "w_") + (racer--call-at-point "complete-with-snippet"))) + (all-matches (--map (when (s-starts-with-p "MATCH " it) + (racer--split-snippet-match it)) + output-lines)) + (relevant-matches (--filter (equal (plist-get it :name) name) + all-matches))) + (if (> (length relevant-matches) 1) + ;; We might have multiple matches with the same name but + ;; different types. E.g. Vec::from. + (let ((signature + (completing-read "Multiple matches: " + (--map (plist-get it :signature) relevant-matches)))) + (--first (equal (plist-get it :signature) signature) relevant-matches)) + (-first-item relevant-matches)))) + +(defun racer--help-buf (contents) + "Create a *Racer Help* buffer with CONTENTS." + (let ((buf (get-buffer-create "*Racer Help*")) + ;; If the buffer already existed, we need to be able to + ;; override `buffer-read-only'. + (inhibit-read-only t)) + (with-current-buffer buf + (erase-buffer) + (insert contents) + (setq buffer-read-only t) + (goto-char (point-min)) + (racer-help-mode)) + buf)) + +(defface racer-help-heading-face + '((t :weight bold)) + "Face for markdown headings in *Racer Help* buffers.") + +(defun racer--url-p (target) + "Return t if TARGET looks like a fully qualified URL." + (not (null + (string-match-p (rx bol "http" (? "s") "://") target)))) + +(defun racer--propertize-links (markdown) + "Propertize links in MARKDOWN." + (replace-regexp-in-string + ;; Text of the form [foo](http://example.com) + (rx "[" (group (+? (not (any "]")))) "](" (group (+? anything)) ")") + ;; For every match: + (lambda (whole-match) + ;; Extract link and target. + (let ((link-text (match-string 1 whole-match)) + (link-target (match-string 2 whole-match))) + ;; If it's a web URL, use a clickable link. + (if (racer--url-p link-target) + (racer--url-button link-text link-target) + ;; Otherwise, just discard the target. + link-text))) + markdown)) + +(defun racer--propertize-all-inline-code (markdown) + "Given a single line MARKDOWN, replace all instances of `foo` or +\[`foo`\] with a propertized string." + (let ((highlight-group + (lambda (whole-match) + (racer--syntax-highlight (match-string 1 whole-match))))) + (->> markdown + (replace-regexp-in-string + (rx "[`" (group (+? anything)) "`]") + highlight-group) + (replace-regexp-in-string + (rx "`" (group (+? anything)) "`") + highlight-group)))) + +(defun racer--indent-block (str) + "Indent every line in STR." + (s-join "\n" (--map (concat " " it) (s-lines str)))) + +(defun racer--trim-newlines (str) + "Remove newlines from the start and end of STR." + (->> str + (s-chop-prefix "\n") + (s-chop-suffix "\n"))) + +(defun racer--remove-footnote-links (str) + "Remove footnote links from markdown STR." + (->> (s-lines str) + (--remove (string-match-p (rx bol "[`" (+? anything) "`]: ") it)) + (s-join "\n") + ;; Collapse consecutive blank lines caused by removing footnotes. + (s-replace "\n\n\n" "\n\n"))) + +(defun racer--docstring-sections (docstring) + "Split DOCSTRING into text, code and heading sections." + (let* ((sections nil) + (current-section-lines nil) + (section-type :text) + ;; Helper function. + (finish-current-section + (lambda () + (when current-section-lines + (let ((current-section + (s-join "\n" (nreverse current-section-lines)))) + (unless (s-blank? current-section) + (push (list section-type current-section) sections)) + (setq current-section-lines nil)))))) + (dolist (line (s-lines docstring)) + (cond + ;; If this is a closing ``` + ((and (s-starts-with-p "```" line) (eq section-type :code)) + (push line current-section-lines) + (funcall finish-current-section) + (setq section-type :text)) + ;; If this is an opening ``` + ((s-starts-with-p "```" line) + (funcall finish-current-section) + (push line current-section-lines) + (setq section-type :code)) + ;; Headings + ((and (not (eq section-type :code)) (s-starts-with-p "# " line)) + (funcall finish-current-section) + (push (list :heading line) sections)) + ;; Normal text. + (t + (push line current-section-lines)))) + (funcall finish-current-section) + (nreverse sections))) + +(defun racer--clean-code-section (section) + "Given a SECTION, a markdown code block, remove +fenced code delimiters and code annotations." + (->> (s-lines section) + (-drop 1) + (-drop-last 1) + ;; Ignore annotations like # #[allow(dead_code)] + (--remove (s-starts-with-p "# " it)) + (s-join "\n"))) + +(defun racer--propertize-docstring (docstring) + "Replace markdown syntax in DOCSTRING with text properties." + (let* ((sections (racer--docstring-sections docstring)) + (propertized-sections + (--map (-let [(section-type section) it] + ;; Remove trailing newlines, so we can ensure we + ;; have consistent blank lines between sections. + (racer--trim-newlines + (pcase section-type + (:text + (racer--propertize-all-inline-code + (racer--propertize-links + (racer--remove-footnote-links + section)))) + (:code + (racer--indent-block + (racer--syntax-highlight + (racer--clean-code-section section)))) + (:heading + (racer--header + (s-chop-prefix "# " section)))))) + sections))) + (s-join "\n\n" propertized-sections))) + +(defun racer--find-file (path line column) + "Open PATH and move point to LINE and COLUMN." + (find-file path) + (goto-char (point-min)) + (forward-line (1- line)) + (forward-char column)) + +(defun racer--button-go-to-src (button) + (racer--find-file + (button-get button 'path) + (button-get button 'line) + (button-get button 'column))) + +(define-button-type 'racer-src-button + 'action 'racer--button-go-to-src + 'follow-link t + 'help-echo "Go to definition") + +(defun racer--url-button (text url) + "Return a button that opens a browser at URL." + (with-temp-buffer + (insert-text-button + text + :type 'help-url + 'help-args (list url)) + (buffer-string))) + +(defun racer--src-button (path line column) + "Return a button that navigates to PATH at LINE number and +COLUMN number." + ;; Convert "/foo/bar/baz/foo.rs" to "baz/foo.rs" + (let* ((filename (f-filename path)) + (parent-dir (f-filename (f-parent path))) + (short-path (f-join parent-dir filename))) + (with-temp-buffer + (insert-text-button + short-path + :type 'racer-src-button + 'path path + 'line line + 'column column) + (buffer-string)))) + +(defun racer--kind-description (raw-kind) + "Human friendly description of a rust kind. +For example, 'EnumKind' -> 'an enum kind'." + (let* ((parts (s-split-words raw-kind)) + (description (s-join " " (--map (downcase it) parts))) + (a (if (string-match-p (rx bos (or "a" "e" "i" "o" "u")) description) + "an" "a"))) + (format "%s %s" a description))) + +(defun racer--describe (name) + "Return a *Racer Help* buffer for the function or type at point. +If there are multiple candidates at point, use NAME to find the +correct value." + (let ((description (racer--describe-at-point name))) + (when description + (let* ((name (plist-get description :name)) + (raw-docstring (plist-get description :docstring)) + (docstring (if raw-docstring + (racer--propertize-docstring raw-docstring) + "Not documented.")) + (kind (plist-get description :kind))) + (racer--help-buf + (format + "%s is %s defined in %s.\n\n%s%s" + name + (racer--kind-description kind) + (racer--src-button + (plist-get description :path) + (plist-get description :line) + (plist-get description :column)) + (if (equal kind "Module") + ;; No point showing the 'signature' of modules, which is + ;; just their full path. + "" + (format " %s\n\n" (racer--syntax-highlight (plist-get description :signature)))) + docstring)))))) + +(defun racer-describe () + "Show a *Racer Help* buffer for the function or type at point." + (interactive) + (let ((buf (racer--describe (thing-at-point 'symbol)))) + (if buf + (temp-buffer-window-show buf) + (user-error "No function or type found at point")))) + +(defvar racer-help-mode-map + (let ((map (make-sparse-keymap))) + (set-keymap-parent map (make-composed-keymap button-buffer-map + special-mode-map)) + map) + "Keymap for racer help mode.") + +(define-derived-mode racer-help-mode fundamental-mode + "Racer-Help" + "Major mode for *Racer Help* buffers. + +Commands: +\\{racer-help-mode-map}") + +(defcustom racer-complete-in-comments + nil + "If non-nil, query racer for completions inside comments too." + :type 'boolean + :group 'racer) + +(defun racer-complete-at-point () + "Complete the symbol at point." + (let* ((ppss (syntax-ppss)) + (in-string (nth 3 ppss)) + (in-comment (nth 4 ppss))) + (when (and + (not in-string) + (or (not in-comment) racer-complete-in-comments)) + (let* ((bounds (bounds-of-thing-at-point 'symbol)) + (beg (or (car bounds) (point))) + (end (or (cdr bounds) (point)))) + (list beg end + (completion-table-dynamic #'racer-complete) + :annotation-function #'racer-complete--annotation + :company-prefix-length (racer-complete--prefix-p beg end) + :company-docsig #'racer-complete--docsig + :company-doc-buffer #'racer--describe + :company-location #'racer-complete--location))))) + +(defun racer--file-and-parent (path) + "Convert /foo/bar/baz/q.txt to baz/q.txt." + (let ((file (f-filename path)) + (parent (f-filename (f-parent path)))) + (f-join parent file))) + +(defun racer-complete (&optional _ignore) + "Completion candidates at point." + (->> (racer--call-at-point "complete") + (--filter (s-starts-with? "MATCH" it)) + (--map (-let [(name line col file matchtype ctx) + (s-split-up-to "," (s-chop-prefix "MATCH " it) 5)] + (put-text-property 0 1 'line (string-to-number line) name) + (put-text-property 0 1 'col (string-to-number col) name) + (put-text-property 0 1 'file file name) + (put-text-property 0 1 'matchtype matchtype name) + (put-text-property 0 1 'ctx ctx name) + name)))) + +(defun racer--trim-up-to (needle s) + "Return content after the occurrence of NEEDLE in S." + (-if-let (idx (s-index-of needle s)) + (substring s (+ idx (length needle))) + s)) + +(defun racer-complete--prefix-p (beg _end) + "Return t if a completion should be triggered for a prefix between BEG and END." + (save-excursion + (goto-char beg) + ;; If we're at the beginning of the buffer, we can't look back 2 + ;; characters. + (ignore-errors + (looking-back "\\.\\|::" 2)))) + +(defun racer-complete--annotation (arg) + "Return an annotation for completion candidate ARG." + (let* ((ctx (get-text-property 0 'ctx arg)) + (type (get-text-property 0 'matchtype arg)) + (pretty-ctx + (pcase type + ("Module" + (if (string= arg ctx) + "" + (concat " " (racer--file-and-parent ctx)))) + ("StructField" + (concat " " ctx)) + (_ + (->> ctx + (racer--trim-up-to arg) + (s-chop-suffixes '(" {" "," ";"))))))) + (format "%s : %s" pretty-ctx type))) + +(defun racer-complete--docsig (arg) + "Return a signature for completion candidate ARG." + (racer--syntax-highlight (format "%s" (get-text-property 0 'ctx arg)))) + +(defun racer-complete--location (arg) + "Return location of completion candidate ARG." + (cons (get-text-property 0 'file arg) + (get-text-property 0 'line arg))) + +(defun racer--current-column () + "Get the current column based on underlying character representation." + (length (buffer-substring-no-properties + (line-beginning-position) (point)))) + +;;;###autoload +(defun racer-find-definition () + "Run the racer find-definition command and process the results." + (interactive) + (-if-let (match (--first (s-starts-with? "MATCH" it) + (racer--call-at-point "find-definition"))) + (-let [(_name line col file _matchtype _ctx) + (s-split-up-to "," (s-chop-prefix "MATCH " match) 5)] + (if (fboundp 'xref-push-marker-stack) + (xref-push-marker-stack) + (with-no-warnings + (ring-insert find-tag-marker-ring (point-marker)))) + (racer--find-file file (string-to-number line) (string-to-number col))) + (error "No definition found"))) + +(defun racer--syntax-highlight (str) + "Apply font-lock properties to a string STR of Rust code." + (let (result) + ;; Load all of STR in a rust-mode buffer, and use its + ;; highlighting. + (with-temp-buffer + (insert str) + (delay-mode-hooks (rust-mode)) + (if (fboundp 'font-lock-ensure) + (font-lock-ensure) + (with-no-warnings + (font-lock-fontify-buffer))) + (setq result (buffer-string))) + (when (and + ;; If we haven't applied any properties yet, + (null (text-properties-at 0 result)) + ;; and if it's a standalone symbol, then assume it's a + ;; variable. + (string-match-p (rx bos (+ (any lower "_")) eos) str)) + (setq result (propertize str 'face 'font-lock-variable-name-face))) + result)) + +(defun racer--goto-func-name () + "If point is inside a function call, move to the function name. + +foo(bar, |baz); -> foo|(bar, baz);" + (let ((last-paren-pos (nth 1 (syntax-ppss))) + (start-pos (point))) + (when last-paren-pos + ;; Move to just before the last paren. + (goto-char last-paren-pos) + ;; If we're inside a round paren, we're inside a function call. + (unless (looking-at "(") + ;; Otherwise, return to our start position, as point may have been on a + ;; function already: + ;; foo|(bar, baz); + (goto-char start-pos))))) + +(defun racer--relative (path &optional directory) + "Return PATH relative to DIRECTORY (`default-directory' by default). +If PATH is not in DIRECTORY, just abbreviate it." + (unless directory + (setq directory default-directory)) + (if (s-starts-with? directory path) + (concat "./" (f-relative path directory)) + (f-abbrev path))) + +(defun racer-eldoc () + "Show eldoc for context at point." + (save-excursion + (racer--goto-func-name) + ;; If there's a variable at point: + (-when-let* ((rust-sym (symbol-at-point)) + (comp-possibilities (racer-complete)) + (matching-possibility + (--find (string= it (symbol-name rust-sym)) comp-possibilities)) + (prototype (get-text-property 0 'ctx matching-possibility)) + (matchtype (get-text-property 0 'matchtype matching-possibility))) + (if (equal matchtype "Module") + (racer--relative prototype) + ;; Syntax highlight function signatures. + (racer--syntax-highlight prototype))))) + +(defvar racer-mode-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "M-.") #'racer-find-definition) + (define-key map (kbd "M-,") #'pop-tag-mark) + map)) + +;;;###autoload +(define-minor-mode racer-mode + "Minor mode for racer." + :lighter " racer" + :keymap racer-mode-map + (setq-local eldoc-documentation-function #'racer-eldoc) + (set (make-local-variable 'completion-at-point-functions) nil) + (add-hook 'completion-at-point-functions #'racer-complete-at-point)) + +(define-obsolete-function-alias 'racer-turn-on-eldoc 'eldoc-mode) +(define-obsolete-function-alias 'racer-activate 'racer-mode) + +(provide 'racer) +;;; racer.el ends here diff --git a/test/racer-test.el b/test/racer-test.el new file mode 100644 index 0000000..67ed739 --- /dev/null +++ b/test/racer-test.el @@ -0,0 +1,340 @@ +(require 'racer) +(require 'ert) + +(ert-deftest racer--file-and-parent () + (should + (equal + (racer--file-and-parent "/foo/bar/baz/q.txt") + "baz/q.txt"))) + +(ert-deftest racer--goto-func-name () + (with-temp-buffer + ;; Insert a function call. + (insert "foo(bar, baz);") + ;; Move to the start of the second argument. + (goto-char (point-min)) + (while (not (looking-at "baz")) + (forward-char 1)) + ;; We should be at the end of foo. + (racer--goto-func-name) + (should (equal (point) 4)))) + +(ert-deftest racer--read-rust-string () + (should + (equal + (racer--read-rust-string "\"foo \\n \\\" \\' \\; bar") + "foo \n \" ' ; bar"))) + +(ert-deftest racer--help-buf () + (should + (bufferp + (racer--help-buf "foo bar.")))) + +(ert-deftest racer--propertize-all-inline-code () + (should + (equal-including-properties + (racer--propertize-all-inline-code "foo `bar` [`baz`] biz") + #("foo bar baz biz" 4 7 (face font-lock-variable-name-face) 8 11 (face font-lock-variable-name-face))))) + +(ert-deftest racer--propertize-docstring-code () + "Ensure we render code blocks with indents." + (should + (equal + (racer--propertize-docstring "foo + +```rust +func(); +``` + +bar. + +```text +1 +2 +``` +") + "foo + + func(); + +bar. + + 1 + 2"))) + +(defun racer--remove-properties (text) + "Remove all the properties on TEXT. +Tests that use `equal' ignore properties, but +this makes the ert failure descriptions clearer." + (with-temp-buffer + (insert text) + (buffer-substring-no-properties (point-min) (point-max)))) + +(ert-deftest racer--propertize-docstring-code-annotations () + "Ignore '# foo' lines in code sections in docstrings." + (should + (equal + (racer--remove-properties + (racer--propertize-docstring "``` +# #[allow(dead_code)] +#[derive(Debug)] +struct Foo {} +```")) + " #[derive(Debug)] + struct Foo {}"))) + +(ert-deftest racer--propertize-docstring-code-newlines () + "Ensure we always have a blank line before a code block." + + (should + (equal + (racer--remove-properties + (racer--propertize-docstring "``` +bar1(); +``` +foo +``` +bar2(); +```")) + " bar1(); + +foo + + bar2();"))) + +(ert-deftest racer--propertize-docstring-newlines () + "Ensure we still handle links that have been split over two lines." + (should + (equal + (racer--propertize-docstring "[foo\nbar](baz)") + "foo\nbar"))) + +(ert-deftest racer--propertize-docstring-link-after-attribute () + "We should not confuse attributes with links." + (should + (equal + (racer--remove-properties + (racer--propertize-docstring "Result is annotated with the #[must_use] attribute, +by the [`Write`](../../std/io/trait.Write.html) trait")) + "Result is annotated with the #[must_use] attribute, +by the Write trait"))) + +(ert-deftest racer--propertize-docstring-footnotes () + "Ensure we discard footnote links." + (should + (equal + (racer--remove-properties + (racer--propertize-docstring "foo [`str`] bar + +\[`str`]: ../../std/primitive.str.html + +baz.")) + "foo str bar + +baz."))) + +(ert-deftest racer--propertize-docstring-urls () + "Ensure we render buttons for links with urls." + (let ((result (racer--propertize-docstring "[foo](http://example.com)"))) + (should (equal result "foo")) + (should (equal (get-text-property 0 'button result) '(t)))) + (should + (equal-including-properties + (racer--propertize-docstring "[foo](#bar)") + "foo"))) + +(ert-deftest racer--propertize-docstring-heading () + "Ensure we render markdown headings correctly." + (should + (equal-including-properties + (racer--propertize-docstring "# foo") + #("foo" 0 3 (face racer-help-heading-face))))) + +(ert-deftest racer--split-parts () + "Ensure we correctly parse racer CSV." + (should + (equal (racer--split-parts "foo;bar") + '("foo" "bar"))) + (should + (equal (racer--split-parts "foo;\"bar\"") + '("foo" "bar"))) + (should + (equal (racer--split-parts "foo\\;bar;baz") + '("foo;bar" "baz")))) + +(ert-deftest racer--describe-at-point-name () + "Ensure we extract the correct name in `racer--describe-at-point'." + (cl-letf (((symbol-function 'racer--call) + (lambda (&rest _) + (s-join + "\n" + (list + "PREFIX 36,37,n" + "MATCH new;new();294;11;/home/user/src/rustc-1.10.0/src/libstd/../libcollections/vec.rs;Function;pub fn new() -> Vec;\"Constructs a new, empty `Vec`.\"" + "END"))))) + (should + (equal (plist-get (racer--describe-at-point "new") :name) + "new")))) + +(ert-deftest racer--describe-at-point-nil-docstring () + "If there's no docstring, racer--describe-at-point should use nil." + (cl-letf (((symbol-function 'racer--call) + (lambda (&rest _) + (s-join + "\n" + (list + "PREFIX 36,37,n" + "MATCH new;new();294;11;/home/user/src/rustc-1.10.0/src/libstd/../libcollections/vec.rs;Function;pub fn new() -> Vec;\"\"" + "END"))))) + (should + (null (plist-get (racer--describe-at-point "new") :docstring))))) + +(ert-deftest racer--describe-at-point-shortest () + "If there are multiple matches, we want the shortest. + +Since we've moved point to the end of symbol, the other functions just happen to have the same prefix." + (cl-letf (((symbol-function 'racer--call) + (lambda (&rest _) + (s-join + "\n" + (list + "PREFIX 36,37,n" + "MATCH new_bar;new_bar();294;11;/home/user/src/rustc-1.10.0/src/libstd/../libcollections/vec.rs;Function;pub fn new() -> Vec;\"\"" + "MATCH new;new();294;11;/home/user/src/rustc-1.10.0/src/libstd/../libcollections/vec.rs;Function;pub fn new() -> Vec;\"\"" + "MATCH new_foo;new_foo();294;11;/home/user/src/rustc-1.10.0/src/libstd/../libcollections/vec.rs;Function;pub fn new() -> Vec;\"\"" + "END"))))) + (should + (equal (plist-get (racer--describe-at-point "new") :name) + "new")))) + +(ert-deftest racer--syntax-highlight () + "Ensure we highlight code blocks and snippets correctly." + ;; Highlighting types should always use the type face. + (should + (equal-including-properties + (racer--syntax-highlight "Foo") + #("Foo" 0 3 (face font-lock-type-face)))) + ;; Highlighting keywords. + (should + (equal-including-properties + (racer--syntax-highlight "false") + #("false" 0 5 (face font-lock-keyword-face)))) + ;; Simple variables should be highlighted, even when standalone. + (should + (equal-including-properties + (racer--syntax-highlight "foo") + #("foo" 0 3 (face font-lock-variable-name-face))))) + +(ert-deftest racer-describe () + "Smoke test for `racer-describe'." + (cl-letf (((symbol-function 'racer--call) + (lambda (&rest _) + (s-join + "\n" + (list + "PREFIX 36,37,n" + "MATCH foo;foo();294;11;/home/user/src/rustc-1.10.0/src/libstd/../libcollections/vec.rs;Function;pub fn new() -> Vec;\"\"" + "END"))))) + (with-temp-buffer + (rust-mode) + (insert "foo();") + (goto-char (point-min)) + (racer-describe)))) + +(ert-deftest racer-describe-test-description () + "Ensure we write the correct text summary in the first line +of the racer describe buffer." + (cl-letf (((symbol-function 'racer--call) + (lambda (&rest _) + "PREFIX 8,10,Ok\nMATCH Ok;Ok;253;4;/home/user/src/rustc-1.10.0/src/libstd/../libcore/result.rs;EnumVariant;Ok(#[stable(feature = \"rust1\", since = \"1.0.0\")] T),;\"`Result` is a type that represents either success (`Ok`) or failure (`Err`).\n\nSee the [`std::result`](index.html) module documentation for details.\nEND\n"))) + (with-temp-buffer + (rust-mode) + (insert "Ok") + (goto-char (point-min)) + (switch-to-buffer (racer--describe "Ok")) + (let ((first-line (-first-item (s-lines (buffer-substring-no-properties + (point-min) (point-max)))))) + (should + (equal first-line + "Ok is an enum variant defined in libcore/result.rs.")))))) + +(ert-deftest racer-describe-module-description () + "Ensure we write the correct text summary in the first line +of the racer describe buffer." + (cl-letf (((symbol-function 'racer--call) + (lambda (&rest _) + "PREFIX 13,20,matches\nMATCH matches;matches;1;0;/home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/matches-0.1.2/lib.rs;Module;/home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/matches-0.1.2/lib.rs;\"\"\nEND\n"))) + (with-temp-buffer + (rust-mode) + (insert "extern crate matches;") + (goto-char (1- (point-max))) + (switch-to-buffer (racer--describe "matches")) + (should + (equal (racer--remove-properties (buffer-string)) + "matches is a module defined in matches-0.1.2/lib.rs. + +Not documented."))))) + +(ert-deftest racer-describe-uses-whole-symbol () + "Racer uses the symbol *before* point, so make sure we move point to +the end of the current symbol. + +Otherwise, if the point is at the start of the symbol, we don't find anything." + (let (point-during-call) + (cl-letf (((symbol-function 'racer--call) + (lambda (&rest _) + (setq point-during-call (point)) + (s-join + "\n" + (list + "PREFIX 36,37,n" + "MATCH foo;foo();294;11;/home/user/src/rustc-1.10.0/src/libstd/../libcollections/vec.rs;Function;pub fn new() -> Vec;\"\"" + "END"))))) + (with-temp-buffer + (rust-mode) + (insert "foo();") + (goto-char (point-min)) + ;; This should move point to the end of 'foo' before calling + ;; racer--call. + (racer-describe)) + (should (equal point-during-call 4))))) + +(ert-deftest racer-debug () + "Smoke test for `racer-debug'." + (let ((racer--prev-state + (list + :program "racer" + :args '("complete" "1" "2") + :exit-code 0 + :stdout "PREFIX 1,2,Ok\nMATCH FOO\nEND\n" + :stderr "" + :default-directory "/" + :process-environment + '("RUST_SRC_PATH=/home/user/src/rustc-1.10.0/src" + "CARGO_HOME=/home/user/.cargo")))) + (racer-debug))) + +(ert-deftest racer--relative () + ;; Common case: the path is relative to the directory. + (should (equal (racer--relative "/foo/bar" "/foo") + "./bar")) + ;; Path is not relative, but it's a home directory. + (should (equal (racer--relative (f-expand "~/foo") + (f-expand "~/bar")) + "~/foo")) + ;; Path is not relative and not a home directory. + (should (equal (racer--relative "/foo/bar" "/quux") + "/foo/bar"))) + +(ert-deftest racer-eldoc-no-completions () + "`racer-eldoc' should handle no completions gracefully." + (cl-letf (((symbol-function 'racer--call) + (lambda (&rest _) + "PREFIX 4,4,\nEND\n"))) + (with-temp-buffer + (rust-mode) + (insert "use ") + ;; Midle of the 'use'. + (goto-char 2) + ;; Should return nil without crashing. + (should (null (racer-eldoc)))))) diff --git a/test/test-helper.el b/test/test-helper.el new file mode 100644 index 0000000..89fcec8 --- /dev/null +++ b/test/test-helper.el @@ -0,0 +1,12 @@ +;;; test-helper --- Test helper for racer + +;;; Commentary: + +;;; Code: + +(require 'undercover) +(undercover "racer.el" + (:exclude "*-test.el") + (:report-file "/tmp/undercover-report.json")) + +;;; test-helper.el ends here