Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/teppeis/fixclosure
JavaScript dependency checker/fixer for Closure Library based on ECMAScript AST
https://github.com/teppeis/fixclosure
closure-library javascript linter
Last synced: 2 months ago
JSON representation
JavaScript dependency checker/fixer for Closure Library based on ECMAScript AST
- Host: GitHub
- URL: https://github.com/teppeis/fixclosure
- Owner: teppeis
- License: mit
- Created: 2012-11-08T08:59:24.000Z (about 12 years ago)
- Default Branch: main
- Last Pushed: 2024-10-23T17:45:27.000Z (3 months ago)
- Last Synced: 2024-10-25T15:24:35.394Z (3 months ago)
- Topics: closure-library, javascript, linter
- Language: TypeScript
- Homepage: https://npm.im/fixclosure
- Size: 1.91 MB
- Stars: 13
- Watchers: 4
- Forks: 7
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.MIT
Awesome Lists containing this project
README
# fixclosure
fixclosure is JavaScript dependency checker/fixer for Closure Library based on ECMAScript AST.
It finds namespaces used in a JavaScript file and insert/remove `goog.provide`, `goog.require`, `goog.requireType` and `goog.forwardDeclare` automatically.[![npm version][npm-image]][npm-url]
![Node.js Version Support][node-version]
[![Build Status][ci-image]][ci-url]
![License][license]## Install
```bash
$ npm install fixclosure
```## Usage
The following code `goog.require()`s an unused namespace `goog.unused`, also `goog.missing` is used but not `goog.require()`d.
```javascript
// foo.js (before)
goog.provide("goog.foo.Bar");goog.require("goog.foo");
goog.require("goog.unused");goog.foo.Bar = function () {
goog.foo.baz();
goog.missing.require();
};
```Fix it !
```bash
$ npx fixclosure --fix-in-place --namespaces=goog.foo,goog.missing foo.js
File: foo.jsProvided:
- goog.foo.BarRequired:
- goog.foo
- goog.unusedMissing Require:
- goog.missingUnnecessary Require:
- goog.unusedFIXED!
Total: 1 files
Passed: 0 files
Fixed: 1 files
````goog.require('goog.unused')` is removed and `goog.require('goog.missing')` is inserted.
```javascript
// foo.js (fixed)
goog.provide("goog.foo.Bar");goog.require("goog.foo");
goog.require("goog.missing");goog.foo.Bar = function () {
goog.foo.baz();
goog.missing.require();
};
```### Rules fixclosure checked
fixclosure checks and fixes:
- Duplicated provide/require/requireType/forwardDeclare
- Missing provide/require/requireType/forwardDeclare
- Unnecessary provide/require/requireType/forwardDeclare### Globbing
The arguments are globbed by [globby](https://github.com/sindresorhus/globby).
Directories are expanded as `**/*.js`.```console
$ fixclosure path/to/dir "foo/bar-*.js"
```### Use with Grunt
Use [grunt-fixclosure](https://github.com/teppeis/grunt-fixclosure "grunt-fixclosure") plugin.
## Configuration file
fixclosure loads options from `.fixclosurerc` config file like:
```
--provideRoots foo,bar
--replaceMap foo.foobar:foo.foo
--useForwardDeclare
```fixclosure will find the file in the current directory and, if not found, will move one level up the directory tree all the way up to the filesystem root.
## Options
### `-f` or `--fix-in-place`
If an invalid file is found, fixclosure fixes the file in place.
### `--config `
`.fixclosurerc` file path.
Specify if your file is not in the search path.
Default: `${process.cwd()}/.fixclosurerc`### `--provideRoots `
Specify your root namespaces to provide. Default is `goog`.
Comma separated list.### `--namespaces `
Specify method or property exported as a namespace itself like `goog.dispose`.
Comma separated list.### `--replaceMap `
Replace method or property to namespace mapping like `goog.disposeAll:goog.dispose`.
Comma separated list of colon separated pairs like `foo.bar1:foo.bar2,foo.bar3:foo.bar4`.### `--useForwardDeclare`
Use `goog.forwardDeclare()` instead of `goog.requireType()` for types used only in JSDoc.
Default: `false`### `--depsJs `
Load namespace methods from deps.js files separated by comma.
You can generate deps.js with [google-closure-deps](https://www.npmjs.com/package/google-closure-deps) or [duck](https://www.npmjs.com/package/@teppeis/duck).### `--showSuccess`
Show not only failed files but also passed files.
### `--no-color`
Disable color output.
## Inline hint
fixclosure reads "hint" for lint from special comments in your code.
### `ignore`
fixclosure doesn't remove any `goog.provide` and `goog.require` with this hint.
```javascript
goog.provide("goog.foo"); // fixclosure: ignoregoog.require("goog.bar"); // fixclosure: ignore
```In the above, `goog.provide('goog.foo')` will not removed by fixclosure even if it isn't provided in the file.
Also `goog.require('goog.bar')` will not removed if it isn't used.
The hint affects only _same_ line.
Useful in module declaration.### `suppressRequire`
Suppress `goog.require` auto insertion.
```javascript
// fixclosure: suppressRequire
goog.foo.bar();
```In the above, `goog.require('goog.foo')` will not inserted.
The hint affects only _next_ line.
This is useful to workaround cyclic reference.### `suppressProvide`
Suppress `goog.provide` auto insertion.
```javascript
// fixclosure: suppressProvide
goog.Foo = function () {};
```In the above, `goog.provide('goog.Foo')` will not inserted.
The hint affects only _next_ line.## Migration from v1 to v2
- Old Node.js versions were no longer supported, use Node.js v10 or higher.
- `--namespaceMethods` was deprecated, use `--namespaces`.
- Deprecated `--roots` was removed, use `--provideRoots`.
- `--requireRoots` was removed because fixclosure v2 no longer detects required namespaces heuristically. Use `--namespaces` or `--depsJs` to detect them. They can detect the namespaces correctly.
- Types used only in JSDoc are reported as errors, while previously only types of `@extends` in `@interface` are reported. Add `goog.requireType()` or `goog.fowardDeclare()`.### License
MIT License: Teppei Sato
[npm-image]: https://badgen.net/npm/v/fixclosure?icon=npm&label=
[npm-url]: https://npmjs.org/package/fixclosure
[ci-image]: https://github.com/teppeis/fixclosure/workflows/ci/badge.svg
[ci-url]: https://github.com/teppeis/fixclosure/actions?query=workflow%3A%22ci%22
[deps-image]: https://badgen.net/david/dep/teppeis/fixclosure
[deps-url]: https://david-dm.org/teppeis/fixclosure
[node-version]: https://badgen.net/npm/node/fixclosure
[license]: https://badgen.net/npm/license/fixclosure