RefTrace Changelog

Subscribe
Archives
January 9, 2025

Twice as Fast, Better Tested - RefTrace v0.5.0

RefTrace is a linter for Nextflow pipelines.
RefTrace v0.5.0 is released. This release focuses on correctness.

Release Highlights

  • Fewer parsing bugs. Passes 200 Groovy test cases.
  • Linting is twice as fast.
  • Better error reporting.

Parser Robustness

RefTrace's goal is to analyze Nextflow programs, not to be a general-purpose Groovy parser. Prior to this release, RefTrace worked in practice on open-source community core pipelines. However, some offline users were hitting edge cases in what the parser could handle.

That's a really frustrating experience!

RefTrace is now much more robust parsing Groovy. It successfully passes 200 of the core Groovy test cases. So even if you have (1+1).("a"+1)() in your pipeline, it should parse.

Faster Linting

RefTrace linting rules are written in Python. However, the core parsing library is native. Prior to this release, RefTrace would find all Nextflow *.nf files on the Python side and parse them sequentially. This release preserves that API (via reftrace slowlint) but defaults to parsing concurrently via the native library. Here's a timing comparison using some popular open source repositories (M1 Mac):

Repo

Old API

New API

sarek

13.63 seconds

6.25 seconds

rnaseq

7.87 seconds

3.69 seconds

chipseq

5.01 seconds

2.23 seconds

raredisease

11.07 seconds

3.92 seconds

Across a sample of 32 repositories, the average linting time per repo was 4.33s and is now 2.09s. In some cases like raredisease where there are many files to lint, this difference becomes more stark.

Better Error Reporting

RefTrace will now display multiple pipeline problems in one run. When there is a problem (either due to malformed input or a bug in the tool), RefTrace will display the offending file and line number if it can. RefTrace now provides instructions on submitting bug reports.

Other Changes

  • Python 3.13 support
  • Running reftrace lint will now generate a default rules.py file if it does not exist.

Try It

As a reminder, RefTrace can be run via:

pip install reftrace
reftrace lint

More information can be found on the website at https://reftrace.com.

Don't miss what's next. Subscribe to RefTrace Changelog:
GitHub X reftrace.com
Powered by Buttondown, the easiest way to start and grow your newsletter.