Skip to content

Commit 0faeca4

Browse files
authored
feat(init): Add init from Eldev (#193)
* feat(init): Add init from Eldev * rm msg
1 parent f4540bd commit 0faeca4

File tree

7 files changed

+144
-10
lines changed

7 files changed

+144
-10
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how
3232
* Add docker command (#188)
3333
* Enter docker directly when no arguments (#191)
3434
* Add command to generate recipe (#192)
35+
* Add option to init from `Eldev`-file (#193)
3536

3637
## 0.8.x
3738
> Released Mar 08, 2023

cmds/core/init.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ exports.handler = async (argv) => {
4444
if (argv.from) {
4545
switch (argv.from) {
4646
case 'cask':
47+
case 'eldev':
4748
case 'keg':
4849
case 'source':
4950
await UTIL.e_call(argv, 'init/' + argv.from

docs/content/en/Getting-Started/Commands-and-options.md

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,23 +68,29 @@ Eask will generate the file like this:
6868
(depends-on "emacs" "26.1")
6969
```
7070

71+
**[RECOMMENDED]** If you already have an elisp project, you can convert the
72+
`.el` file to Eask-file:
73+
74+
```
75+
$ eask init --from source /path/to/source.el
76+
```
77+
7178
If you already have a [Cask][] project, you can convert Cask-file to Eask-file:
7279

7380
```
7481
$ eask init --from cask /path/to/Cask
7582
```
7683

77-
If you already have a [Keg][] project, you can convert Keg-file to Eask-file:
84+
If you already have a [Eldev][] project, you can convert Eldev-file to Eask-file:
7885

7986
```
80-
$ eask init --from keg /path/to/Keg
87+
$ eask init --from eldev /path/to/Eldev
8188
```
8289

83-
**[RECOMMENDED]** If you already have an elisp project, you can convert the
84-
`.el` file to Eask-file:
90+
If you already have a [Keg][] project, you can convert Keg-file to Eask-file:
8591

8692
```
87-
$ eask init --from source /path/to/source.el
93+
$ eask init --from keg /path/to/Keg
8894
```
8995

9096
{{< hint ok >}}
@@ -931,4 +937,5 @@ Do not use a proxy for any URL matching pattern.
931937

932938

933939
[Cask]: https://github.com/cask/cask
940+
[Eldev]: https://emacs-eldev.github.io/eldev/
934941
[Keg]: https://github.com/conao3/keg.el

docs/content/zh-TW/Getting-Started/Commands-and-options.md

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,22 +68,28 @@ Eask 將生成這樣的文件:
6868
(depends-on "emacs" "26.1")
6969
```
7070

71+
**[推薦]** 如果您已有 elisp 項目,您可以將 `.el` 文件轉換為 Eask 文件:
72+
73+
```
74+
$ eask init --from source /path/to/source.el
75+
```
76+
7177
如果您已有 [Cask][] 項目,您可以將 Cask 文件轉換為 Eask 文件:
7278

7379
```
7480
$ eask init --from cask /path/to/Cask
7581
```
7682

77-
如果您已有 [Keg][] 項目,您可以將 Keg 文件轉換為 Eask 文件:
83+
如果您已有 [Eldev][] 項目,您可以將 Eldev 文件轉換為 Eask 文件:
7884

7985
```
80-
$ eask init --from keg /path/to/Keg
86+
$ eask init --from eldev /path/to/Eldev
8187
```
8288

83-
**[推薦]** 如果您已有 elisp 項目,您可以將 `.el` 文件轉換為 Eask 文件:
89+
如果您已有 [Keg][] 項目,您可以將 Keg 文件轉換為 Eask 文件:
8490

8591
```
86-
$ eask init --from source /path/to/source.el
92+
$ eask init --from keg /path/to/Keg
8793
```
8894

8995
{{< hint ok >}}
@@ -918,4 +924,5 @@ $ eask --proxy "localhost:8888" [COMMAND]
918924

919925

920926
[Cask]: https://github.com/cask/cask
927+
[Eldev]: https://emacs-eldev.github.io/eldev/
921928
[Keg]: https://github.com/conao3/keg.el

lisp/_prepare.el

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ will return `lint/checkdoc' with a dash between two subcommands."
121121

122122
(defun eask-special-p ()
123123
"Return t if the command that can be run without Eask-file existence."
124-
(member (eask-command) '("init/cask" "init/keg"
124+
(member (eask-command) '("init/cask" "init/eldev" "init/keg"
125125
"init/source"
126126
"cat" "keywords"
127127
"generate/ignore" "generate/license")))

lisp/help/init/eldev

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
2+
💡 Make sure you have a valid Eldev-file in your directory
3+
4+
💡 Or specify Eldev-file explicitly, like:
5+
6+
$ eask init --from=eldev /path/to/Eldev

lisp/init/eldev.el

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
;;; init/eldev.el --- Initialize Eask from Eldev -*- lexical-binding: t; -*-
2+
3+
;;; Commentary:
4+
;;
5+
;; Commmand use to convert Eldev-file to Eask-file
6+
;;
7+
;; $ eask init --from eldev
8+
;;
9+
10+
;;; Code:
11+
12+
(let ((dir (file-name-directory (nth 1 (member "-scriptload" command-line-args)))))
13+
(load (expand-file-name "_prepare.el"
14+
(locate-dominating-file dir "_prepare.el"))
15+
nil t))
16+
17+
(defun eask--eldev-map-elpa (name)
18+
"Convert Eldev mapping to Eask mapping."
19+
(pcase name
20+
("melpa-unstable" 'melpa)
21+
(_ name)))
22+
23+
(defun eask--convert-eldev (filename)
24+
"Convert Eldev FILENAME to Eask."
25+
(let* ((filename (expand-file-name filename))
26+
(file (file-name-nondirectory (eask-root-del filename)))
27+
(new-file (eask-s-replace "Eldev" "Eask" file))
28+
(new-filename (expand-file-name new-file))
29+
(converted))
30+
(eask-with-progress
31+
(format "Converting file `%s` to `%s`... " file new-file)
32+
(eask-with-verbosity 'debug
33+
(cond ((not (string-prefix-p "Eldev" file))
34+
(eask-debug "✗ Invalid Eldev filename, the file should start with `Eldev`"))
35+
(t
36+
(with-current-buffer (find-file new-filename)
37+
(erase-buffer)
38+
(goto-char (point-min))
39+
40+
(let* ((project-name (file-name-nondirectory (directory-file-name default-directory)))
41+
(package-name (eask-read-string (format "\npackage name: (%s) " project-name) nil nil project-name))
42+
(version (eask-read-string "version: (1.0.0) " nil nil "1.0.0"))
43+
(description (eask-read-string "description: "))
44+
(guess-entry-point (eask-guess-entry-point project-name))
45+
(entry-point (eask-read-string (format "entry point: (%s) " guess-entry-point)
46+
nil nil guess-entry-point))
47+
(emacs-version (eask-read-string "emacs version: (26.1) " nil nil "26.1"))
48+
(website (eask-read-string "website: "))
49+
(keywords (eask-read-string "keywords: "))
50+
(keywords (split-string keywords "[, ]"))
51+
(keywords (string-join keywords "\" \""))
52+
(content (format
53+
"(package \"%s\"
54+
\"%s\"
55+
\"%s\")
56+
57+
(website-url \"%s\")
58+
(keywords \"%s\")
59+
60+
(package-file \"%s\")
61+
62+
(script \"test\" \"echo \\\"Error: no test specified\\\" && exit 1\")
63+
"
64+
package-name version description website keywords
65+
entry-point)))
66+
(insert content)
67+
68+
(when-let* ((names (mapcar #'car package-archives))
69+
(sources (mapcar #'eask--eldev-map-elpa names)))
70+
(insert "\n")
71+
(dolist (source sources)
72+
(insert "(source '" (eask-2str source) ")\n"))))
73+
(save-buffer))
74+
(setq converted t))))
75+
(if converted "done ✓" "skipped ✗"))
76+
converted))
77+
78+
(eask-start
79+
;; Preparation
80+
(eask-with-archives "melpa"
81+
(eask-package-install 'eldev))
82+
83+
;; Start Converting
84+
(require 'eldev)
85+
(let* ((patterns (eask-args))
86+
(files (if patterns
87+
(eask-expand-file-specs patterns)
88+
(directory-files default-directory t "Eldev")))
89+
(files (cl-remove-if-not (lambda (file)
90+
(string= "Eldev" (file-name-nondirectory file)))
91+
files))
92+
(converted 0))
93+
(cond
94+
;; Files found, do the action!
95+
(files
96+
(eldev--set-up) ; XXX: Load once!
97+
(dolist (file files)
98+
(when (eask--convert-eldev file)
99+
(cl-incf converted)))
100+
(eask-msg "")
101+
(eask-info "(Total of %s Eldev-file%s converted)" converted
102+
(eask--sinr converted "" "s")))
103+
;; Pattern defined, but no file found!
104+
(patterns
105+
(eask-info "(No files match wildcard: %s)"
106+
(mapconcat #'identity patterns " ")))
107+
;; Default, print help!
108+
(t
109+
(eask-info "(No Eldev-files have been converted to Eask)")
110+
(eask-help "init/eldev")))))
111+
112+
;;; init/eldev.el ends here

0 commit comments

Comments
 (0)