All notable changes to FOP (Filter Orderer and Preener) are documented in this file.
- Add per-file config sections in
.fopconfigwith[filename]overrides - Add
hls=,xmlprune=,tag=to recognised filter options - Add version bump type selector (patch/minor/major) to publish workflow
- Show commit URL and message after successful push
- Overwrite "Connecting to server" and "Comment accepted" lines on success
- Warn when Windows line endings (CRLF) detected, suggest
.gitattributesfix - Update GitHub Actions to Node.js 24-compatible versions
- Update README-WIN.md with line endings guide
- Add
--benchmarkflag for timing sort performance (3 iterations, reports lines/sec, MB/sec, ms/file) - Support
--benchmarkwith--check-filefor single file benchmarking - Fix
jsonprune=filter parsing: escaped\$separator, dot replacement, and space preservation - Add
mimallocallocator for improved parallel allocation performance - Add PGO (profile-guided optimization) to Linux v3/v4 and macOS ARM CI builds
- Add
parsing.mddocumenting filter rule support across ABP, uBO, and AdGuard - Use
Cow<str>inremove_unnecessary_wildcardsto avoid allocation on common path - Use
Cow<str>infilter_tidypreprocessing to avoid allocation when unchanged - Fast reject for
is_extendedcheck inelement_tidyusing match on separator - Remove duplicate
--add-timestamp=match arm in CLI parser - Extract
is_localhost_file/is_adguard_filehelpers to reduce duplication
- Fix sorting of
-abp-propertiesrules
- Add
--abp-convertto convert-abp-contains/-abp-hasintohas-text/has - Offer v4 AVX optimised builds
- Add security warning information to README
- Suppress intentional clippy
writeln!warning for Unix line endings
- Fix forced Unix line endings (LF) in output files
- Add
--parse-adguardfor improved AdGuard rule parsing (global and per-file) - Add
--localhost-files=for specifying specific localhost format files
- Replace regex with string ops for localhost sort key extraction and entry validation
remove_unnecessary_wildcards— skip allocation when no wildcardsfilter_tidy— avoid allocation when no spaces- Optimize
add_checksum: return written checksum, skip redundant verify read - Avoid mutex lock on every
write_warningcall
- Trim leading/trailing whitespace from element rule selectors
- Adjust typo checks
- Fix clippy warning
- Implement
validate_checksumfunctionality - Add
--validate-checksum-and-fixoption - Have
--add-checksumautomatically validate the checksum - Separate datestamp functions into
fop_datestamp.rs
- Avoid redundant String allocations for regex captures in
combine_filters parse_bool: trim whitespace and avoid allocationArgs::parse: collect args once instead of iteratingenv::args()multiple times- Avoid allocating a lowercase copy of the string on every call
- Release mutex locks before file I/O in
flush_warnings
- Fix regex for combining rules
- Improve
fop_checksum.rscompatibility
- Add
--add-checksum=<files>to insert checksums on commit - Add
--add-timestampto update timestamp in file headers - Add
--git-binary=<path>for custom git location - Check for
#+jsfor missing#typo - Check for invalid characters in
domain=
String→Cow<'static, str>— avoid heap-allocating literalscheck_additions— return references instead of cloning- Replace
LEADING_COMMAregex withtrim_start_matches fix_all_typos— avoid cloning when no typosEXTRA_HASH— build result from captures instead of running the regex twice- Implement fast reject for filter processing
TRIPLE_DOLLARandDOUBLE_DOLLARdon't need regex- Replace O(n)
remove(0)loop inremove_unnecessary_wildcardswith single slice format_version_utc— compute directly instead of format-then-parse
- Remove any excess spaces on network rules
- Prune spaces in domain cosmetics
- Improve banned domains functionality
- Remove dead code, fix
check_additions - Improve mutex usage pattern in
write_warning - Simplify
flush_warningswith early returns
- Switch from
coloredtoowo-colorsdependency - Add
--limited-quietto suppress directory listing output - Ensure
A:/P:commit prefixes are followed by a URL - Include CLAUDE.md project guide
- Refactor
fop_gitfor limited git output withlimited_quiet
- Fix
--ciargument detection - Allow
--cito properly check banned domains in PRs and direct commits - Support commit comment
--historyfrom the CLI - Early return when no history (skip unnecessary loop iteration)
- Add
--cimode for GitHub Actions checks (exit codes on failure) - Implement
rustylinefor better user input with history - Support
--only-sort-changedto only process git-changed files - Add
--rebase-on-failto auto-rebase and retry failed pushes
- Avoid allocating a new String for every input line
- Pre-allocate HashSet capacity for duplicate detection
std::mem::take()to swap fields without cloning- Don't hold
WARNING_OUTPUTlock while writing the file - Use
std::fmt::Writeand iterate HashSet directly
- Fix a regex parser issue
- Code refactoring with
with_tracked_changes
- Ensure banned-list isn't checked against itself
- Collect duplicates locally, merge once (reduces lock contention)
- Optimize
element_tidy: collect regex matches before iteration - Move
SKIP_SCHEMESto module-level const
- Add
--check-banned-list=to detect banned domains in git additions - Add
--auto-banned-removeto auto-remove banned domains and commit - Ignore additions with
domain=andfrom=for banned list checks - Optimize banned domains function
- Add
--pr-show-changesto include rule changes in PR body - Fix ARM Windows build (avoid VCRUNTIME140 DLL dependency)
- Pre-allocate HashMap capacity for config
- Clear global
SORT_CHANGESafter processing - Expand typo examples
- Fix ASCII chars and ensure URL is within limit
- Allow merging of
:has-text()on same elements - Add
--only-sort-changedto only sort git-changed files - Allow user to
git restoreon cancelled large commits - Support
ABORTto instant revert changes - Reduce mutex contention in parallel diff collection
- Improve user reporting when a git push fails
- Improve git branch name detection with
--create-pr - Make
fop_gitwork with GitHub, GitLab, and self-hosted git - Prefer non-master/non-main branches when using
--create-pr - Refactor
fop_git.rsfor better remote detection
- Add
--ignore-all-but=to only process specific files - Add
#[inline]to hot path functions - Use
any()iterator instead of manual loops
- Optimize localhost sorting with cached key computation
- Optimize element filter sorting with cached key
- Use
to_ascii_lowercase()for option names - Use cached
file_typefrom walkdir to reduce syscalls - Optimize typo detection: single regex pass instead of two
- Optimize sort: zero-allocation ASCII case-insensitive comparison
- Fix argument parsing of
--ignore-dot-domains - Fix duplicate
base_cmdargs increate_pull_request - Fix line number tracking in diff parser for typo detection
- Handle detached HEAD in branch detection
- Make domain sorting deterministic (non-inverted before inverted)
- Sync
package-lock.jsonversion and add win32 platform
- Add
--outputfor changed file output - Allow multiple file output with empty
--output-diff - Add Linux RISC-V build
- Improve compatibility for Linux ARM and Windows IA32
- Add Visual Studio Code integration docs
- Replace
once_cellwithLazyLock(stdlib) - Remove
dirsdependency - Optimize: skip regex parsing for filters without options
- Optimize: avoid double file read using Cursor
- Add
direct-push-usersto bypass PR for trusted users - Fix Windows ARM building
- Create optimized Linux/Windows ARM binaries
- Add domain typo detection (domain separator typos)
- Add
create-pr = trueconfig option - Fix typo dry-run bug
- Add warnings for incompatible options
- Fix regex errors in tests
- Add
--quietto limit verbose output - Add
--output-diff=for diff output without modifying files - Add
--check-file=for sorting a specific file - Add
--ignore-configto skip.fopconfig - Support
--fix-typosscanning improvements - Add Windows/Linux ARM builds
- Separate git functions into
fop_git.rsmodule - Add
--create-prfor creating pull request branches - Add
--fix-typosfor cosmetic rule typo detection - Use
--rebaseto avoid merge branch commits - Optimize git commands with
.args()chaining
- Support ABP
#0rule parsing - Support custom
addheader=flag - Support additional AdGuard custom rules
- Avoid
clone()in main loop — useinto_owned() - Use
&strcomparisons instead ofStringfor sorting sort_unstable_byfor 10-20% faster sorting- Skip combine loop overhead for single-filter sections
- Use AHashMap with pre-allocation for config
- Fix Windows npm builds
- Validate
--localhostrules and remove invalid entries - Refactor into single
process_locationcall
- Add
--ignore-dot-domainsoption - Add
disable_domain_limitandwarning_outputsupport - Optimize warning output with buffered writes
- Avoid repeated string allocations in domain validation
- Enable Fat LTO optimization
- Target
apple-m1for macOS ARM builds
- Add
--no-large-warningoption - Add
--file-extensions=for configurable file extensions - Add
--comments=for configurable comment prefixes - Add missing uBO options
- Fix npm publish workflow
- Add missing filter flags
- Ensure users get the latest version on install
- Add
--ignoredirs=option (#1) - Refactor
main.rsintofop_sort.rsandtests.rs - Add
--show-configoption - Remove EasyList-specific hardcoded rules
- Add macOS build support
- Fix npm release issue
- Add
--git-messagefor non-interactive commit messages - Add Windows README
- Add
--localhostfor hosts file sorting - Add
--ignorefiles=option - Add
.fopconfigconfiguration file support - Add
--config-file=for custom config path - Implement
ahashfor faster HashSets - Use BufWriter for faster file writing
- Add colored terminal output
- Add
--disable-ignoredoption - Add
--no-sortoption - Remove hardcoded
easylist_adservers.txtreference - Make FOP.py-compatible sorting the default
- Add
--no-msg-checkoption - Add missing selectors
- Build both baseline and optimized x86_64 binaries
- Improve support for extended AdGuard and ABP rules
- Fix underscore replacement to only affect option names, not values
- Add support for uBO rules
- Improve support for regex, denyallow, removeparam
- Add npm publish workflow
- Initial Rust port of Python FOP
- Add parallel file processing with Rayon
- Simplify
remove_unnecessary_wildcards - Extract
sort_domainshelper function - npm package setup