UNPKG

2.49 kBMarkdownView Raw
1# detect-indent [![Build Status](https://travis-ci.org/sindresorhus/detect-indent.svg?branch=master)](https://travis-ci.org/sindresorhus/detect-indent)
2
3> Detect the indentation of code
4
5Pass in a string of any kind of text and get the indentation.
6
7
8## Use cases
9
10- Persisting the indentation when modifying a file.
11- Have new content match the existing indentation.
12- Setting the right indentation in your editor.
13
14
15## Install
16
17```
18$ npm install --save detect-indent
19```
20
21
22## Usage
23
24Here we modify a JSON file while persisting the indentation:
25
26```js
27const fs = require('fs');
28const detectIndent = require('detect-indent');
29
30/*
31{
32 "ilove": "pizza"
33}
34*/
35const file = fs.readFileSync('foo.json', 'utf8');
36
37// tries to detect the indentation and falls back to a default if it can't
38const indent = detectIndent(file).indent || ' ';
39
40const json = JSON.parse(file);
41
42json.ilove = 'unicorns';
43
44fs.writeFileSync('foo.json', JSON.stringify(json, null, indent));
45/*
46{
47 "ilove": "unicorns"
48}
49*/
50```
51
52
53## API
54
55Accepts a string and returns an object with stats about the indentation:
56
57* `amount` {number} - Amount of indentation, for example `2`
58* `type` {string|null} - Type of indentation. Possible values are `tab`, `space` or `null` if no indentation is detected
59* `indent` {string} - Actual indentation
60
61
62## Algorithm
63
64The current algorithm looks for the most common difference between two consecutive non-empty lines.
65
66In 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:
67
68```css
69html {
70 box-sizing: border-box;
71}
72
73body {
74 background: gray;
75}
76
77p {
78 line-height: 1.3em;
79 margin-top: 1em;
80 text-indent: 2em;
81}
82```
83
84[Source.](https://medium.com/@heatherarthur/detecting-code-indentation-eff3ed0fb56b#3918)
85
86Furthermore, if there are more than one most used difference, the indentation with the most lines is selected.
87
88In the following example, the indentation is detected as 4-spaces:
89
90```css
91body {
92 background: gray;
93}
94
95p {
96 line-height: 1.3em;
97 margin-top: 1em;
98 text-indent: 2em;
99}
100```
101
102
103## Related
104
105- [detect-indent-cli](https://github.com/sindresorhus/detect-indent-cli) - CLI for this module
106- [detect-newline](https://github.com/sindresorhus/detect-newline) - Detect the dominant newline character of a string
107
108
109## License
110
111MIT © [Sindre Sorhus](https://sindresorhus.com)