Skip to content

Releases: tiny-earth-moon/outskirts

3.18.0

Choose a tag to compare

@tiny-earth-moon tiny-earth-moon released this 04 Nov 07:04
3.18.0
487d741

Enhancements

  • A JSON Schema of the configuration file, outskirts.schema.json (generated by outskirts config schema), with one entry per setting: type, description, default and allowed values. The examples/*.yml files and the file written by scan --setup start with the yaml-language-server comment for editor completion. New outskirts config check [--config <file>] [--project-root <dir>] validates a configuration file without scanning: unknown keys (with a suggestion), wrong types, quoted booleans, invalid report_exclude entries, retain_attributes, baseline and output paths; exits 1 on any problem. Closes #228 and the config check part of #227.
  • --changed-since <ref> (changed_since) keeps only the results whose file changed since the merge base of <ref> and HEAD, committed, uncommitted or untracked changes included; --changed-lines (changed_lines) further keeps only the results whose line falls inside a changed hunk. The whole project is still analysed; the filter runs after the baseline. Outside a git work tree or with an unknown ref the scan stops with an explicit error. The README gains a "Pull request checks" paragraph. Closes #231.
  • --quiet prints nothing on stdout when a scan reports no result, in every format; together with --write-results <file> the report goes to the file only. Exit statuses are unchanged. Closes #296 (requested upstream in peripheryapp/periphery#933 and #1129).
  • README: Baseline section, GitHub Actions and GitLab CI recipes, Framework conventions section, configuration schema and config check documentation; CONTRIBUTING: "Adding an option" checklist.

3.17.0

Choose a tag to compare

@tiny-earth-moon tiny-earth-moon released this 04 Nov 06:15
3.17.0
dd8d659

Enhancements

  • The build cache key now covers the build arguments passed after --; output and report options (--format, --baseline, --write-baseline, --strict, --report-include, --report-exclude, --relative-results) never trigger a new build. Scans with different build arguments no longer share one index store, and existing caches keep their names. The README explains how the cache is keyed and how to reuse an existing build with --skip-build --index-store-path.
  • New opt-in analysis --detect-unused-metal-functions (detect_unused_metal_functions): the .metal files of the project are read by a lightweight parser, and the kernel, vertex, fragment, [[visible]] and [[stitchable]] functions that no Swift string literal names (makeFunction(name:), MTLFunctionDescriptor.name, MTLFunctionStitchingFunctionNode(name:)) are reported as unused; a literal naming a function that no .metal file declares is reported as missingMetalFunction. A name that is not a plain literal retains every Metal function, and a library created at run time (makeLibrary(source:) and the like) disables the missingMetalFunction results. Prompted by the upstream discussion peripheryapp/periphery#1119.

3.16.1

Choose a tag to compare

@tiny-earth-moon tiny-earth-moon released this 03 Nov 23:00
3.16.1
768b03d

Bug Fixes

  • The build cache now lives in ~/Library/Caches/com.github.tiny-earth-moon.outskirts, under the new name. The first scan moves a cache left under the former com.github.tiny-earth-moon.periphery directory, so nothing is rebuilt; when both exist the old one is removed, and outskirts clear-cache removes it too if it is still there.
  • The last comments in the sources that referred to the tool as Periphery now say outskirts.

3.16.0

Choose a tag to compare

@tiny-earth-moon tiny-earth-moon released this 03 Nov 16:32
3.16.0
05fe1d2

Enhancements

  • The project is now named outskirts: it finds what lies at the outskirts of your Swift project, the code nothing reaches. The executable is outskirts and periphery remains available as an alias; .outskirts.yml is read before .periphery.yml, and // outskirts:ignore is equivalent to // periphery:ignore. The repository moved to tiny-earth-moon/outskirts, where the update check now looks for releases; the SARIF driver is named outskirts. See Migrating from Periphery.
  • Linux is now built and tested in CI, in the official Swift 6.4 container and on the minimum toolchain (Swift 6.1); the standard streams are read through a small C shim and the SARIF fingerprints no longer need CryptoKit, so the sarif format is available on Linux. #219

3.15.0

Choose a tag to compare

@tiny-earth-moon tiny-earth-moon released this 03 Nov 12:08
3.15.0
53833e3

Enhancements

  • New --relative-to <dir> option (configuration key relative_results_base): the base of the paths emitted with --relative-results, and of the github-actions, gitlab-codequality, codeclimate and sarif outputs. It defaults to the project root, so existing output is unchanged; in a repository that holds several projects, --relative-to "$GITHUB_WORKSPACE" or --relative-to "$CI_PROJECT_DIR" attaches annotations to files. #225
  • Baselines can now only shrink: entries that no longer match any result are logged (listed with --verbose), --prune-baseline (prune_baseline) rewrites the baseline without them, and --strict-baseline (strict_baseline) fails the scan when there are any. Baselines are written in a readable, sorted v2 format that lists the kind, name and file of each entry; v1 files are still read. #215
  • New sarif output format (SARIF 2.1.0) for GitHub Code Scanning and other SARIF consumers, with one rule per result kind, stable fingerprints and the redundant conformances as related locations. #213

3.14.1

Choose a tag to compare

@tiny-earth-moon tiny-earth-moon released this 03 Nov 10:33
3.14.1
5601c0f

Enhancements

  • The Code Climate output now carries the type, check_name and categories fields required by the Code Climate engine specification. #221

Bug Fixes

  • Fixed a data race on the error propagated by concurrent indexing jobs (JobPool) and on the update checker state; the first error is now kept behind a Mutex. The mutable statics shared across threads are gone and Logger, Extensions, Shared and Configuration build in the Swift 6 language mode. #181
  • The parser now uses swift-syntax 604, matching the Swift 6.4 toolchain of CI, the Homebrew bottle and current Xcode. #186

3.14.0

Choose a tag to compare

@tiny-earth-moon tiny-earth-moon released this 02 Nov 23:17
3.14.0
cad2d04

Enhancements

  • Unused generic parameters of structs, classes, enums and actors (phantom types such as Tagged<UserTag>) are no longer reported by default; the new report_unused_type_parameters option (--report-unused-type-parameters) restores these results. #190

3.13.4

Choose a tag to compare

@tiny-earth-moon tiny-earth-moon released this 02 Nov 20:20
3.13.4
fd7faca

Bug Fixes

  • isolated parameters, including = #isolation, are no longer reported as unused. #197
  • A property-wrapped parameter used only through its $ projection is no longer reported as unused. #207
  • Parameters of @available(*, unavailable) stubs are no longer reported as unused. #209
  • _body(configuration:) and other underscored witnesses of SwiftUI styles such as TextFieldStyle are retained. #194
  • Live-preview retention covers WidgetKit #Preview(as:) and PreviewProvider previews of widgets. #204
  • C-exported and linker-visible declarations (@c, @_cdecl, @used, @_silgen_name) are retained. #177
  • dynamicallyCall methods of a @dynamicCallable type are retained when the type is called. #196
  • Classes named by valueTransformerName or representedClassName in a Core Data model are retained. #195
  • Optional properties written through a stored key path are no longer reported as unassigned. #198
  • References in top-level code of main.swift no longer attach to the preceding declaration. #189
  • A type whose extension carries @main is retained as the entry point. #205
  • A public protocol whose public extension witnesses a requirement of another public protocol is no longer reported as redundantly public. #187
  • Types used only through inline arrays ([N of T]) or pack expansions are no longer reported as redundantly public. #202
  • Results no longer depend on formatting: one-line enum cases, subscripts and typealiases are analysed like multi-line ones. #188
  • Unused and assign-only properties of @Observable classes are now reported, as for plain classes; scans of projects using Observation may show new results. #178

3.13.3

Choose a tag to compare

@tiny-earth-moon tiny-earth-moon released this 02 Nov 19:59
3.13.3
cd696f8

Bug Fixes

  • JSON and redundant-conformance output is now deterministic across runs: results, attributes and references are emitted in a stable order. #174
  • Synthetic result ids no longer contain a line, a column or an absolute String Catalog path, so baselines survive line shifts and other checkouts. The ids of unused imports, empty extensions and String Catalog keys, and the matching CodeClimate and GitLab fingerprints, change once; baselines written by earlier versions still match, with a warning to rewrite them with --write-baseline. #182
  • A .periphery.yml value of the wrong type or an invalid enum value now prints a warning naming the key, instead of being ignored silently. #175
  • A generic project configuration may omit keys, and a malformed one, like a malformed baseline or JSON package manifest, fails with a readable message naming the key at fault. #185
  • A command-line value now overrides .periphery.yml even when it equals the default; every boolean option also accepts --no-<option>. #199
  • The github-actions, gitlab-codequality and codeclimate formats always use relative paths, and their prerequisites are checked before the scan. #200
  • --baseline, --write-baseline and --write-results paths are validated before the scan starts. #210
  • Ctrl-C (SIGINT) and SIGTERM now exit with a non-zero status (130 and 143). #183
  • Verbose and debug logs go to stderr, so JSON, CSV and other machine-readable output on stdout stays valid. #184
  • Invalid Swift versions, guided-setup answers and project paths fail with a readable error instead of crashing. #180

3.13.2

Choose a tag to compare

@tiny-earth-moon tiny-earth-moon released this 02 Nov 13:05
3.13.2
43e1091

Bug Fixes

  • The only explicit initializer of a class that a macro such as SwiftData's @Model expands is no longer reported unused: implicit, macro-generated initializers no longer count against the sole-initializer rule. (#173)
  • CSV output: the Modifiers and Attributes columns are no longer swapped, and fields containing a comma, a double quote or a line break are quoted per RFC 4180. Rows of declarations with attributes change shape; the header is unchanged. Contributed by @badrisatyam1-ctrl in #216. (#176)
  • GitHub Actions output escapes %, carriage returns and line feeds in messages, and : and , in the file and title properties, so a name or hint containing them no longer cuts the annotation short. (#176)
  • GitHub Markdown output escapes | and replaces line breaks in table cells, so each result stays on one row. (#176)