Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sindresorhus/detect-indent
Detect the indentation of code
https://github.com/sindresorhus/detect-indent
Last synced: about 13 hours ago
JSON representation
Detect the indentation of code
- Host: GitHub
- URL: https://github.com/sindresorhus/detect-indent
- Owner: sindresorhus
- License: mit
- Created: 2013-08-11T00:24:41.000Z (over 11 years ago)
- Default Branch: main
- Last Pushed: 2023-10-08T15:00:39.000Z (over 1 year ago)
- Last Synced: 2025-01-09T08:08:59.577Z (2 days ago)
- Language: JavaScript
- Homepage:
- Size: 62.5 KB
- Stars: 196
- Watchers: 9
- Forks: 27
- Open Issues: 2
-
Metadata Files:
- Readme: readme.md
- Funding: .github/funding.yml
- License: license
- Security: .github/security.md
Awesome Lists containing this project
- awesome-nodejs-cn - detect-indent - 检测代码缩进. (包 / 文本)
- awesome-nodejs - detect-indent - Detect the indentation of code. (Repository / Text/String)
- awesome-nodejs - detect-indent - Detect the indentation of code. (Packages / Text)
- awesome-nodejs - detect-indent - Detect the indentation of code - ★ 120 (Text)
- awesome-node - detect-indent - Detect the indentation of code. (Packages / Text)
- awesome-nodejs-cn - detect-indent - 检测代码缩进. (目录 / 文本处理)
- awesome-nodejs-cn - detect-indent - **star:197** 检测代码的缩进 (包 / 文本)
README
# detect-indent
> Detect the indentation of code
Pass in a string of any kind of text and get the indentation.
## Use cases
- Persisting the indentation when modifying a file.
- Have new content match the existing indentation.
- Setting the right indentation in your editor.## Install
```
$ npm install detect-indent
```## Usage
Here we modify a JSON file while persisting the indentation:
```js
import fs from 'node:fs';
import detectIndent from 'detect-indent';/*
{
"ilove": "pizza"
}
*/
const file = fs.readFileSync('foo.json', 'utf8');// Tries to detect the indentation and falls back to a default if it can't
const indent = detectIndent(file).indent || ' ';const json = JSON.parse(file);
json.ilove = 'unicorns';
fs.writeFileSync('foo.json', JSON.stringify(json, undefined, indent));
/*
{
"ilove": "unicorns"
}
*/
```## API
Accepts a string and returns an object with stats about the indentation:
* `amount` {number} - Amount of indentation, for example `2`
* `type` {'tab' | 'space' | undefined} - Type of indentation. Possible values are `'tab'`, `'space'` or `undefined` if no indentation is detected
* `indent` {string} - Actual indentation## Algorithm
The current algorithm looks for the most common difference between two consecutive non-empty lines.
In the following example, even if the 4-space indentation is used 3 times whereas the 2-space one is used 2 times, it is detected as less used because there were only 2 differences with this value instead of 4 for the 2-space indentation:
```css
html {
box-sizing: border-box;
}body {
background: gray;
}p {
line-height: 1.3em;
margin-top: 1em;
text-indent: 2em;
}
```[Source.](https://medium.com/@heatherarthur/detecting-code-indentation-eff3ed0fb56b#3918)
Furthermore, if there are more than one most used difference, the indentation with the most lines is selected.
In the following example, the indentation is detected as 4-spaces:
```css
body {
background: gray;
}p {
line-height: 1.3em;
margin-top: 1em;
text-indent: 2em;
}
```## Related
- [detect-indent-cli](https://github.com/sindresorhus/detect-indent-cli) - CLI for this module
- [detect-newline](https://github.com/sindresorhus/detect-newline) - Detect the dominant newline character of a string
- [detect-indent-rs](https://github.com/stefanpenner/detect-indent-rs) - Rust port
- [detect-indent-py](https://github.com/Ethan-Vanderheijden/detect-indent-py) - Python port---
Get professional support for this package with a Tidelift subscription
Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies.