Skip to main content

Code metrics analyzer for Swift projects.

Project description

FOSSA Status License Build Status codecov Codacy Badge PyPI

swift-code-metrics

Code metrics analyzer for Swift projects.

Example code distribution Example deviation main sequence
Example internal distribution

Introduction

The goal of this software is to provide an insight of the architectural state of a software written in Swift that consists in several modules. Inspired by the book of Robert C. Martin, Clean Architecture, the software will scan the project to identify the different components in order to assess several common code metrics in the software industry:

  • the overall number of concrete classes and interfaces
  • the instability and abstractness of the framework
  • the distance from the main sequence
  • LOC (Lines Of Code)
  • NOC (Numbers Of Comments)
  • POC (Percentage Of Comments)
  • NOM (Number of Methods)
  • Number of concretes (Number of classes and structs)
  • NOT (Number Of Tests)
  • NOI (Number Of Imports)
  • Frameworks dependency graph (number of internal and external dependencies)

Requirements

This is a Python 3 script that depends on matplotlib, adjustText, pyfunctional and pygraphviz.

This latest package depends on the Graphviz binary that must be installed before. If you're in a Mac environment, you can install it directly with brew install graphviz.

Usage

The package is available on pip with pip3 install swift-code-metrics.

The syntax is:

swift-code-metrics --source <path-to-swift-project> --artifacts <output-directory> --exclude <excluded-folders> --tests-paths <test-paths> --generate-graphs

  • --source is the path to the folder that contains the main Xcode project or Workspace
  • --artifacts path to the folder that will contain the generated output.json report
  • --exclude (optional) space separated list of path substrings to exclude from analysis (e.g. Tests will ignore all files/folders that contain Tests)
  • --tests-paths (default: Test Tests) space separated list of path substrings matching test classes
  • --generate-graphs (optional) if passed, it will generate the graphs related to the analysis and save them in the artifacts folder

Development

Please run ./install.sh and ./build_and_test.sh to install dependencies and run the tests.

The repo comes with a predefined setup for VS Code to debug and run tests as well.

Documentation

Please follow the guide with a practical example to get started.

Current limitations

  • This tool is designed for medium/large codebases composed by different frameworks. The script will scan the directory and it will identify the frameworks by the name of the 'root' folder, so it's strictly dependent on the file hierarchy (unless a project path override file is specified)

  • Libraries built with spm are not supported.

  • The framework name is inferred using the directory structure. If the file is in the root dir, the default_framework_name will be used. No inspection of the xcodeproj will be made.

  • The list of methods currently doesn't support computed vars

  • Inline comments in code (such as struct Data: {} //dummy data) are currently not supported

  • Only XCTest test frameworks are currently supported

TODOs

  • Code improvements
  • Other (open to suggestions)

Contact

Mattia Campolese

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

swift-code-metrics-1.5.4.tar.gz (25.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

swift_code_metrics-1.5.4-py3-none-any.whl (28.8 kB view details)

Uploaded Python 3

File details

Details for the file swift-code-metrics-1.5.4.tar.gz.

File metadata

  • Download URL: swift-code-metrics-1.5.4.tar.gz
  • Upload date:
  • Size: 25.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.4

File hashes

Hashes for swift-code-metrics-1.5.4.tar.gz
Algorithm Hash digest
SHA256 c69c023a48bdf8e81477bb3a210249cfce2d17422c3ae26b079c811accac12c8
MD5 6ecfdcec261e18582b6d25995bc4be20
BLAKE2b-256 4b1a3e4884b490ff72e1f30f4c0e97596c35abddd60662d7f5d3e57198dd717e

See more details on using hashes here.

File details

Details for the file swift_code_metrics-1.5.4-py3-none-any.whl.

File metadata

File hashes

Hashes for swift_code_metrics-1.5.4-py3-none-any.whl
Algorithm Hash digest
SHA256 4896db6bec555045f782865b0e790acc0007abacef1eceafc46693855fa19cae
MD5 44723fbf82ebc10b1ec1ca2a7e7be3c1
BLAKE2b-256 952314cfaabf6f854660a3b4e96a060caf9d3142748ff670da0a0e5fe2cd4859

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page