libera/#sicl - IRC Chatlog
Search
8:13:26
hayley
I am working on a regular expression linter, which means I get to think about what to warn abount.
8:47:52
hayley
So far the linter detects regular expressions that will never match anything (e.g. "a&b" matches a string which is both "a" and "b", which is impossible), and submatches that will never be matched (e.g. a|(a) will always favour the choice on the left of the |), and the DO-MATCHES iteration macro will detect too many submatch registers being bound. Does it make sense to map these constructs to something similar in Lisp, and then work out how such
8:48:11
hayley
Maybe I should ask in #commonlisp, but there seems to be more discussions about linting in #sicl.
8:56:27
hayley
There are some situations which obviously should lead to an error or warning, but then there are some that aren't so clear. Should, say, DO-MATCHES with an incorrect number of bindings (and a constant regular expression, so that we can actually do analysis at compile-time) produce a compile-time error, or warning, or something else? It will certainly lead to a runtime error, and the programmer cannot do anything other than rewrite the DO-MATCHES
8:56:28
hayley
form to fix it. But Common Lisp systems can only signal a warning, when static analysis shows that some code will always lead to a runtime error, and so signalling a compile-time error could be seen as inconsistent.
9:32:15
splittist
hayley: so DO-MATCHES does linting as it generates code? Could you have a keyword argument for LINTING-LEVEL? Or even a HAYLEYS-COOL-REGEXPS:*LINTING-OPTIONS* alist/plist/object?
9:33:22
hayley
The linting is done by the DO-MATCHES macro, and additionally by compiler macros for each matching function (which also optimise the case of a constant regular expression argument). A keyword argument could work, sure.
9:39:25
splittist
The professional (TM) way of doing it would be to have a json dotfile in the project root directory whose format would vary with every new point release, but because it would be undocumented, the only way to properly edit it would be using a clunky menu system with inconsistent terminology. (Can you tell I've used vs code?)