Home

Awesome

<img src ="https://raw.githubusercontent.com/source-foundry/ufolint/images/images/title-header-crunch.png" />

PyPI Python CI Python Lints codecov Codacy Badge

ufolint is a source file linter for typeface development in Unified Font Object (UFO) source code. It was designed for continuous integration testing of UFO source contributions to typeface projects.

<p align="center"> <img src="https://raw.githubusercontent.com/source-foundry/ufolint/images/images/ufolint_example.gif"/> </p> <p align="center"> <img src ="https://raw.githubusercontent.com/source-foundry/ufolint/images/images/ufolint_travis_example-crunch.png" /> </p>

The application performs a UFO version specific static analysis of the source text files against the UFO v2 and v3 specifications for issues that include:

These tests are performed through a combination of public methods in the fontTools.ufoLib library and additional tests that are implemented in the ufolint application. ufolint catches exceptions raised in the ufoLib public read methods for all _.plist file types and all ufoLib validations performed on _.glif files. These are returned to users with informative error messages that indicate the filepath(s) of concern and exit status code 1.

Install and Upgrade

ufolint can be run locally or with remote CI testing services.

Local Install and Upgrade

Use the command:

$ pip install ufolint

Upgrade to a new version of the application with the command:

$ pip install --upgrade ufolint

Local Usage

The process is fully automated. Simply point ufolint to one or more UFO source directories and it takes care of the rest. ufolint exits with status code 0 if all tests pass and exits with status code 1 if any tests fail.

$ ufolint [UFO source path] ([UFO path 2] [UFO path3]...)
Example
$ ufolint Awesome-Regular.ufo Awesome-Bold.ufo

For critical failures that prevent the completion of further testing, ufolint exits immediately and other tests are aborted. In all other circumstances, failures are collected across the entire analysis and displayed at the completion of all tests.

ufolint provides verbose, useful error messages that include the file(s) of concern, the error type, and in many cases, the problematic line in the file.

Travis CI Setup

To continuously test your UFO source changes on Travis with each commit pushed or pull request submitted to your Github repository, use these initial two steps from the Travis Getting Started Guide:

Then in your Github repository,

.travis.yml
sudo: false
language: python

env:
  - VARIANT=src/Test-Regular.ufo
  - VARIANT=src/Test-Bold.ufo
  - VARIANT=src/Test-Italic.ufo
  - VARIANT=src/Test-BoldItalic.ufo

before_script: pip install ufolint

script: "ufolint $VARIANT"

notifications:
  email: false

This Travis setting structure performs the variant tests in parallel for each of the variants specified under the env field of the Travis settings file. Each variant will be labeled on the Travis testing page like this:

<p align="center"> <img src ="https://raw.githubusercontent.com/source-foundry/ufolint/images/images/parallel_ufolint_jobs-crunch.png" /> </p>
[![Build Status](https://travis-ci.org/[ACCOUNT]/[REPOSITORY].svg?branch=master)](https://travis-ci.org/[ACCOUNT]/[REPOSITORY])

Acknowledgments

Built with the fantastic fontTools ufoLib library where a majority of the UFO validation work has been performed!

License

MIT License