Skip to content

Analysis release 2.1.0

Latest

Choose a tag to compare

@github-actions github-actions released this 05 Oct 15:13
· 214 commits to main since this release

Added 🚀

  • Dependencies in simplecc.sh: the map simplecc.sh writes, in the Docker image too, carries the project's
    dependencies for the experimental dependency view.

  • ccsh dependencyparser (experimental) extracts a project's dependency graph. A port of DependaCharta's
    analysis: tree-sitter dependency extraction for Java, Kotlin, C#, C/C++, Go, Python, PHP, TypeScript, JavaScript,
    Vue, Delphi and Rust, plus cycle detection and levelization. The result lands in the dependency lens — a
    file-to-file edge per dependency, carrying its weight (dependencies), whether it takes part in a cycle
    (isCyclic) and whether it runs against the architectural flow (isPointingUpwards), plus the level every file and
    folder sits on. Per-file outgoing_dependencies and incoming_dependencies go into the metrics lens. Imports
    resolve through each language's own rules plus tsconfig/jsconfig path aliases, bundler aliases and Module Federation
    remotes. Test files are excluded by default (--include-tests opts back in), because a test depends on everything
    it exercises and nothing depends on it, which moves every level and cycle. --omit-graph-analysis skips cycles and
    levels for a repository where they do not finish, and --file-timeout bounds a single file's parse.

  • The dependency lens carries the whole graph, not just edges: every edge says whether it takes part in a
    cycle and whether it runs against the architectural flow, and every file and folder carries its level.

  • Declarations and packages in the dependency graph: ccsh dependencyparser also writes every declaration
    with its kind, language and package under the file it is declared in, and the dependencies between declarations
    with how each one is used.

Changed

  • One file scanner for domainlanguageparser and dependencyparser. Both walked the tree with their own copy
    of the same scanner; the shared one lives next to the gitignore handling in AnalyserInterface. For
    domainlanguageparser this means -e/--exclude and -ibf/--include-build-folders now work as in every other
    parser (they were accepted and ignored), the common build folders are excluded when the root has no .gitignore
    (unless -ibf is given), minified bundles (*.min.js, *.bundle.js) are skipped, test directories are judged by
    the path inside the project rather than the absolute one, and files arrive in path order.

  • ccsh dependachartaimport is deprecated. ccsh dependencyparser runs DependaCharta's analysis on the source
    itself and now emits everything the importer receives and more — declaration kinds, levels, cycles and upward flags,
    at both file and declaration granularity — where the importer flattens all of it into edge and node attributes. It
    also declares .dc.json while DependaCharta emits .cg.json, so it never matched real output. The command still
    works and now says so on every run; it will be removed.

  • Much smaller domain files: the domain parser records a word once, on the file it came from, instead of
    repeating it on every folder above it, and writes tf-idf scores to three decimals — a parsed project takes
    about a third of the space it did, and the visualization adds a folder's words up as you open it.

Fixed 🐞

  • ./gradlew clean no longer breaks every following ktlint task. ktlint-gradle writes
    intermediates/ktLint/reporters.bin but never registers it as an output of loadKtlintReporters, so
    clean deleted the file while the task stayed UP-TO-DATE, and every ktlint task then failed with
    "specifies file ... which doesn't exist". The build now declares the output, so clean invalidates its
    producer. CI never saw this because it builds fresh checkouts rather than cleaning an existing one.

  • FileExtension recognizes .cts and .kts. The TypeScript entry listed cts without its leading dot, so no
    .cts file ever matched, and Kotlin script files had no entry at all. Both are now analysed by unifiedparser
    as well.

Chore 👨‍💻 👩‍💻

  • TreeSitterExcavationSite is now a module of the analysis build instead of an external library. The code of
    v0.12.0 moved into analysis/treeSitterExcavationSite unchanged, so the three parsers that use it compile
    against project(":treeSitterExcavationSite") rather than a JitPack artifact and its grammar versions are
    pinned in the analysis version catalog. Parser output is byte-identical.