Releases: mcandre/unmake
Releases · mcandre/unmake
#recursion
- unmake now accepts a list of multiple file and/or directory paths.
- unmake now recurses over directories.
.git
,node_modules
, andvendor
are skipped.- Machine-generated makefiles are skipped.
- Symlinks are skipped.
- Implementation-specific filenames like
GNUmakefile
andBSDmakefile
are skipped. -d
/--debug
shows skipped file paths-i
/--inspect
provides high level details about potential makefile paths- Error messages about accessing files now name the offending file path
- Added more unit tests
- Minor performance enhancement when generating parse error messages
See #recursion
#messaging
- Substantially clarify parse error messages
- Improve documentation
- Expand tests
#special-delivery
Apply stricter parsing for special targets.
For example, prohibit the degenerate reset form .POSIX:;
.
This reduces ambiguity / portability issues.
#quintus
Major enhancements:
- Target more modern POSIX Issue 8, Draft 3 make spec
- Parse grammar substantially refined, for POSIX makefile syntax both new (
!=
) and old (.PHONY
). - Reject more syntactical forms with undefined behavior, such as
:=
- Document illustrative examples for passing and failing makefile syntax
- Test suite substantially improved
Notable validation behaviors:
- Multiline instructions appearing in fringe places, may be treated as parse errors. This keeps the grammar simple, and encourages more readable makefiles. Annotating AST nodes with locations of questionable escape newline sequences, would have greatly complicated both the parser grammar and post-parsing linter logic.
- Late
.POSIX:
declarations are currently not checked. In the interest of expediency, we decided it was better to fix a larger issue with past releases, which incidentally prohibited use of the.POSIX:
rule anywhere in the makefile. - Some syntactical forms like
-include
are currently tolerated, though may be slated for rejection later. Either at parse or linter message level.
Each release of unmake
aims to provide meaningful, iterative improvements. While also balancing strictness on the one hand, with flexibility on the other. Now that the AST is beginning to cure, we plan subsequent releases to roll out higher level warnings.
#rick-AST-ly
- Clarify unmake's intention to target specifically the (upcoming) 2008 POSIX release, as opposed to older POSIX standards
- Clarify more caveats in unmake capabilities and proper makefile authorship generally
- Allow upcoming POSIX 2008 assignment operators
:=
,?=
, and+=
. Ensure:=
is treated as a macro declaration, rather than a rule declaration. - Reject rules that have exactly zero prerequisites, zero inline commands, and zero indented commands, as make processing for such rules is undefined behavior.
- Fix dev environment provisioning script for unmake itself, in the event that some cargo packages are already installed
- Accelerate line counting update algorithm
- Add unit tests for more standard POSIX make elements
#performance
- Optimize memory usage of line counting algorithm
- Improve CLI validation
- CR and CRLF now treated as parse errors
- Enrich AST with line numbers, in preparation for rendering linter warnings