# nocuous

> A static code analysis tool for JavaScript and TypeScript.

Latest version **0.4.0** (published 2020-03-24) · MIT license · 0 weekly downloads

## Install

```sh
npm install nocuous
pnpm add nocuous
yarn add nocuous
bun add nocuous
```

Provides the command `nocuous`.

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 0.4.0 |
| Published | 2020-03-24 |
| First published | 2020-03-20 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 5 |
| Unpacked size | 30.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 42 |
| Author | Kitson Kelly |
| Maintainers | kitsonk |

## Links

- npm: https://www.npmjs.com/package/nocuous
- Repository: https://github.com/kitsonk/nocuous
- npm.io page: https://npm.io/package/nocuous

## Dependencies (5)

- [chalk](https://npm.io/package/chalk.md) 3.0.0
- [table](https://npm.io/package/table.md) 5.4.6
- [tslib](https://npm.io/package/tslib.md) 1.11.1
- [yargs](https://npm.io/package/yargs.md) 15.3.1
- [ts-morph](https://npm.io/package/ts-morph.md) 7.0.0

## Recent versions

- 0.4.0 (latest) — 2020-03-24
- 0.3.0 — 2020-03-20
- 0.2.0 — 2020-03-20
- 0.1.0 — 2020-03-20

## README

# nocuous

[![Build Status](https://dev.azure.com/kitsonk/nocuous/_apis/build/status/kitsonk.nocuous?branchName=master)](https://dev.azure.com/kitsonk/nocuous/_build/latest?definitionId=1&branchName=master)

A static code analysis tool for JavaScript and TypeScript.

## Installation

```
$ npx nocuous
```

## Commands

### stat

Currently the only command (which is also the default command) is `stat`. `stat` provides code toxicity statistics for a JavaScript or TypeScript project. The command expects a single input file. If this file is a JavaScript or TypeScript file, it will analyze that file plus any of its dependencies which get imported into that file for code toxicity and output the information to stdout. If the file is a `.json` file, it is assumed it is a `tsconfig.json` and uses that to determine what files to analyze. For example to run stats for a project:

```
$ npx nocuous index.ts
```

`stat` can take an options of `-o` or `--output` which will write the results as a CSV to the specified file.

`stat` also accepts multiple input files and glob patterns passed as input files.

## Background

The statistics collected around code toxicity are based directly on Eric
Dörnenburg's article [How toxic is your code?](https://erik.doernenburg.com/2008/11/how-toxic-is-your-code/).

The default metrics are based on what is suggested in the article. When applying to TypeScript/JavaScript there are some adaptation that is required:

| Metric                          | Table Label | Description                                                                                      | Default Threshold |
| ------------------------------- | ----------- | ------------------------------------------------------------------------------------------------ | ----------------- |
| File length                     | L           | The number of lines in a file.                                                                   | 500               |
| Class fan-out complexity        | CFAC        | The number of classes or interfaces in the dependency chain for a given class.                   | 30                |
| Class data abstraction coupling | CDAC        | The number of instances of other classes that are "new"ed in a given class.                      | 10                |
| Anon Inner Length               | AIL         | Class expressions of arrow functions length in number of lines.                                  | 35                |
| Function Length                 | FL          | The number of statements in a function declaration, function expression, or method declaration.  | 30                |
| Parameter Number                | P           | The number of parameters for a function or method                                                | 6                 |
| Cyclomatic Complexity           | CC          | The cyclomatic complexity for a function or method                                               | 10                |
| Nested `if` Depth               | ID          | The number of nested `if` statements.                                                            | 3                 |
| Nested `try` Depth              | TD          | The number of nested `try` statements.                                                           | 2                 |
| Binary Expression Complexity    | BEC         | How complex a binary expression is (e.g. how many `&&` and `||` keywords an expression contains) | 3                 |
| Missing Switch Default          | MSD         | Any `switch` statements that are missing the `default` case.                                     | 1                 |

---
_Source: https://npm.io/package/nocuous · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
