Mccabre

  • This is a code analysis tool I made. It recycles concepts and snippets stashed away as I've been working on beacon.

  • You can check it out here (docsite coming soon - GH actions aren't set up on its mirror)

  • I'm finding that this ends up happening a lot with me, where I start writing a script or a feature and just pull it out and make something small with it.

  • Notable things as far as personal workflows go here is practicing "documentation driven development." I wrote the documentation before the implementations for this project to keep myself on track.

Beacon

  • This project is an exercise in the insanity induced by accruing technical debt.

    • The codebase is huge and the docsite when printed (it's an mdbook site) would be over 100 pages.

    • Pattern matching is a complex feature. It's no wonder it's so recent to Python.

    • Unions in particular required a bit of refactoring

  • I've extended the CLI to render diagnostics behind the debug command (it's not included in release builds)

    • Speaking of which, I need to make a release roadmap for this project

$ beacon debug diagnostics src/

 Running comprehensive diagnostics on 5 file(s)...

 0 Parse Errors

 3 Lint Issues
 src/main.py:5:1 [BEA015] 'os' imported but never used
    5 import os
             ~~
 src/utils.py:10:5 [BEA018] 'x' is redefined before being used
    10     x = 2
           ~
 src/helper.py:3:1 [BEA015] 'sys' imported but never used
    3 import sys
             ~~~

 2 Type Errors
 src/main.py:12:9 Cannot unify types: Int ~ Str
    12     z = x + y
               ~~~~~
 src/utils.py:20:5 Undefined type variable: τ5
    20     result = unknown_func()
                    ~~~~~~~~~~~~

Summary: 5 total issue(s) found
  • There's still some work to be done (type solving internals like τ5 are probably useless to an end user)