Repository navigation
Releases: tiny-earth-moon/outskirts
Releases · tiny-earth-moon/outskirts
Release list
3.18.0
Enhancements
- A JSON Schema of the configuration file,
outskirts.schema.json(generated byoutskirts config schema), with one entry per setting: type, description, default and allowed values. Theexamples/*.ymlfiles and the file written byscan --setupstart with theyaml-language-servercomment for editor completion. Newoutskirts config check [--config <file>] [--project-root <dir>]validates a configuration file without scanning: unknown keys (with a suggestion), wrong types, quoted booleans, invalidreport_excludeentries,retain_attributes, baseline and output paths; exits 1 on any problem. Closes #228 and theconfig checkpart of #227. --changed-since <ref>(changed_since) keeps only the results whose file changed since the merge base of<ref>andHEAD, 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.--quietprints 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 checkdocumentation; CONTRIBUTING: "Adding an option" checklist.
3.17.0
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.metalfiles of the project are read by a lightweight parser, and thekernel,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.metalfile declares is reported asmissingMetalFunction. 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 themissingMetalFunctionresults. Prompted by the upstream discussion peripheryapp/periphery#1119.
3.16.1
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 formercom.github.tiny-earth-moon.peripherydirectory, so nothing is rebuilt; when both exist the old one is removed, andoutskirts clear-cacheremoves 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
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
outskirtsandperipheryremains available as an alias;.outskirts.ymlis read before.periphery.yml, and// outskirts:ignoreis equivalent to// periphery:ignore. The repository moved to tiny-earth-moon/outskirts, where the update check now looks for releases; the SARIF driver is namedoutskirts. 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
sarifformat is available on Linux. #219
3.15.0
Enhancements
- New
--relative-to <dir>option (configuration keyrelative_results_base): the base of the paths emitted with--relative-results, and of thegithub-actions,gitlab-codequality,codeclimateandsarifoutputs. 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, sortedv2format that lists the kind, name and file of each entry;v1files are still read. #215 - New
sarifoutput 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
Enhancements
- The Code Climate output now carries the
type,check_nameandcategoriesfields 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 aMutex. 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
Enhancements
- Unused generic parameters of structs, classes, enums and actors (phantom types such as
Tagged<UserTag>) are no longer reported by default; the newreport_unused_type_parametersoption (--report-unused-type-parameters) restores these results. #190
3.13.4
Bug Fixes
isolatedparameters, 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 asTextFieldStyleare retained. #194- Live-preview retention covers WidgetKit
#Preview(as:)andPreviewProviderpreviews of widgets. #204 - C-exported and linker-visible declarations (
@c,@_cdecl,@used,@_silgen_name) are retained. #177 dynamicallyCallmethods of a@dynamicCallabletype are retained when the type is called. #196- Classes named by
valueTransformerNameorrepresentedClassNamein 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.swiftno longer attach to the preceding declaration. #189 - A type whose extension carries
@mainis 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
@Observableclasses are now reported, as for plain classes; scans of projects using Observation may show new results. #178
3.13.3
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.ymlvalue 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.ymleven when it equals the default; every boolean option also accepts--no-<option>. #199 - The
github-actions,gitlab-codequalityandcodeclimateformats always use relative paths, and their prerequisites are checked before the scan. #200 --baseline,--write-baselineand--write-resultspaths 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
Bug Fixes
- The only explicit initializer of a class that a macro such as SwiftData's
@Modelexpands is no longer reported unused: implicit, macro-generated initializers no longer count against the sole-initializer rule. (#173) - CSV output: the
ModifiersandAttributescolumns 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 thefileandtitleproperties, 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)