Git Product home page Git Product logo

flowery's Introduction

What is this?

Flowery prettifies the result generated by Facebook Flow type check tool, making it easier to read.

Before: It's not easy to understand which part of the code went wrong. after

After: Each error was listed with related file name and precise locations. after

How to install

$ npm install -g flowery

How to use?

CLI

There are 3 ways to run flowery.

// runs flowery as a convenient wrapper
// equals to $ flow --json | flowery
$ flowery
// piping in content
// useful for adding arguments to flow
$ flow --json | flowery
// pass in txt file generated by flow
$ flowery log.txt

API

import flowery from './flowery';
var result = flowery('json string generated by flow');
console.log(result)
// {arrErrors: [...], arrMessages: [...], joinedMessages: '....' }

By running one of those commands, flow will check all js files in the folder, pipe the results to flowery, then you will see prettified results on screen, also a file named flow-results.txt will be generated in the project folder too so your build tool could pick up from there and make further use of it.

As a side note, flowery can be invoked via both CLI or API, see example/api.js for usage guide.

The core api returns both arrErrors and arrMessages so you can further integrate with other toolchains, for example, build a better flow linter for Sublime Text Editor.

How to build

npm run build

Flowery is written in ES2015, hence it's required to run build to generate ES5 version before publish on NPM.

Roadmap

  • A Sublime Text Editor package which mark errors in place and provide tooltips when mouse hovered it. (Total python noob here, any help would be highly appreciated)

See discussion here.

flowery's People

Contributors

example123 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

mcanthony

flowery's Issues

TypeError with Flow 0.15

I'm getting the following error when running flowery with FlowType 0.15:

$ flowery
/usr/local/lib/node_modules/flowery/build/flowery.js:363
                        errMsg: msg[1].replace('Property cannot be accessed on ', ''), // 人工改過
                                      ^
TypeError: Cannot read property 'replace' of undefined
    at /usr/local/lib/node_modules/flowery/build/flowery.js:363:21
    at Array.map (native)
    at generateErrorObjects (/usr/local/lib/node_modules/flowery/build/flowery.js:254:25)
    at go (/usr/local/lib/node_modules/flowery/build/flowery.js:122:18)
    at /usr/local/lib/node_modules/flowery/build/flowery.js:161:3
    at ChildProcess.exithandler (child_process.js:758:5)
    at ChildProcess.emit (events.js:110:17)
    at maybeClose (child_process.js:1015:16)
    at Socket.<anonymous> (child_process.js:1183:11)
    at Socket.emit (events.js:107:17)

Here's the output of flow --json:

