Преглед на файлове

Correctly extract package and function documentation and test loading

a package into a sandboxed Emacs
master
Peter J. Jones преди 7 години
родител
ревизия
2e17314292
променени са 6 файла, в които са добавени 84 реда и са изтрити 6 реда
  1. 2
    2
      defpkg.sh
  2. 5
    0
      desc.sh
  3. 10
    4
      elpkg.mk
  4. 20
    0
      fdoc2md.el
  5. 31
    0
      fdoc2md.sh
  6. 16
    0
      pkgtest.el

+ 2
- 2
defpkg.sh Целия файл

@@ -5,8 +5,8 @@ NAME=$1
ELFILE=$2
ELPKG=`dirname $0`
VERSION=`$ELPKG/version.sh $ELFILE`
DESC=`head -1 $ELFILE | sed -E 's/^.*-- *//'`
DEPS=`[ -r deps.el ] && cat deps.el`
DESC=`$ELPKG/desc.sh $ELFILE`
DEPS=`[ -r deps.el ] && cat deps.el` # FIXME: what file name to use?

###############################################################################
printf '(define-package "%s" "%s" "%s" %s)\n' \

+ 5
- 0
desc.sh Целия файл

@@ -0,0 +1,5 @@
#!/bin/sh

# Print the description from an *.el file.
egrep '^;;;.*--' $1 | \
sed -E 's/^.*-- *//'

+ 10
- 4
elpkg.mk Целия файл

@@ -9,13 +9,13 @@ EL_FILES ?= $(shell git ls-files|egrep '\.el$$')

################################################################################
EMACS = emacs
EMACS_FLAGS = -q --no-site-file --batch
EMACS_FLAGS = --batch -Q
EMACS_FLAGS += --eval "(add-to-list 'load-path \"lisp\")"
EMACS_FLAGS += -f package-initialize
EMACS_FLAGS += -f batch-byte-compile

################################################################################
.PHONEY: all clean compile
.PHONEY: all clean test compile

################################################################################
all: $(TARBALL)
@@ -25,12 +25,18 @@ compile: $(EL_FILES:.el=.elc)

################################################################################
clean:
rm -rf $(TARBALL) $(PACKAGE)
rm -rf $(TARBALL) $(PACKAGE) $(PACKAGE).elpa
rm -f $(EL_FILES:.el=.elc)

################################################################################
test: $(TARBALL)
$(EMACS) --batch -Q -l $(ELPKG)/pkgtest.el \
--eval '(elpkg-test-package "$(CURDIR)/$(TARBALL)")'

################################################################################
$(PACKAGE): $(PKG_FILES)
mkdir $@
rm -rf $@
mkdir -p $@
cp $(PKG_FILES) $@
$(ELPKG)/defpkg.sh $(NAME) $@/$(notdir $(CORE_FILE)) > $@/$(NAME)-pkg.el


+ 20
- 0
fdoc2md.el Целия файл

@@ -0,0 +1,20 @@
;;; -*- lexical-binding: t -*-
;;; fdoc2md.el -- Convert function documentation to markdown
(defvar fdoc-replacements
'(("`\\([^']+\\)'" . "`\\1`"))
"A list of alists where the car is the search regular
expression and the cdr is the replacement string.")

(defun fdoc2md (func file)
"Extract the documentation from FUNC and try to convert it to
markdown then append it to FILE."
(let ((doc (documentation func)))
(mapc (lambda (re)
(let ((start nil))
(while (setq start (string-match (car re) doc
(if start (match-end 0))))
(setq doc (replace-match (cdr re) nil nil doc nil)))))
fdoc-replacements)
(with-temp-buffer
(insert doc)
(append-to-file (point-min) (point-max) file))))

+ 31
- 0
fdoc2md.sh Целия файл

@@ -0,0 +1,31 @@
#!/bin/sh

################################################################################
# Extract documentation from an elisp function and put it on STDOUT.
#
# The first argument should be the name of a function for which you
# want documentation.
#
# Any remaining arguments are elisp files that should be loaded by
# Emacs so their documentation can be read.

################################################################################
ELPKG=`dirname $0`
TEMPF=`mktemp`
EMACS=emacs
FUNC=$1

################################################################################
loads () {
for f in "$@"; do
echo "-l $f"
done
}

################################################################################
shift
${EMACS} --batch -Q -l $ELPKG/fdoc2md.el `loads "$@"` \
--eval "(fdoc2md '$FUNC \"$TEMPF\")" > /dev/null 2>&1

cat $TEMPF
rm -f $TEMPF

+ 16
- 0
pkgtest.el Целия файл

@@ -0,0 +1,16 @@
;;; -*- lexical-binding: t -*-
;;; pkgtest.el -- Install a test package into a clean Emacs
(require 'package)

(defun elpkg-test-package (tarball)
"Load the given tarball into a fake package store."
(let ((package-user-dir (concat (file-name-sans-extension tarball) ".elpa"))
(package-archives
'(("gnu" . "http://elpa.gnu.org/packages/")
("marmalade" . "http://marmalade-repo.org/packages/"))))
(toggle-debug-on-error)
(package-initialize)
(package-install-file tarball)
;; TODO: check for tests and run:
;; (ert-run-tests-batch-and-exit)
))

Loading…
Отказ
Запис