diff --git a/modules/lang/dart/README.org b/modules/lang/dart/README.org new file mode 100644 index 000000000..df26b4e64 --- /dev/null +++ b/modules/lang/dart/README.org @@ -0,0 +1,104 @@ +#+TITLE: lang/dart +#+DATE: February 16, 2020 +#+SINCE: v3.0.0 +#+STARTUP: inlineimages nofold + +* Table of Contents :TOC_3:noexport: +- [[#description][Description]] + - [[#maintainers][Maintainers]] + - [[#module-flags][Module Flags]] + - [[#plugins][Plugins]] +- [[#prerequisites][Prerequisites]] + - [[#installing-dart-sdk][Installing Dart SDK]] + - [[#installing-flutter-sdk][Installing Flutter SDK]] +- [[#features][Features]] +- [[#configuration][Configuration]] + - [[#dart--flutter][Dart & Flutter]] + - [[#android][Android]] +- [[#troubleshooting][Troubleshooting]] + +* Description +[[https://dart.dev/][Dart]] is a client-optimized language by Google for fast apps on any platform. +It is fast and optimized for UI, Famous for the [[https://flutter.io/][Flutter]] framework, also +made by Google. Both Flutter and Dart are free and open-source. + +** Maintainers +This module has no dedicated maintainers. + +** Module Flags +The `dart` module wraps `dart-mode`, with LSP code completion for `.dart` files, +syntax highlighting, etc. Included is a `+lsp` flag for enabling LSP features, +and a `+flutter` flag for working with Flutter. + ++ =+lsp= Will start LSP automatically in `dart-mode-hook`. ++ =+flutter= Adds the `flutter` package and some settings for Flutter development. + +** Plugins ++ [[https://github.com/bradyt/dart-mode][dart-mode]] ++ [[https://github.com/amake/flutter.el][flutter.el]] + +* Prerequisites +Make sure that the Dart SDK is on your `PATH`, and if using Flutter, make sure +the Flutter binary is on your `PATH` as well. + +** Installing Dart SDK +Before starting note that Flutter SDK will have a version of Dart. Therefore, +there is no need to install Dart. If you want to use Flutter just see +the next part. + +The stable version of the SDK is in most major distributions repositories. +If you find it necessary to install any other version or build from source, +please refer to the official website at: https://dart.dev/get-dart + +On Debian (also Ubuntu and its derivations), you can simply install the SDK via: +#+BEGIN_SRC shell +sudo apt-get install dart +#+END_SRC +Or on Arch (and its derivations, like Manjaro), you can install it using: +#+BEGIN_SRC shell +sudo pacman -S dart +#+END_SRC +And finally in MacOS, the [[https://brew.sh/][Homebrew]] can come in handy. If you have it installed +just run: +#+BEGIN_SRC shell +brew tap dart-lang/dart +brew install dart#+END_SRC +#+END_SRC + +** Installing Flutter SDK +Due to complications with permissions, it is suggested not to use AUR or any +automatic installation tools for Flutter SDK. + +On any system just run the following commands to install Flutter, once you have +met dependencies named on [[https://flutter.dev/docs/get-started/install/][the site]]: +#+BEGIN_SRC shell +git clone https://github.com/flutter/flutter --branch stable # to download Flutter +export PATH="$PATH:$(pwd)/flutter/bin" # to add it to PATH +flutter doctor # for Dependency check and further instructions +#+END_SRC + +* Features ++ Syntax highlighting and formatting for `.dart` files provided by LSP ++ Emacs functions for running and debugging Flutter projects + +* Configuration +** Dart & Flutter +On Linux, the installers for Dart and Flutter use the `/opt` directory, and this +module assumes that. However, you may set `lsp-dart-sdk-dir` to your Dart +install directory, if it differs, to make sure LSP can find the language server +included with the Dart SDK. + +Alternatively, these variables shouldn't be necessary if you just include Dart +and Flutter on your `PATH` variable. +** Android +You will also need to setup your system for Android development if you intend to +use Flutter to develop mobile applications. Refer to your distributions package +manager for details. In most distributions the `/opt/android-sdk` directory is +used, and you might have to change some permissions in this directory since it's +owned by root. The [[https://wiki.archlinux.org/index.php/Android][Arch Linux wiki has a great guide on this here.]] + +* Troubleshooting +See the configuration section for information on the binaries for Dart and +Flutter. On new installs to the `/opt` directory, you will likely need to edit +the permissions of the `/opt/dart-sdk` and `/opt/flutter` directories (not to +mention the Android SDK, as discussed above). diff --git a/modules/lang/dart/config.el b/modules/lang/dart/config.el new file mode 100644 index 000000000..5c7b633f1 --- /dev/null +++ b/modules/lang/dart/config.el @@ -0,0 +1,18 @@ +;;; lang/dart/config.el -*- lexical-binding: t; -*- + +(after! dart-mode + (when (featurep! +lsp) + (add-hook 'dart-mode-local-vars-hook #'lsp!) + (when (and (featurep! +flutter) IS-LINUX) + (when-let (path (doom-glob "/opt/flutter/bin/cache/dart-sdk")) + (setq lsp-dart-sdk-dir path))))) + + + +(use-package! flutter + :when (featurep! +flutter) + :defer t + :config + (map! :map dart-mode-map + :localleader + "r" #'flutter-run-or-hot-reload)) diff --git a/modules/lang/dart/doctor.el b/modules/lang/dart/doctor.el new file mode 100644 index 000000000..521eddc32 --- /dev/null +++ b/modules/lang/dart/doctor.el @@ -0,0 +1,13 @@ +;;; lang/dart/doctor.el -*- lexical-binding: t; -*- + +(assert! (or (not (featurep! +lsp)) + (featurep! :tools lsp)) + "This module requires (:tools lsp)") + +(unless (executable-find "dart") + (warn! "Dart isn't on PATH.")) + +(when (featurep! +lsp) + (require 'dart-mode) + (unless (file-readable-p lsp-dart-sdk-dir) + (warn! "LSP Mode can't find lsp-dart-sdk-dir."))) diff --git a/modules/lang/dart/packages.el b/modules/lang/dart/packages.el new file mode 100644 index 000000000..71975f46f --- /dev/null +++ b/modules/lang/dart/packages.el @@ -0,0 +1,9 @@ +;; -*- no-byte-compile: t; -*- +;;; lang/dart/packages.el + +(package! dart-mode :pin "04fcd649f1") + +;; Optional module features + +(when (featurep! +flutter) + (package! flutter :pin "ec92a4df84"))