From 7841d3ba6a23b71ca0d596c80faacd0d1ef342a8 Mon Sep 17 00:00:00 2001 From: Bruno Tavares Date: Tue, 4 Sep 2018 10:45:10 -0300 Subject: [PATCH] Introduces Dart layer This is a initial implementation of a Dart later. A [previous implementation] has been deprecated, using a forked version of `dart-mode`. This layer uses the [dart-mode] linked on the [Dart tools] page. The layer works with a Flutter installation as well. Ideally, we would be able to offer a `lsp` backend as an option to use, instead of using the Dart Analyzer, but I'm still figuring out how to implement and integrate this. This layer has [some] [fixes] to make it work, and it is waiting for upstream to take patches. - Resolves https://github.com/syl20bnr/spacemacs/issues/8333 - Resolves https://github.com/syl20bnr/spacemacs/issues/8395 - Resolves https://github.com/syl20bnr/spacemacs/issues/10452 --- [previous implementation]: https://github.com/syl20bnr/spacemacs/pull/8406 [dart-mode]: https://github.com/bradyt/dart-mode [Dart tools]: https://www.dartlang.org/tools [some]: https://github.com/bradyt/dart-mode/pull/67 [fixes]: https://github.com/bradyt/dart-mode/pull/66 --- layers/+lang/dart/README.org | 94 +++++++++++++++++++++++++++++++++ layers/+lang/dart/config.el | 14 +++++ layers/+lang/dart/img/dart.png | Bin 0 -> 10115 bytes layers/+lang/dart/packages.el | 76 ++++++++++++++++++++++++++ 4 files changed, 184 insertions(+) create mode 100644 layers/+lang/dart/README.org create mode 100644 layers/+lang/dart/config.el create mode 100644 layers/+lang/dart/img/dart.png create mode 100644 layers/+lang/dart/packages.el diff --git a/layers/+lang/dart/README.org b/layers/+lang/dart/README.org new file mode 100644 index 000000000..9ab1ab39d --- /dev/null +++ b/layers/+lang/dart/README.org @@ -0,0 +1,94 @@ +#+TITLE: dart layer + +[[file:img/dart.png]] + +* Table of Contents :TOC_4_gh:noexport: +- [[#description][Description]] + - [[#features][Features:]] +- [[#install][Install]] + - [[#layer][Layer]] + - [[#dart-sdk-location][Dart SDK location]] + - [[#flutter-integration][Flutter integration]] +- [[#configuration][Configuration]] + - [[#use-analysis-server][Use analysis server]] + - [[#format-on-save][Format on save]] +- [[#key-bindings][Key bindings]] + - [[#normal-mode][Normal mode]] + - [[#insert-mode][Insert mode]] + - [[#popup-screens][Popup screens]] + +* Description + This layer adds support for Dart language, and could be optionally used for Flutter development as well. + +** Features: + - Syntax Highlight + - Error checking with ~flycheck~ + - Go to Definition + - Dart Analyzer integration + - Key bindings + +* Install +** Layer + To use this configuration layer, add it to your =~/.spacemacs=. You will need to + add =dart= to the existing =dotspacemacs-configuration-layers= list in this + file. + +** Dart SDK location + The layer itself will use the `dart` executable location if available on the execution path, but it is possible to define the location manually. + It should point to the folder, and end with `/`. + + #+BEGIN_SRC elisp + (dart :variables dart-sdk-path "~/path/to/dart-sdk/") + #+END_SRC + +*** Flutter integration + Flutter comes with a internal Dart SDK, which can be used to provide all the integration tools. + + #+BEGIN_SRC elisp + (dart :variables dart-sdk-path "/bin/cache/dart-sdk/") + #+END_SRC + +* Configuration + For more available variables check [[https://github.com/bradyt/dart-mode][dart-mode]] documentation. + +** Use analysis server + #+BEGIN_SRC elisp + (dart :variables dart-enable-analysis-server t) + #+END_SRC + +** Format on save + #+BEGIN_SRC elisp + (dart :variables dart-format-on-save t) + #+END_SRC + +* Key bindings +** Normal mode + Some of the commands will instantiate a new Dart Analyzer server if + necessary, while others work without using a Dart Analyzer connection. + + When ~dart-enable-analysis-server~ is enabled, most of the commands become Async, and there might be a delay when executing them. + + | Key Binding | Description | + |------------------------+---------------------------------------------------| + | ~SPC m h h~, ~SPC m ?~ | Displays hover information for the current point. | + | ~SPC m h b~ | Displays information at point on a new buffer. | + | ~gd~, ~SPC m g~ | Go to definition. | + | ~SPC m f f~ | Find reference at point. | + | ~SPC m f d~ | Find members declarations by name. | + | ~SPC m f r~ | Find members references by name. | + | ~SPC m f d~ | Find top-level declarations by name. | + | ~SPC m =~ | Format buffer | + +** Insert mode + + | Key Binding | Description | + |-------------+--------------------------------------------------| + | ~~ | Expand previous word using Analyzer if available | + | ~C-~ | Expand including parameters | + +** Popup screens + + | Key Binding | Description | + |-------------+-------------------------------------------| + | ~q~ | Close popup | + | ~gr~ | Execute last command to repopulate buffer | diff --git a/layers/+lang/dart/config.el b/layers/+lang/dart/config.el new file mode 100644 index 000000000..47a4ceb5c --- /dev/null +++ b/layers/+lang/dart/config.el @@ -0,0 +1,14 @@ +;;; config.el --- dart Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2018 Sylvain Benner & Contributors +;; +;; Author: Bruno Tavares +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(spacemacs|define-jump-handlers dart-mode) diff --git a/layers/+lang/dart/img/dart.png b/layers/+lang/dart/img/dart.png new file mode 100644 index 0000000000000000000000000000000000000000..ea196610af3598ef6b88e652d88b1d701a96e736 GIT binary patch literal 10115 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 E7uM}XGXMYp literal 0 HcmV?d00001 diff --git a/layers/+lang/dart/packages.el b/layers/+lang/dart/packages.el new file mode 100644 index 000000000..d1d222e0c --- /dev/null +++ b/layers/+lang/dart/packages.el @@ -0,0 +1,76 @@ +;;; packages.el --- dart layer packages file for Spacemacs. +;; +;; Copyright (c) 2012-2018 Sylvain Benner & Contributors +;; +;; Author: Bruno Tavares +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;;; Code: + +;; TODO: offer lsp integration +(defconst dart-packages + '(dart-mode + flycheck)) + +;; TODO: Remove when https://github.com/bradyt/dart-mode/pull/67 +(defun dart/trigger-hooks () + (run-hooks 'change-major-mode-after-body-hook)) + +(defun dart/show-buffer () + "Shows information at point on a new buffer" + (interactive) + (dart-show-hover 't)) + +(defun dart/init-dart-mode () + (use-package dart-mode + :defer t + :mode "\\.dart\\'" + :init + (progn + (spacemacs/declare-prefix-for-mode 'dart-mode "mf" "find") + (spacemacs/declare-prefix-for-mode 'dart-mode "mh" "help") + (spacemacs/set-leader-keys-for-major-mode 'dart-mode + "=" 'dart-format + "?" 'dart-show-hover + "g" 'dart-goto + "hh" 'dart-show-hover + "hb" 'dart/show-buffer + "ff" 'dart-find-refs + "fe" 'dart-find-member-decls + "fr" 'dart-find-member-refs + "fd" 'dart-find-top-level-decls) + + (add-to-list 'spacemacs-jump-handlers-dart-mode '(dart-goto :async t)) + + (evil-define-key 'insert dart-mode-map + (kbd "") 'dart-expand + (kbd "C-") 'dart-expand-parameters) + + (evil-set-initial-state 'dart-popup-mode 'motion) + (evil-define-key 'motion dart-popup-mode-map + (kbd "gr") 'dart-do-it-again) + + (add-hook 'dart-mode-hook #'dart/trigger-hooks)) + + :config + ;; TODO: Remove when fix lands + ;; https://github.com/bradyt/dart-mode/pull/66 + (defun dart-formatter-command () + "The command for running the Dart formatter. +This can be customized by setting `dart-formatter-command-override'." + (or dart-formatter-command-override + (when dart-sdk-path + (concat dart-sdk-path + (file-name-as-directory "bin") + (if (memq system-type '(ms-dos windows-nt)) + "dartfmt.exe" + "dartfmt")))))) + + (defun dart/post-init-flycheck () + (spacemacs/add-flycheck-mode 'dart-mode))) + +;;; packages.el ends here