isuttell/grunt-flow-type-check

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# grunt-flow-type-check

> Run Facebook's Flow static type checker

[![Build Status](http://img.shields.io/travis/isuttell/grunt-flow-type-check.svg?style=flat)](https://travis-ci.org/isuttell/grunt-flow-type-check)
[![Test Coverage](https://img.shields.io/codeclimate/coverage/github/isuttell/grunt-flow-type-check.svg?style=flat)](https://codeclimate.com/github/isuttell/grunt-flow-type-check)
[![Code Climate](https://img.shields.io/codeclimate/github/isuttell/grunt-flow-type-check.svg?style=flat)](https://codeclimate.com/github/isuttell/grunt-flow-type-check)
[![npm downloads](http://img.shields.io/npm/dm/grunt-flow-type-check.svg?style=flat)](https://www.npmjs.org/package/grunt-flow-type-check)
[![npm release](http://img.shields.io/npm/v/grunt-flow-type-check.svg?style=flat)](https://www.npmjs.org/package/grunt-flow-type-check)

## Getting Started
This plugin requires Grunt `>=0.4.0`

If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

```shell
npm install grunt-flow-type-check --save-dev
```

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

```js
grunt.loadNpmTasks('grunt-flow-type-check');
```

## The "flow" task
_Run this task with the `grunt flow` command._

[Flow](http://flowtype.org) is a static type checker, designed to find type errors in JavaScript programs. Typed Flow code easily transforms down to regular JavaScript, so it runs anywhere.

### Overview
In your project's Gruntfile, add a section named `flow` to the data object passed into `grunt.initConfig()`.

```js
grunt.initConfig({
  flow: {
    app: {
      src: 'src/',            // `.flowconfig` folder
      options: {
        background: false,    // Watch/Server mode
        all: false,           // Check all files regardless
        lib: '',              // Library directory
        stripRoot: false,     // Relative vs Absolute paths
        weak: false,          // Force weak check
        showAllErrors: false, // Show more than 50 errors
      }
    }
  }
});
```

### Options

#### src
Type: `String`
Default value: `.`

Default location of `.flowconfig`

#### options.weak
Type: `Boolean`
Default value: `false`

Use the weak option to check the files.

#### options.lib
Type: `String`
Default value: ``

Library folder. This can be defined here or in `flowconfig`.

#### options.showAllErrors
Type: `Boolean`
Default value: `false`

By default only the first 50 errors are shown. This will show all of them.

#### options.stripRoot
Type: `Boolean`
Default value: `false`

Use relative paths instead of absolute

#### options.all
Type: `Boolean`
Default value: `false`

Checks all files regardless of if they have `/* @flow */` at the top. Use this with care.

#### options.background
Type: `Boolean`
Default value: `false`

Run the Flow server in the background. This is used in conjunction with watch.

### Usage Examples

#### Basic
By default we check for `.flowconfig` in the root directory and then run `flow check`

```js
grunt.initConfig({
  flow: {
    app: {
      src: '.',
      options: {
        background: false,
      }
    }
  },
});
```

#### Watch
Running `flow check` each time can be slow. Alternatively, you can run the Flow server in the background and use [grunt-contrib-watch](https://github.com/gruntjs/grunt-contrib-watch) to get any current errors when a files changes.

```js
grunt.initConfig({
  flow: {
    watch: {
      src: '.',
      options: {
        // Task-specific options go here.
        background: true
      }
    }
  },
  watch : {
      flow: {
        files: ['src/**/*.jsx'],
        tasks: ['flow:watch:status'] // Get the status from the server
      }
    }
});

// Run 'flow:watch:start' before the watch task to start the server
grunt.registerTask('watchFlow', ['flow:watch:start', 'watch']);
```

#### Single File
You can also run a single file at a time through `flow`, however this it not recommended for projects with multiple files and/or external dependencies.

```js
grunt.initConfig({
  flow: {
    app: {
      options: {
        showAllErrors: false, // This the only option avaiable in this mode
      },
      files: {
        src: ['src/**/*.js'] // Will run flow individually on each .js file in the src/ directory
      }
    }
  },
});
```

## Contributing
Please take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using 'grunt test'.

## Release History
* v0.4.4 - Switched to flow-bin
* v0.4.3 - Updated binaries and task to support flow 0.4.0
* v0.4.2 - Refactor and removed extraneous option
* v0.4.1 - Fixed bug where watch didn't work
* v0.4.0 - Added single file check, colors and Flow binaries to 0.1.2
* v0.3.0 - Added additional options
* v0.2.1 - Fixed path issue for Flow binaries
* v0.2.0 - Added watch support
* v0.1.0 - Initial Release