Everything polished, and ready to be used by you.
✨ Opus 5 Summary
Many major fixes and polishes. C#, .NET and the single file components, every number saying which way it went, and a picture you can arrange by hand
C#, .NET and XAML
- a
usinglands on the files that declare that namespace, since several folders fill one and no path rule can say which: on PowerToys that is 10.5k internal edges to 13.4k, andMicrosoft.PowerToysstops reading as an outside package on 604 files - markup is read too:
x:Classlinks a view to the file behind it,clr-namespace:and WinUI'susing:to the controls it places, and a merged dictionary through apack://orms-appx:///uri - a member is told from the statement written the same way, so a constructor, an expression body and an interface member declare while
return Compute(1);does not, and a class whose brace opens on the line below spans its own body .csproj, central package management,packages.configand the nuget store give versions, licences and advisories,dotnet testcounts its cases by the attribute each runner declares them with, and an ASP.NET route reads[controller]as the class it names
Vue, Svelte, and one map per language
- a single file component is its script, so a template is never code and a line still says where it is: 15 files read to 35 on a vue app, and 51% call coverage to 92%
@/xis not a package, since nothing installs under a bare scope, so it resolves to src the way every bundler that offers it means- a name a factory hands back is a declaration other files can call, which is 33k more call edges on vscode
- python packages found by their
__init__.pyand rust crates at the root their manifest declares: on ripgrep, 425 import edges to 801, and 46 "fix this import" tasks on code that compiles gone with them - dart and flutter resolve through
package:names off everypubspec.yaml
Numbers that say which way they went
- an arrow on every kpi, over a window you pick: none, 24h, 7d, a month, a rolling year or the year so far
- lines and commits come off the log, and the other twenty off a throwaway checkout of the commit that window opens on
- tests are counted in whatever language they were written in, pytest,
go test,cargo testanddotnet testalike, with the command that would run them - a python dependency knows its version, its licence and its size, off the venv and the lockfiles
A picture you can arrange, and settings a link can name
- drag a dot and it moves inside the module holding it, drag a module and its dots go with it, drag a repo and everything in it keeps its arrangement and travels: panning is what the background does
- panels only move when asked, so dragging, reordering and hiding stay off until the settings turn them on
#dialog=settingsand#dialog=exportare linkable and survive a reload, and the ellipsis menu is three buttons in the header- the api graph is one more file the export panel hands you, and the timeline reads its shares back as lines on a second axis
.desprawlignore, one exclude a reader can write down for the folder no heuristic will ever know about
Fixes worth naming
- a helper collected every call that shared its name, so one
def lowertook everyx.lower()in the repo - somebody else's code was counted as this project's: a repo committing its node_modules read as 437k lines for a fifteen file project
- dead code that was provably alive: a declaration where a value goes runs where it sits, a caller through a barrel is a caller, and a test's own declarations are never delete tasks
- a route decorator was read twice, once as the endpoint it is and once as the request it is not
- a document describing another repo's api stood as its server: code answers, a document describes
- call sites with no readable path were dropped in silence, and are counted and reported now
- every stage read and scrubbed the same file again: one bounded cache, 11% and 18% off the api view on two repos, byte identical output
- smaller: a pdf read as a language, a flutter repo read as Kotlin,
src/sourcesread as "Source sources", and svg path data outranked real copy in the repeated-text panel
Try it without installing anything: https://finnmglas.github.io/desprawl/ reads itself, vscode, and a backend with two frontends calling it.