X-Git-Url: https://code.consxy.com/gitweb/gitweb.cgi?p=wolf;a=blobdiff_plain;f=src%2Fmain%2Fchecker.lisp;h=dcbe9ec6fd1ad77b0dd8ea1001f48c8e4122c5f4;hp=8bae64f83cb46aeb9117aa5c9ed14c6308678e4e;hb=1f818db;hpb=091a882409debf24cf717ad53e1388e2bada6832 diff --git a/src/main/checker.lisp b/src/main/checker.lisp index 8bae64f..dcbe9ec 100644 --- a/src/main/checker.lisp +++ b/src/main/checker.lisp @@ -5,13 +5,14 @@ ; * No form longer than 50 lines ; - Top level multiline forms must be separated by exactly one space ; * No line longer than 120 characters -; - No use of unexported symbols in other packages -; - No tabs +; * No use of unexported symbols in other packages +; * No tabs ; - Only one space between elements in a form on a single line ; * in-package must be first line in file unless file is package.lisp ; * No whitespace at end of line ; * No lines that are only whitespace -; - No empty lines at end of file +; * No empty lines at end of file +; * Never have two empty lines in a row ; * Only one in-package per file ; ; Some thoughts @@ -34,7 +35,9 @@ '(:begin ; start of file :normal ; normal processing :beginning-of-line + :beginning-of-separators-with-space ; empty space in there :beginning-of-symbols + :all ; matches everything ))) @@ -54,7 +57,7 @@ (list (lambda (state text) (and - (eql ,state state) + (or (eql :all ,state) (eql ,state state)) (or (and (symbolp text) (eql text ,match)) (and ,scanner @@ -104,9 +107,15 @@ ; These are in reverse order (progn (setf *evaluators* nil) + (defevaluator :all "\\t" + (constantly "Must not use tabs")) (defevaluator :begin "\\(in-package[^\\)]*\\)" (lambda () (set-state :normal) nil)) + (defevaluator :beginning-of-separators-with-space :eof + (constantly "Must not end with empty line")) + (defevaluator :beginning-of-separators-with-space "\\n" + (constantly "Must not have two empty lines in a row")) (defevaluator :begin ".*" (constantly "Must begin with in-package form")) (defevaluator :normal "\\( *in-package " @@ -124,8 +133,16 @@ (lambda () (set-state :beginning-of-symbols) nil)) + (defevaluator :beginning-of-separators-with-space " *" + (lambda () + (set-state :beginning-of-symbols) + nil)) (defevaluator :beginning-of-symbols "\\n" - (lambda () (when (< 0 *col-no*) "No whitespace only lines"))) + (lambda () + (if + (< 0 *col-no*) + "No whitespace only lines" + (set-state :beginning-of-separators-with-space)))) (defevaluator :beginning-of-symbols "" (lambda () (set-state :normal) @@ -143,9 +160,8 @@ (cond ((not form) "Unmatched ending paren") ((< 50 (- *line-no* (car form))) "Forms can't be over 50 lines long"))))) - -(cl-ppcre:scan (cl-ppcre:create-scanner " *") " -asdf asdf") + (defevaluator :normal "::" + (constantly "No internal symbols from other packages")) (defevaluator :normal "." (constantly nil)) )