diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d17e60d..db1bc880 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how * feat(test): Add built-in `ecukes` test command (#236) * fix: Don't pollute outer programs (#239) * feat(generate/test): Add commands to setup test files (#243) +* feat: Add `docs` command (#245) ## 0.9.x > Released Nov 17, 2023 diff --git a/cmds/core/docs.js b/cmds/core/docs.js new file mode 100644 index 00000000..5bb15ed9 --- /dev/null +++ b/cmds/core/docs.js @@ -0,0 +1,42 @@ +/** + * Copyright (C) 2024 the Eask authors. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +"use strict"; + +exports.command = ['docs [names..]', 'doc [names..]']; +exports.desc = 'Build documentation'; +exports.builder = yargs => yargs + .positional( + '[names..]', { + description: 'specify source files to scan', + type: 'array', + }) + .options({ + 'destination': { + description: 'optional output destination', + requiresArg: true, + alias: 'dest', + type: 'string', + group: TITLE_CMD_OPTION, + }, + }); + +exports.handler = async (argv) => { + await UTIL.e_call(argv, 'core/docs' + , argv.names + , UTIL.def_flag(argv.dest, '--dest', argv.dest)); +}; diff --git a/docs/content/Getting-Started/Basic-Usage/_index.en.md b/docs/content/Getting-Started/Basic-Usage/_index.en.md index 96bc13d9..fcec8cbc 100644 --- a/docs/content/Getting-Started/Basic-Usage/_index.en.md +++ b/docs/content/Getting-Started/Basic-Usage/_index.en.md @@ -38,6 +38,7 @@ Commands: compile [names..] Byte compile all Emacs Lisp files in the package create Create a new elisp project docker [args..] Launch specified Emacs version in a Docker container + docs Build documentation [aliases: doc] emacs [args..] Execute emacs with the appropriate environment eval [form] Evaluate lisp form with a proper PATH path [patterns..] Print the PATH (exec-path) from workspace [aliases: exec-path] diff --git a/docs/content/Getting-Started/Basic-Usage/_index.zh-tw.md b/docs/content/Getting-Started/Basic-Usage/_index.zh-tw.md index d34564c5..71e1de71 100644 --- a/docs/content/Getting-Started/Basic-Usage/_index.zh-tw.md +++ b/docs/content/Getting-Started/Basic-Usage/_index.zh-tw.md @@ -5,7 +5,7 @@ weight: 250 Eask 的 CLI 功能齊全但易於使用,即使對於那些使用命令行的經驗非常有限的人也是如此。 -以下是您在開發 Eask 項目時將使用的最常用命令的說明。 請參閱 +以下是您在開發 Eask 項目時將使用的最常用命令的說明。 請參閱 [命令和選項](https://emacs-eask.github.io/Getting-Started/Commands-and-options/) 以全面了解 Eask 的 CLI。 @@ -35,6 +35,7 @@ Commands: compile [names..] Byte compile all Emacs Lisp files in the package create Create a new elisp project docker [args..] Launch specified Emacs version in a Docker container + docs Build documentation [aliases: doc] emacs [args..] Execute emacs with the appropriate environment eval [form] Evaluate lisp form with a proper PATH path [patterns..] Print the PATH (exec-path) from workspace [aliases: exec-path] diff --git a/docs/content/Getting-Started/Commands-and-options/_index.en.md b/docs/content/Getting-Started/Commands-and-options/_index.en.md index b922aab2..bac2925b 100644 --- a/docs/content/Getting-Started/Commands-and-options/_index.en.md +++ b/docs/content/Getting-Started/Commands-and-options/_index.en.md @@ -229,7 +229,7 @@ Print the load path containing the dependencies of the current project. $ eask [GLOBAL-OPTIONS] load-path [PATTERNS..] ``` -Optionally, you can pass in `[PATTERNS..]` to perform the search. +Optionally, you can pass in `[PATTERNS..]` to perform the search. ## 🔍 eask files @@ -300,6 +300,18 @@ Print LOC information. $ eask [GLOBAL-OPTIONS] loc [FILES..] ``` +# 🚩 Documentation + +Commands used to build documentation site. + +## 🔍 eask docs + +Build documentation. + +```sh +$ eask [GLOBAL-OPTIONS] docs [NAMES..] +``` + # 🚩 Execution Commands allow you to execute on top of the Eask core. @@ -587,8 +599,8 @@ $ eask [GLOBAL-OPTIONS] generate workflow travis-ci [--file] # 🚩 Linking -Link between this package and a dependency on the local filesystem. A linked -dependency avoids the need to download a dependency from a remote archive. The +Link between this package and a dependency on the local filesystem. A linked +dependency avoids the need to download a dependency from a remote archive. The package linked to must either have a `Eask`-file or a `-pkg.el`-file. ## 🔍 eask link add diff --git a/docs/content/Getting-Started/Commands-and-options/_index.zh-tw.md b/docs/content/Getting-Started/Commands-and-options/_index.zh-tw.md index 25ec3d56..0015b773 100644 --- a/docs/content/Getting-Started/Commands-and-options/_index.zh-tw.md +++ b/docs/content/Getting-Started/Commands-and-options/_index.zh-tw.md @@ -296,6 +296,18 @@ $ eask [GLOBAL-OPTIONS] concate [FILES..] $ eask [GLOBAL-OPTIONS] loc [FILES..] ``` +# 🚩 文件 + +用於建立文檔站點的命令。 + +## 🔍 eask docs + +建置文檔。 + +```sh +$ eask [GLOBAL-OPTIONS] docs [NAMES..] +``` + # 🚩 執行 指令允許執行在 Eask 核心之上。 diff --git a/lisp/_prepare.el b/lisp/_prepare.el index 57b5c82c..722fec07 100644 --- a/lisp/_prepare.el +++ b/lisp/_prepare.el @@ -1987,7 +1987,12 @@ variable we use to test validation." :group 'eask) (defcustom eask-dist-path "dist" - "Name of default target directory for building packages." + "Default path where to place the package artifact." + :type 'string + :group 'eask) + +(defcustom eask-docs-path "docs/public/" + "Default path where to place the documentation." :type 'string :group 'eask) diff --git a/lisp/core/docs.el b/lisp/core/docs.el new file mode 100644 index 00000000..8bc8de57 --- /dev/null +++ b/lisp/core/docs.el @@ -0,0 +1,75 @@ +;;; core/docs.el --- Build documentation -*- lexical-binding: t; -*- + +;;; Commentary: +;; +;; Build documentation for your Elisp project, +;; +;; $ eask docs [names..] +;; +;; +;; Positionals: +;; +;; [names..] specify files to scan +;; +;; Action options: +;; +;; [destination] optional output destination +;; + +;;; Code: + +(let ((dir (file-name-directory (nth 1 (member "-scriptload" command-line-args))))) + (load (expand-file-name "_prepare.el" + (locate-dominating-file dir "_prepare.el")) + nil t)) + +;; +;;; Externals + +(require 'el2org nil t) + +;; +;;; Core + +(defun eask-docs--to-html (el-file) + "Generate html file from EL-FILE." + (interactive) + (let* ((filename (file-name-nondirectory el-file)) + (html-file (expand-file-name (concat (file-name-sans-extension filename) + ".html") + eask-docs-path))) + (eask-with-verbosity 'debug + (el2org-generate-file el-file nil 'html html-file t)))) + +(eask-start + ;; Preparation + (eask-with-archives '("gnu" "melpa") + (eask-package-install 'el2org)) + + ;; Start building... + (require 'el2org) + (let* ((patterns (eask-args)) + (files (if patterns (eask-expand-file-specs patterns) + (eask-package-el-files))) + (eask-docs-path (or (eask-dest) eask-docs-path))) + (cond + ;; Files found, do the action! + (files + (eask-debug "Destination path in %s" eask-docs-path) + (ignore-errors (make-directory eask-docs-path t)) + + (eask-progress-seq + " - Processing" files "done! ✓" #'eask-docs--to-html) + (eask-msg "") + (eask-info "Done. (Converted %s file%s)" (length files) + (eask--sinr files "" "s"))) + ;; Pattern defined, but no file found! + (patterns + (eask-info "(No files match wildcard: %s)" + (mapconcat #'identity patterns " "))) + ;; Default, print help! + (t + (eask-info "(No elisp source can be read)") + (eask-help "core/docs"))))) + +;;; core/docs.el ends here diff --git a/lisp/help/core/concat b/lisp/help/core/concat new file mode 100644 index 00000000..a5a79357 --- /dev/null +++ b/lisp/help/core/concat @@ -0,0 +1,4 @@ + +💡 You would need to specify the [names..] in order to make concatenation! + + $ eask concat [names..] diff --git a/lisp/help/core/docs b/lisp/help/core/docs new file mode 100644 index 00000000..c0c7cc30 --- /dev/null +++ b/lisp/help/core/docs @@ -0,0 +1,4 @@ + +💡 You would need to specify the [names..] in order to build documentation! + + $ eask docs [names..] diff --git a/test/commands/local/run.sh b/test/commands/local/run.sh index d530a1db..86c21229 100644 --- a/test/commands/local/run.sh +++ b/test/commands/local/run.sh @@ -42,6 +42,10 @@ eask concat #eask loc # Only 27.1+ #eask loc Eask # Only 27.1+ +# Documentation +#eask docs # Only 28.1+ +#eask docs *.el # Only 28.1+ + # PATH environment eask path eask path bin