Merge pull request #93 from screepers/feature/prettier-rfc
Prettier formatting
This commit is contained in:
7
.prettierrc
Normal file
7
.prettierrc
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"semi": true,
|
||||
"tabWidth": 2,
|
||||
"printWidth": 120,
|
||||
"singleQuote": false,
|
||||
"trailingComma": "none"
|
||||
}
|
||||
11
.vscode/settings.json
vendored
11
.vscode/settings.json
vendored
@@ -10,5 +10,14 @@
|
||||
"node_modules/**": true,
|
||||
"typings/**": true
|
||||
},
|
||||
"typescript.tsdk": "./node_modules/typescript/lib"
|
||||
"typescript.tsdk": "./node_modules/typescript/lib",
|
||||
"[json]": {
|
||||
"editor.formatOnSave": true
|
||||
},
|
||||
"[javascript]": {
|
||||
"editor.formatOnSave": true
|
||||
},
|
||||
"[typescript]": {
|
||||
"editor.formatOnSave": true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
* [Module bundling](./in-depth/module-bundling.md)
|
||||
* [Deploy destinations](./in-depth/deploy-destinations.md)
|
||||
* [TypeScript](./in-depth/typescript.md)
|
||||
* [Prettier](./in-depth/prettier.md)
|
||||
* [Cookbook](./in-depth/cookbook.md)
|
||||
* [Environment variables](./in-depth/cookbook/environment-variables.md)
|
||||
* [One-line PowerShell setup](./in-depth/cookbook/one-line-powershell.md)
|
||||
|
||||
58
docs/in-depth/prettier.md
Normal file
58
docs/in-depth/prettier.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# Code formatting with Prettier
|
||||
|
||||
[Prettier](https://prettier.io/) is an automatic code formatter which supports various languages, including TypeScript. It also has extensions for various text editors like [VSCode](https://github.com/prettier/prettier-vscode), [Atom](https://github.com/prettier/prettier-atom), and even [Vim](https://github.com/prettier/vim-prettier). If you have installed these extensions, it will use Prettier's service to automatically format your code after saving.
|
||||
|
||||
If you would rather not use Prettier instead, you can easily disable it too. In VSCode, open `.vscode/settings.json`, then change the `"editor.formatOnSave"` option to `false`:
|
||||
|
||||
```json
|
||||
{
|
||||
"[json]": {
|
||||
"editor.formatOnSave": false
|
||||
},
|
||||
"[javascript]": {
|
||||
"editor.formatOnSave": false
|
||||
},
|
||||
"[typescript]": {
|
||||
"editor.formatOnSave": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Configuring TSLint for Prettier
|
||||
|
||||
The `.prettierrc` file configures how Prettier formats your code. By default we use the following options.
|
||||
|
||||
```json
|
||||
{
|
||||
"semi": true,
|
||||
"tabWidth": 2,
|
||||
"printWidth": 120,
|
||||
"singleQuote": false,
|
||||
"trailingComma": "none"
|
||||
}
|
||||
```
|
||||
|
||||
We can use `tslint-config-prettier` to override some TSLint rules with its Prettier counterparts. In your `tslint.json` file, extend `tslint-config-prettier`.
|
||||
|
||||
```json
|
||||
{
|
||||
"extends" : [
|
||||
"tslint:recommended",
|
||||
"tslint-config-prettier"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
To make Prettier error out on formatting errors, we can also use `tslint-plugin-prettier` to add a custom rule for this.
|
||||
|
||||
```bash
|
||||
yarn add --dev tslint-plugin-prettier
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"rulesDirectory": ["tslint-plugin-prettier"],
|
||||
"rules": {
|
||||
"prettier": true
|
||||
}
|
||||
}
|
||||
@@ -33,10 +33,10 @@ This project provides TSLint rules through a `tslint.json` file, which extends t
|
||||
|
||||
We've made some changes to these rules, which we considered necessary and/or relevant to a proper Screeps project:
|
||||
|
||||
- set the [forin](http://palantir.github.io/tslint/rules/forin/) rule to `false`, it was forcing `for ( ... in ...)` loops to check if object members were not coming from the class prototype.
|
||||
- set the [interface-name](http://palantir.github.io/tslint/rules/interface-name/) rule to `false`, in order to allow interfaces that are not prefixed with `I`.
|
||||
- set the [no-console](http://palantir.github.io/tslint/rules/no-console/) rule to `false`, in order to allow using `console`.
|
||||
- in the [variable-name](http://palantir.github.io/tslint/rules/variable-name/) rule, added `allow-leading-underscore`.
|
||||
* set the [forin](http://palantir.github.io/tslint/rules/forin/) rule to `false`, it was forcing `for ( ... in ...)` loops to check if object members were not coming from the class prototype.
|
||||
* set the [interface-name](http://palantir.github.io/tslint/rules/interface-name/) rule to `false`, in order to allow interfaces that are not prefixed with `I`.
|
||||
* set the [no-console](http://palantir.github.io/tslint/rules/no-console/) rule to `false`, in order to allow using `console`.
|
||||
* in the [variable-name](http://palantir.github.io/tslint/rules/variable-name/) rule, added `allow-leading-underscore`.
|
||||
|
||||
### Customising TSLint
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
"devDependencies": {
|
||||
"@types/lodash": "^3.10.1",
|
||||
"@types/screeps": "^2.4.0",
|
||||
"prettier": "^1.14.0",
|
||||
"rollup": "^0.57.1",
|
||||
"rollup-plugin-clear": "^2.0.7",
|
||||
"rollup-plugin-commonjs": "^9.1.4",
|
||||
@@ -35,6 +36,7 @@
|
||||
"rollup-plugin-screeps": "^0.1.2",
|
||||
"rollup-plugin-typescript2": "^0.16.1",
|
||||
"tslint": "^5.9.1",
|
||||
"tslint-config-prettier": "^1.14.0",
|
||||
"typescript": "^2.9.2"
|
||||
},
|
||||
"dependencies": {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// tslint:disable:no-conditional-assignment
|
||||
import {SourceMapConsumer} from "source-map";
|
||||
import { SourceMapConsumer } from "source-map";
|
||||
|
||||
export class ErrorMapper {
|
||||
// Cache consumer
|
||||
@@ -26,7 +26,7 @@ export class ErrorMapper {
|
||||
* @returns {string} The source-mapped stack trace
|
||||
*/
|
||||
public static sourceMappedStackTrace(error: Error | string): string {
|
||||
const stack: string = error instanceof Error ? error.stack as string : error;
|
||||
const stack: string = error instanceof Error ? (error.stack as string) : error;
|
||||
if (this.cache.hasOwnProperty(stack)) {
|
||||
return this.cache[stack];
|
||||
}
|
||||
@@ -35,7 +35,7 @@ export class ErrorMapper {
|
||||
let match: RegExpExecArray | null;
|
||||
let outStack = error.toString();
|
||||
|
||||
while (match = re.exec(stack)) {
|
||||
while ((match = re.exec(stack))) {
|
||||
if (match[2] === "main") {
|
||||
const pos = this.consumer.originalPositionFor({
|
||||
column: parseInt(match[4], 10),
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
{
|
||||
"rulesDirectory": "tslint-plugin-prettier",
|
||||
"extends" : [
|
||||
"tslint:recommended"
|
||||
"tslint:recommended",
|
||||
"tslint-config-prettier"
|
||||
],
|
||||
"rules": {
|
||||
"forin": false,
|
||||
@@ -8,7 +10,6 @@
|
||||
"member-ordering": [false],
|
||||
"no-console": [false],
|
||||
"no-namespace": [true, "allow-declarations"],
|
||||
"trailing-comma": [true, {"multiline": "never", "singleline": "never"}],
|
||||
"variable-name": [
|
||||
true,
|
||||
"ban-keywords",
|
||||
|
||||
Reference in New Issue
Block a user