Skip to content

Commit 03f0f62

Browse files
author
Damian Sznajder
committed
fix: a lot of stuff related to prettier auto formatting
1 parent 85ef897 commit 03f0f62

22 files changed

+279
-2207
lines changed

.eslintrc.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,7 @@ module.exports = {
125125

126126
'import/no-unresolved': [
127127
'error',
128-
{
129-
caseSensitive: false,
130-
ignore: ['vscode'],
131-
},
128+
{ caseSensitive: false, ignore: ['vscode'] },
132129
],
133130
'prettier/prettier': [
134131
'error',
@@ -203,7 +200,6 @@ module.exports = {
203200
'@typescript-eslint/prefer-optional-chain': 'error',
204201
'@typescript-eslint/triple-slash-reference': 'error',
205202
'@typescript-eslint/unified-signatures': 'error',
206-
207203
'default-case': 'off',
208204
'no-dupe-class-members': 'off',
209205
'no-undef': 'off',

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
"reactSnippets.settings.semiColons": {
8080
"type": "boolean",
8181
"markdownDescription": "Controls if snippets should use semi colons.\nOnly applies when `#reactSnippets.settings.prettierEnabled#` is disabled",
82-
"default": true
82+
"default": false
8383
},
8484
"reactSnippets.settings.singleQuote": {
8585
"type": "boolean",

src/helpers.ts

-158
This file was deleted.

src/helpers/extensionConfig.ts

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { workspace } from 'vscode';
2+
3+
export type ExtensionSettings = {
4+
languageScopes: string;
5+
prettierEnabled: boolean;
6+
semiColons: boolean;
7+
importReactOnTop: boolean;
8+
singleQuote: boolean;
9+
typescript: boolean;
10+
tabWidth: number;
11+
typescriptPropsStatePrefix: 'type' | 'interface';
12+
};
13+
14+
const extensionConfig = () =>
15+
workspace.getConfiguration(
16+
'reactSnippets.settings',
17+
) as unknown as ExtensionSettings;
18+
19+
export default extensionConfig;

src/helpers/formatters.ts

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import prettier from 'prettier';
2+
3+
import extensionConfig from './extensionConfig';
4+
import getPrettierConfig from './getPrettierConfig';
5+
import {
6+
replaceSnippetPlaceholders,
7+
revertSnippetPlaceholders,
8+
} from './snippetPlaceholders';
9+
10+
export const formatSnippet = (snippetString: string) => {
11+
return extensionConfig().prettierEnabled
12+
? prettier.format(snippetString, getPrettierConfig())
13+
: snippetString;
14+
};
15+
16+
export const parseSnippet = (body: string | string[]) => {
17+
const snippetBody = typeof body === 'string' ? body : body.join('\n');
18+
19+
return replaceSnippetPlaceholders(
20+
formatSnippet(revertSnippetPlaceholders(snippetBody)),
21+
);
22+
};

src/generateSnippets.ts renamed to src/helpers/generateSnippets.ts

+27-22
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,27 @@
11
import { writeFile } from 'fs';
22

3-
import {
4-
extensionConfig,
5-
parseSnippetToBody,
6-
replaceSnippetPlaceholders,
7-
} from './helpers';
83
import componentsSnippets, {
94
ComponentsSnippet,
10-
} from './sourceSnippets/components';
11-
import consoleSnippets, { ConsoleSnippet } from './sourceSnippets/console';
12-
import hooksSnippets, { HooksSnippet } from './sourceSnippets/hooks';
13-
import importsSnippets, { ImportsSnippet } from './sourceSnippets/imports';
14-
import othersSnippets, { OthersSnippet } from './sourceSnippets/others';
5+
} from '../sourceSnippets/components';
6+
import consoleSnippets, { ConsoleSnippet } from '../sourceSnippets/console';
7+
import hooksSnippets, { HooksSnippet } from '../sourceSnippets/hooks';
8+
import importsSnippets, { ImportsSnippet } from '../sourceSnippets/imports';
9+
import othersSnippets, { OthersSnippet } from '../sourceSnippets/others';
1510
import propTypesSnippets, {
1611
PropTypesSnippet,
17-
} from './sourceSnippets/propTypes';
12+
} from '../sourceSnippets/propTypes';
1813
import reactNativeSnippets, {
1914
ReactNativeSnippet,
20-
} from './sourceSnippets/reactNative';
21-
import reduxSnippets, { ReduxSnippet } from './sourceSnippets/redux';
22-
import testsSnippets, { TestsSnippet } from './sourceSnippets/tests';
15+
} from '../sourceSnippets/reactNative';
16+
import reduxSnippets, { ReduxSnippet } from '../sourceSnippets/redux';
17+
import testsSnippets, { TestsSnippet } from '../sourceSnippets/tests';
2318
import typescriptSnippets, {
2419
TypescriptSnippet,
25-
} from './sourceSnippets/typescript';
20+
} from '../sourceSnippets/typescript';
21+
22+
import extensionConfig from './extensionConfig';
23+
import parseSnippetToBody from './parseSnippetToBody';
24+
import { replaceSnippetPlaceholders } from './snippetPlaceholders';
2625