{
  "passed": false,
  "errors": [
    {
      "message": [
        {
          "descr": "property `buffer`",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/SamRead.js",
          "line": 40,
          "endline": 40,
          "start": 11,
          "end": 21
        },
        {
          "descr": "Property not found in",
          "level": "error",
          "path": "",
          "line": 0,
          "endline": 0,
          "start": 1,
          "end": 0
        },
        {
          "descr": "object type",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/Alignment.js",
          "line": 23,
          "endline": 37,
          "start": 25,
          "end": 1
        }
      ]
    },
    {
      "message": [
        {
          "descr": "property `offset`",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/SamRead.js",
          "line": 41,
          "endline": 41,
          "start": 11,
          "end": 23
        },
        {
          "descr": "Property not found in",
          "level": "error",
          "path": "",
          "line": 0,
          "endline": 0,
          "start": 1,
          "end": 0
        },
        {
          "descr": "object type",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/Alignment.js",
          "line": 23,
          "endline": 37,
          "start": 25,
          "end": 1
        }
      ]
    },
    {
      "message": [
        {
          "descr": "property `refID`",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/SamRead.js",
          "line": 44,
          "endline": 44,
          "start": 10,
          "end": 15
        },
        {
          "descr": "Property not found in",
          "level": "error",
          "path": "",
          "line": 0,
          "endline": 0,
          "start": 1,
          "end": 0
        },
        {
          "descr": "object type",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/Alignment.js",
          "line": 23,
          "endline": 37,
          "start": 25,
          "end": 1
        }
      ]
    },
    {
      "message": [
        {
          "descr": "property `l_seq`",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/SamRead.js",
          "line": 46,
          "endline": 46,
          "start": 10,
          "end": 15
        },
        {
          "descr": "Property not found in",
          "level": "error",
          "path": "",
          "line": 0,
          "endline": 0,
          "start": 1,
          "end": 0
        },
        {
          "descr": "object type",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/Alignment.js",
          "line": 23,
          "endline": 37,
          "start": 25,
          "end": 1
        }
      ]
    },
    {
      "message": [
        {
          "descr": "property `_full`",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/SamRead.js",
          "line": 49,
          "endline": 49,
          "start": 11,
          "end": 16
        },
        {
          "descr": "Property not found in",
          "level": "error",
          "path": "",
          "line": 0,
          "endline": 0,
          "start": 1,
          "end": 0
        },
        {
          "descr": "object type",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/Alignment.js",
          "line": 23,
          "endline": 37,
          "start": 25,
          "end": 1
        }
      ]
    },
    {
      "message": [
        {
          "descr": "property `_seq`",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/SamRead.js",
          "line": 50,
          "endline": 50,
          "start": 10,
          "end": 15
        },
        {
          "descr": "Property not found in",
          "level": "error",
          "path": "",
          "line": 0,
          "endline": 0,
          "start": 1,
          "end": 0
        },
        {
          "descr": "object type",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/Alignment.js",
          "line": 23,
          "endline": 37,
          "start": 25,
          "end": 1
        }
      ]
    },
    {
      "message": [
        {
          "descr": "property `_interval`",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/SamRead.js",
          "line": 51,
          "endline": 51,
          "start": 15,
          "end": 36
        },
        {
          "descr": "Property not found in",
          "level": "error",
          "path": "",
          "line": 0,
          "endline": 0,
          "start": 1,
          "end": 0
        },
        {
          "descr": "object type",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/Alignment.js",
          "line": 23,
          "endline": 37,
          "start": 25,
          "end": 1
        }
      ]
    },
    {
      "message": [
        {
          "descr": "property `_getJDataView`",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/SamRead.js",
          "line": 78,
          "endline": 81,
          "start": 3,
          "end": 3
        },
        {
          "descr": "Property not found in",
          "level": "error",
          "path": "",
          "line": 0,
          "endline": 0,
          "start": 1,
          "end": 0
        },
        {
          "descr": "object type",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/Alignment.js",
          "line": 23,
          "endline": 37,
          "start": 25,
          "end": 1
        }
      ]
    },
    {
      "message": [
        {
          "descr": "property `getFlag`",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/SamRead.js",
          "line": 99,
          "endline": 101,
          "start": 3,
          "end": 3
        },
        {
          "descr": "Property not found in",
          "level": "error",
          "path": "",
          "line": 0,
          "endline": 0,
          "start": 1,
          "end": 0
        },
        {
          "descr": "object type",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/Alignment.js",
          "line": 23,
          "endline": 37,
          "start": 25,
          "end": 1
        }
      ]
    },
    {
      "message": [
        {
          "descr": "property `getFull`",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/SamRead.js",
          "line": 108,
          "endline": 114,
          "start": 3,
          "end": 3
        },
        {
          "descr": "Property not found in",
          "level": "error",
          "path": "",
          "line": 0,
          "endline": 0,
          "start": 1,
          "end": 0
        },
        {
          "descr": "object type",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/Alignment.js",
          "line": 23,
          "endline": 37,
          "start": 25,
          "end": 1
        }
      ]
    },
    {
      "message": [
        {
          "descr": "property `getCigarString`",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/SamRead.js",
          "line": 156,
          "endline": 158,
          "start": 3,
          "end": 3
        },
        {
          "descr": "Property not found in",
          "level": "error",
          "path": "",
          "line": 0,
          "endline": 0,
          "start": 1,
          "end": 0
        },
        {
          "descr": "object type",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/Alignment.js",
          "line": 23,
          "endline": 37,
          "start": 25,
          "end": 1
        }
      ]
    },
    {
      "message": [
        {
          "descr": "property `getQualPhred`",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/SamRead.js",
          "line": 160,
          "endline": 162,
          "start": 3,
          "end": 3
        },
        {
          "descr": "Property not found in",
          "level": "error",
          "path": "",
          "line": 0,
          "endline": 0,
          "start": 1,
          "end": 0
        },
        {
          "descr": "object type",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/Alignment.js",
          "line": 23,
          "endline": 37,
          "start": 25,
          "end": 1
        }
      ]
    },
    {
      "message": [
        {
          "descr": "property `debugString`",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/SamRead.js",
          "line": 209,
          "endline": 220,
          "start": 3,
          "end": 3
        },
        {
          "descr": "Property not found in",
          "level": "error",
          "path": "",
          "line": 0,
          "endline": 0,
          "start": 1,
          "end": 0
        },
        {
          "descr": "object type",
          "level": "error",
          "path": "/Users/danvk/github/pileup.js/src/main/Alignment.js",
          "line": 23,
          "endline": 37,
          "start": 25,
          "end": 1
        }
      ]
    }
  ],
  "version": "14de35fd20e92eaf46e34428f72d108ed3f36c70 Sep 10 2015 13:14:20"
}

Piped-in content not recognized

