Matus Goljer
Matus Goljer
https://github.com/vimeo/psalm/blob/master/tests/TypeAlgebraTest.php
This should probably be tracked on the scope because as we nest bindings variables get pushed and popped and so the information would get mixed. We can simply walk through...
The implementation is related to #39. We can have code like this: ```elisp (setq a 1) ;; this is useless (other forms not using a) (setq a 2) ;; a...
If the intersection of left and right argument's domains is empty there is no way this can ever match and we can say "this always evals to nil". - [x]...
Add extensions for built-in predicates "always returning true" if corresponding argument is passed
So that `(stringp "foo")` or `(integerp 1)` are flagged as always true. and `(stringp :keyword)` as always false.
Some of the checks are pretty obvious in the way they should be fixed. We could have an AST transformer to apply on the forms and fix issues for the...
See for example ```elisp (cl-defmethod elsa-check-check ((_ elsa-check-lambda-eta-conversion) form scope state) (let* ((seq (oref form sequence)) (arg-list (elsa-form-sequence (nth 1 seq))) (body (nthcdr 2 seq))) (when (= 1 (length body))...
If we have nested let forms which can be merged, do so ```elisp (let ((a 1)) (let ((b 2)) (body) (here))) ;; => (let ((a 1) (b 2)) (body) (here))...
```elisp (progn (put 'stringp 'elsa-type (elsa-make-type Mixed -> Bool)) (put 'stringp 'elsa-narrow-types (list (elsa-make-type String)))) ``` could become something like ```elisp (elsa-annotate stringp :type Mixed -> Bool :narrow (1 String))...
https://github.com/bbatsov/emacs-lisp-style-guide For inspiration look at https://github.com/Fuco1/Elsa/blob/master/elsa-ruleset.el the ruleset `elsa-ruleset-style` contains the style rules. These are in turn defined in https://github.com/Fuco1/Elsa/blob/master/elsa-rules-list.el. The naming of these files isn't great and I think...