m2ym / cl-annot Goto Github PK
View Code? Open in Web Editor NEWPython-like Annotation Syntax for Common Lisp
Python-like Annotation Syntax for Common Lisp
Could you please specify the license used for this package?
Assuming that you want to release under "the GPL v3 or any later version", the best way to do that would be to add this permission statement to the library header:
;; This file 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 file 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 <http://www.gnu.org/licenses/>.
Also consider adding a LICENSE
file containing the text of the GPL-3. You could add just that file without also adding the above persmission statement, but if you do that, then the "or (at your option) any later version" bit won't be known. So I recommend that you add both the actual license and the permission statement.
If you find the permission statement to be too noisy, then you could instead add one of these following lines to the header. If you do that, then it becomes more important to also add the LICENSE
file - a judge might decide that such a line by itself is not sufficient. Still, adding just such a line is better than not specifing the license at all.
;; License: GNU General Public License version 3, or (at your option) any later version
;; License: GNU General Public License version 3, or any later version
;; License: GNU GPL version 3, or (at your option) any later version
;; License: GPL version 3, or (at your option) any later version
;; License: GPL version 3, or any later version
;; License: GPL v3, or (at your option) any later version
;; License: GPL v3, or any later version
;; License: GPL-3+
@doc method
On a Travis CI worker running Allegro CL 9.0 [Linux (x86)], (use-syntax :annot)
triggers Reader macro conflict while trying to merge the dispatch macro characters #\# #\U from #<readtable named CL-ANNOT.SYNTAX> into #<readtable>
.
Reproduced in Scalpl's Job #7.2, which seems to occur when CL-DBI compilation reaches this call to use-syntax
.
Would you please consider adding a :description option to your system definition of cl-annot?
Analyze lambda-list
Rather than:
@export
(defparameter +moose-height+ 7)
@export
(defparameter +moose-width+ 11)
@export
(defvar *moose-times-seen* 0)
@export
(defun handle-moose-sighting () ...)
Is there a simple way to accomplish something like:
@export-block
(defparameter +moose-height+ 7)
(defparameter +moose-width+ 11)
(defvar *moose-times-seen* 0)
@export
(defun handle-moose-sighting () ...)
Thanks!
defstruct in CL allows to specify several constructors. If second argument to the :constructor keyword provided, it is used as a constructor name. :constructor with no arguments creates a default constructor.
However if both BOA(By Order of Arguments) and explicit default constructor provided, the export-constructors macro exports only BOA constructor, see the session below:
CL-USER 28 > (defstruct (point (:constructor create-point (x y)) (:constructor)) x y)
POINT
CL-USER 29 > (create-point 10 20)
#S(POINT :X 10 :Y 20)
CL-USER 30 > (make-point :x 10 :y 10)
#S(POINT :X 10 :Y 10)
CL-USER 31 > (pprint (macroexpand '(cl-annot.class:export-constructors (defstruct (point (:constructor create-point (x y)) (:constructor)) x y))))
(PROGN
(EXPORT '(CREATE-POINT))
(DEFSTRUCT (POINT (:CONSTRUCTOR CREATE-POINT (X Y)) (:CONSTRUCTOR)) X Y))
Restarts are also the important part of API. please:
@export
(restart-bind ...
)
@export
(restart-case ...
(name () ...))
and also the `case,ecase, ccase' keys (less priority):
@export
(case (something)
(key1 ...)
(key2 ...))
well, I might have to use a keyword for the restart name.
Compilation of cl-project
and clack
fails. I guess this is due to cl-annot
on SBCL and so here's a report.
I use SBCL 1.10, FreeBSD 9.1.
With ABCL, I had no errors.
Code:
(ql:quickload :cl-project)
Backtrace:
The value #<FDEFINITION for SB-IMPL::READ-LIST>
is not of type
(OR FUNCTION SYMBOL).
[Condition of type TYPE-ERROR]
Restarts:
0: [TRY-RECOMPILING] Recompile contrib/annot and try loading it again
1: [RETRY] Retry loading FASL for #<CL-SOURCE-FILE "cl-syntax-annot" "contrib/annot">.
2: [ACCEPT] Continue, treating loading FASL for #<CL-SOURCE-FILE "cl-syntax-annot" "contrib/annot"> as having been successful.
3: [RETRY] Retry ASDF operation.
4: [CLEAR-CONFIGURATION-AND-RETRY] Retry ASDF operation after resetting the configuration.
5: [ABORT] Give up on "cl-project"
--more--
Backtrace:
0: (SET-MACRO-CHARACTER #\( #<FDEFINITION for SB-IMPL::READ-LIST> NIL #<NAMED-READTABLE CL-ANNOT::SYNTAX {1003BD0AC3}>) [tl,external]
1: (EDITOR-HINTS.NAMED-READTABLES:MERGE-READTABLES-INTO #<NAMED-READTABLE CL-ANNOT::SYNTAX {1003BD0AC3}> :STANDARD)
2: ((SB-C::TOP-LEVEL-FORM (LET ((READTABLE (EDITOR-HINTS.NAMED-READTABLES:FIND-READTABLE #1=???))) (COND ((NOT READTABLE) #2=(SETQ READTABLE #1#)) (T #2# (EDITOR-HINTS.NAMED-READTABLES::SIMPLE-STYLE-WARN..
3: (SB-FASL::LOAD-FASL-GROUP #<SB-SYS:FD-STREAM for "file /usr/home/keno/.cache/common-lisp/sbcl-1.2.8-bsd-x64/usr/home/keno/.quicklisp/dists/quicklisp/software/cl-syntax-20120520-git/contrib/annot.fasl"..
4: (SB-FASL::LOAD-AS-FASL #<SB-SYS:FD-STREAM for "file /usr/home/keno/.cache/common-lisp/sbcl-1.2.8-bsd-x64/usr/home/keno/.quicklisp/dists/quicklisp/software/cl-syntax-20120520-git/contrib/annot.fasl" {1..
5: ((FLET SB-FASL::LOAD-STREAM :IN LOAD) #<SB-SYS:FD-STREAM for "file /usr/home/keno/.cache/common-lisp/sbcl-1.2.8-bsd-x64/usr/home/keno/.quicklisp/dists/quicklisp/software/cl-syntax-20120520-git/contrib..
6: (LOAD #P"/usr/home/keno/.cache/common-lisp/sbcl-1.2.8-bsd-x64/usr/home/keno/.quicklisp/dists/quicklisp/software/cl-syntax-20120520-git/contrib/annot.fasl" :VERBOSE NIL :PRINT NIL :IF-DOES-NOT-EXIST T ..
7: (UIOP/UTILITY:CALL-WITH-MUFFLED-CONDITIONS #<CLOSURE (LAMBDA NIL :IN UIOP/LISP-BUILD:LOAD*) {1004C7700B}> ("Overwriting already existing readtable ~S." #(#:FINALIZERS-OFF-WARNING :ASDF-FINALIZERS)))
8: ((SB-PCL::EMF ASDF/ACTION:PERFORM) #<unavailable argument> #<unavailable argument> #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "cl-syntax-annot" "contrib/annot">)
9: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS (ASDF/LISP-ACTION:LOAD-OP ASDF/LISP-ACTION:CL-SOURCE-FILE)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "cl-syntax-annot" "contrib/annot"..
10: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS :AROUND (T T)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "cl-syntax-annot" "contrib/annot">) [fast-method]
11: ((:METHOD ASDF/PLAN:PERFORM-PLAN (LIST)) ((#1=#<ASDF/LISP-ACTION:COMPILE-OP > . #<ASDF/SYSTEM:SYSTEM "anaphora">) (#1# . #<ASDF/SYSTEM:SYSTEM "cl-ppcre">) (#1# . #<ASDF/SYSTEM:SYSTEM "cl-emb">) (#1# ...
12: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
13: ((:METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T)) ((#1=#<ASDF/LISP-ACTION:COMPILE-OP > . #<ASDF/SYSTEM:SYSTEM "anaphora">) (#1# . #<ASDF/SYSTEM:SYSTEM "cl-ppcre">) (#1# . #<ASDF/SYSTEM:SYSTEM "cl-emb">) (..
14: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
15: ((:METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {10045DB0F3}> :VERBOSE NIL) [fast-method]
16: ((:METHOD ASDF/OPERATE:OPERATE (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)) #<ASDF/LISP-ACTION:LOAD-OP :VERBOSE NIL> #<ASDF/SYSTEM:SYSTEM "cl-project"> :VERBOSE NIL) [fast-method]
17: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> #<ASDF/LISP-ACTION:LOAD-OP :VERBOSE NIL> #<ASDF/SYSTEM:SYSTEM "cl-project"> :VERBOSE NIL)
18: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
19: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) #<ASDF/LISP-ACTION:LOAD-OP :VERBOSE NIL> #<ASDF/SYSTEM:SYSTEM "cl-project"> :VERBOSE NIL) [fast-method]
@ignore might fail to insert (declare (ignore ...)
at the beginning of the body.
cl-annot comes in the way of using :@ keyword. So it would be good if cl-annot could leave @ in the keyword package alone.
export-structure doesn't work on defstructs with docstrings
I've changed the slot-specifiers definition to make it work, but I don't know if there are more things involved:
(defun slot-specifiers (class-definition-form)
"Return class-specifiers of CLASS-DEFINITION-FORM."
(case (first class-definition-form)
(defclass (nth 3 (progn-form-last class-definition-form)))
(defstruct (if (stringp (nth 2 (progn-form-last class-definition-form)))
;; There's a documentation string, fetch the slots after it
(nthcdr 3 (progn-form-last class-definition-form))
;; There's no documentation string, fetch the slots
(nthcdr 2 (progn-form-last class-definition-form))))))
In quicklisp 2013-10-03 cl-annot has a regression on CMUCL: the cl-annot-test ASDF system can not be loaded on CMUCL due to error
FORMAT-ERROR: Error in format: No more arguments.
~:<~W~^~:I ~W~_~@{ ~W~^~@_~}~:>
Full log: http://cl-test-grid.appspot.com/blob?key=9zrdyu4wcq
See also: cl-test-grid library page for cl-annot:
http://common-lisp.net/project/cl-test-grid/library/cl-annot.html
Writing annotations will be easier if there is annotation annotation like:
@annotation (:inline t :arity 2)
(defmacro foo (x y) ...)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.