Hi-
I'm using the flow-bin npm module (http://react.rocks/blog/post/flowtype-continuous-integration/) to run Flow. As I result, I need to pipe JSON into flowery: ./node_modules/.bin/flow --json | flowery. This results in a "content null\nFlow not found" message.

Don't have time to fully track it down, but it's correctly parsing the stdin and passing it to go().

Here's the log:

[ 'node', '/usr/local/bin/flowery' ]
readStdin
content {"passed":false,"errors":[{"message":[{"descr":"\nFailure(\"internal error: package /Users/jeffwinkler/repos/mdr/react/node_modules/react-fontawesome/package.json not found\")","level":"warning","path":"/Users/jeffwinkler/repos/mdr/react/components/StandardShow/Item.jsx","line":0,"endline":0,"start":0,"end":-1}]},{"message":[{"descr":"React element: Item\nError:","level":"error","path":"/Users/jeffwinkler/repos/mdr/react/components/StandardShow/ItemGroup.jsx","line":39,"endline":54,"start":15,"end":10},{"descr":"exports\nThis type is incompatible with","level":"error","path":"/Users/jeffwinkler/repos/mdr/react/components/StandardShow/Item.jsx","line":0,"endline":0,"start":0,"end":-1},{"descr":"class type: existential","level":"error","path":"/private/var/folders/3p/lf4d9n5j58b2dvyxqkhccmfc0000gn/T/flow/flowlib_13866062/lib/react.js","line":61,"endline":61,"start":49,"end":49}]}],"version":"531172d40f83a3e860e63e471237c197091ef0cc Jun 29 2015 21:34:32"}
Parsing JSON...
RETURNING JSON { passed: false,
  errors: [ { message: [Object] }, { message: [Object] } ],
  version: '531172d40f83a3e860e63e471237c197091ef0cc Jun 29 2015 21:34:32' }
readStdIn: resolving.
1 GO { passed: false,
  errors: [ { message: [Object] }, { message: [Object] } ],
  version: '531172d40f83a3e860e63e471237c197091ef0cc Jun 29 2015 21:34:32' }
content null
Flow not found, be sure to install it first.

Losing Flow Results

When I run through flowery, it supresses the Flow output--

$ flow

/Users/Jeff/repos/rrocks/node_modules/grunt-uncss/node_modules/uncss/node_modules/phantomjs/node_modules/npmconf/test/fixtures/package.json:1:3,2: Unexpected end of input

/Users/Jeff/repos/rrocks/node_modules/uncss/node_modules/phantomjs/node_modules/npmconf/test/fixtures/package.json:1:3,2: Unexpected end of input

/Users/Jeff/repos/rrocks/node_modules_old/grunt-uncss/node_modules/uncss/node_modules/phantomjs/node_modules/npmconf/test/fixtures/package.json:1:3,2: Unexpected end of input

/Users/Jeff/repos/rrocks/node_modules_old/karma-phantomjs-launcher/node_modules/phantomjs/node_modules/npmconf/test/fixtures/package.json:1:3,2: Unexpected end of input

/Users/Jeff/repos/rrocks/node_modules_old/uncss/node_modules/phantomjs/node_modules/npmconf/test/fixtures/package.json:1:3,2: Unexpected end of input

/Users/Jeff/repos/rrocks/scripts/LatestExamples.jsx:48:7,8: identifier ga
Could not resolve name

/Users/Jeff/repos/rrocks/scripts/ProjectGrid.jsx:70:7,8: identifier ga
Could not resolve name

/Users/Jeff/repos/rrocks/scripts/ProjectGrid.jsx:76:11,11: return
Missing annotation

/Users/Jeff/repos/rrocks/scripts/ProjectPage.jsx:31:5,6: identifier ga
Could not resolve name

/Users/Jeff/repos/rrocks/scripts/ProjectPage.jsx:34:38,49: return undefined
This type is incompatible with
/private/tmp/flow/flowlib_20d1139a/react.js:68:1,73:1: ReactElement

Found 10 errors
~/repos/rrocks on react-upgrade*
$ flow | flowery
~/repos/rrocks on react-upgrade*
$ flow --version
Flow, a static type checker for JavaScript, version 0.14.0

Always clears screen

I wanted to know the version, so did flowery --version. This clears the screen (equivalent to Cmd-K on OSX). Very unexpected for a tool to do this without being requested to... don't think it should.

When running through Node 0.10, getting "Promise is not defined"

Here's the output for Node 0.10:

flow_app/node_modules/flowery/build/flowery.js:185
    return new Promise(function (resolve, reject) {
               ^
ReferenceError: Promise is not defined
    at readStdin (flow_app/node_modules/flowery/build/flowery.js:185:13)
    at Object.<anonymous> (flow_app/node_modules/flowery/build/flowery.js:109:2)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:935:3

Looks like you might want to shim Promise to make it work.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.