2726
export type SnippetKeys =
2827
| OthersSnippet['key']
@@ -77,13 +76,19 @@ const getSnippets = () => {
7776
return replaceSnippetPlaceholders(JSON.stringify(snippets, null, 2));
7877
};
7978

80-
export const generateSnippets = () =>
79+
const generateSnippets = () =>
8180
new Promise((resolve) => {
8281
const jsonSnippets = getSnippets();
83-
writeFile(__dirname + '/snippets/generated.json', jsonSnippets, (error) => {
84-
if (error) {
85-
console.error(error);
86-
}
87-
return resolve(true);
88-
});
82+
writeFile(
83+
__dirname + '/../snippets/generated.json',
84+
jsonSnippets,
85+
(error) => {
86+
if (error) {
87+
console.error(error);
88+
}
89+
return resolve(true);
90+
},
91+
);
8992
});
93+
94+
export default generateSnippets;

src/helpers/getPrettierConfig.ts

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import prettier, { Options } from 'prettier';
2+
3+
import extensionConfig from './extensionConfig';
4+
5+
let prettierConfig: prettier.Options | null;
6+
prettier
7+
.resolveConfig('', { editorconfig: true })
8+
.then((config) => (prettierConfig = config));
9+
10+
const getPrettierConfig = (): Options => {
11+
const { semiColons, singleQuote, tabWidth, prettierEnabled } =
12+
extensionConfig();
13+
14+
return {
15+
parser: 'typescript',
16+
semi: semiColons,
17+
singleQuote,
18+
tabWidth,
19+
...(prettierEnabled && prettierConfig),
20+
};
21+
};
22+
23+
export default getPrettierConfig;

src/helpers/parseSnippetToBody.ts

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import extensionConfig from './extensionConfig';
2+
import { formatSnippet } from './formatters';
3+
import { Snippet } from './generateSnippets';
4+
import replaceOrRemoveReactImport from './replaceOrRemoveReactImport';
5+
6+
// This is array of prefixes which are currently skipped because of syntax format issues
7+
const skippedSnippets = [
8+
'pge',
9+
'pse',
10+
'gdsfp',
11+
'gsbu',
12+
'scu',
13+
'cwun',
14+
'cdm',
15+
'cdup',
16+
'rconst',
17+
];
18+
19+
const withReactImport = [
20+
'rfce',
21+
'rfc',
22+
'rfcp',
23+
'rafce',
24+
'rafc',
25+
'rafcp',
26+
'rnfe',
27+
'rnfes',
28+
'rnf',
29+
'rnfs',
30+
'stest',
31+
'sntest',
32+
'srtest',
33+
'snrtest',
34+
'hocredux',
35+
'hoc',
36+
];
37+
38+
const parseSnippetToBody = (snippet: Snippet) => {
39+
const { importReactOnTop } = extensionConfig();
40+
const body =
41+
typeof snippet.body === 'string' ? snippet.body : snippet.body.join('\n');
42+
43+
const snippetBody = importReactOnTop
44+
? body
45+
: withReactImport.includes(snippet.prefix)
46+
? replaceOrRemoveReactImport(snippet.body)
47+
: body;
48+
49+
const formattedSnippet = skippedSnippets.includes(snippet.prefix)
50+
? snippetBody
51+
: formatSnippet(snippetBody).split('\n');
52+
53+
return snippet.body.length === 1 ? formattedSnippet[0] : formattedSnippet;
54+
};
55+
56+
export default parseSnippetToBody;
+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
const replaceOrRemoveReactImport = (snippetBody: string[]) => {
2+
const reactImportIndex = snippetBody.findIndex((line) =>
3+
line.match(new RegExp(/import React/, 'g')),
4+
);
5+
6+
if (reactImportIndex !== -1) {
7+
const line = snippetBody[reactImportIndex];
8+
snippetBody[reactImportIndex] = line
9+
.replace(new RegExp(/^import React .*$/, 'g'), '')
10+
.replace(new RegExp(/^import React, /, 'g'), 'import ');
11+
}
12+
13+
return snippetBody.join('\n');
14+
};
15+
16+
export default replaceOrRemoveReactImport;

src/helpers/revertSnippetPlaceholders.ts

Whitespace-only changes.

0 commit comments

Comments
 (0)