From e19e3d73805f532b1f67e493461e82ef95861cc1 Mon Sep 17 00:00:00 2001
From: Alexander Rose <alexander.rose@weirdbyte.de>
Date: Mon, 13 Jan 2020 09:02:47 -0500
Subject: [PATCH] use eslint instead of tslint

---
 .eslintrc.json               |  65 ++++++++++++++++++++++++++++++
 .vscode/extensions.json      |   2 +-
 package-lock.json            | Bin 537193 -> 560470 bytes
 package.json                 |   7 +++-
 src/mol-state/state.ts       |   4 +-
 src/mol-state/transformer.ts |   8 ++--
 tslint.json                  |  74 -----------------------------------
 7 files changed, 77 insertions(+), 83 deletions(-)
 create mode 100644 .eslintrc.json
 delete mode 100644 tslint.json

diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 000000000..bd27efce3
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,65 @@
+{
+    "env": {
+        "browser": true,
+        "node": true
+    },
+    "parser": "@typescript-eslint/parser",
+    "parserOptions": {
+        "project": "tsconfig.json",
+        "sourceType": "module"
+    },
+    "plugins": [
+        "@typescript-eslint"
+    ],
+    "rules": {
+        "@typescript-eslint/ban-types": "warn",
+        "@typescript-eslint/class-name-casing": "off",
+        "@typescript-eslint/indent": [
+            "warn",
+            4
+        ],
+        "@typescript-eslint/member-delimiter-style": [
+            "off",
+            {
+                "multiline": {
+                    "delimiter": "none",
+                    "requireLast": true
+                },
+                "singleline": {
+                    "delimiter": "semi",
+                    "requireLast": false
+                }
+            }
+        ],
+        "@typescript-eslint/prefer-namespace-keyword": "warn",
+        "@typescript-eslint/quotes": [
+            "warn",
+            "single",
+            { 
+                "avoidEscape": true,
+                "allowTemplateLiterals": true
+            }
+        ],
+        "@typescript-eslint/semi": [
+            "off",
+            null
+        ],
+        "@typescript-eslint/type-annotation-spacing": "warn",
+        "arrow-parens": [
+            "off",
+            "as-needed"
+        ],
+        "comma-dangle": "off",
+        "eqeqeq": [
+            "warn",
+            "smart"
+        ],
+        "import/order": "off",
+        "no-eval": "warn",
+        "no-new-wrappers": "warn",
+        "no-trailing-spaces": "warn",
+        "no-unsafe-finally": "warn",
+        "no-var": "warn",
+        "spaced-comment": "warn"
+    }
+}
\ No newline at end of file
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index ed23e9102..966b67347 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -4,8 +4,8 @@
 
 	// List of extensions which should be recommended for users of this workspace.
 	"recommendations": [
+		"dbaeumer.vscode-eslint",
 		"firsttris.vscode-jest-runner",
-		"ms-vscode.vscode-typescript-tslint-plugin",
 		"msjsdiag.debugger-for-chrome",
 		"slevesque.shader",
 		"stpn.vscode-graphql",
diff --git a/package-lock.json b/package-lock.json
index 5c109f4147d46e40c6680d6f72eab9c05ea37412..dbe62bc9d3fc81fc2046b676f1241e909e9ed774 100644
GIT binary patch
delta 9353
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
UW%D}l%s*S^Cl~h2o!IjK0pSXiU;qFB

delta 1045
zcmZ8fZA@Eb6wbZ3@4a+<v`n-z7!({EtU@XD(jq}uN;~=i1xjmS5omW;dg0Pb+Y7Wc
zGf@-gFGF%OPR8akGRFMMM4R~jbTcL+<A*FUvgw?fEQ==F+;rd{5-lb1$9}yz=e*~6
z&U4Q5!$S2R_p~eca%S_R4Q1x9jI9uQDwr4K_3!A+z_lMq`Oo`B@|7(*b8F*K9lk{p
zUS2UNa?=oeSy2XaTEbKnn&t(GkJj&`g%b&Vz5baDj8;-L<%W9athp;>pGwVITSG&^
z{#KnY88)^!jl36vpCApW+X*#3AQ0~r<z|2f=NTowktUYrAX7%X2v-kNrhJYMhqDwr
z4?N*eoiEX(3ve@$UaQC6XmI!Uby&@juyH05@=rRNtVg|Ua44E|JB0z(E^*m!o%Wcy
zF{aa{T}>__?ib_!PR`ACc#aO~{b6_9FAetCbzr%I4&m{9@(U7&Rb+83+|lGI<#TIF
z7_LQXXegtb<;QE~cwv}C1pb#J3kd8VBabxT?Rj$Bj7z>Je|F(bE#;zj#AxPg6dEiZ
zqE23b%~fjkRQno*+t(CA8@|b)r?vP~1L~^C$;Nwn(Mhzsf%Sa!7ObBp3gB2BDulCl
zkrKb^M_Z;GCU$>-=G41QcPh{n0S~(Jis19xgc9yDlzRRQaR5davYXq!O_btaE}+9i
zt}!>v$V+II_-YA#%VO<MsKA8Vo}+&s!Fq|#ui0gfTqkOA>J0sleV60Zuk`eu{{bKi
z@C{sDL<m2616339%KHUa`;h)JcRdZPm>DIEJW;4IwN2M@_*jtPl=xzd8CT<b?=X|q
zq`<@CyVO34ZD@j<iv$ZRON>Glm9poR5&|EU>USz{N6|r_?Ra-GlD66<^Mp?C>t*BS
z*`PJ77t)g_yeYpBOUAlwoqaY_{PjV;Zz5%OO*uN!2B$?F421hVUGd%_Lm<Ezn`7ow
zU)1OJxcQF$KKZx3M`SfsEWcK&Rz2(4Vv*3m{>O>}s=1*NEEZ}X{C%G+QRIwQ^>Nm&
zZjmU2Dl1hA-ZruXJTyte*N_b#ibMqn%cw{`uh<XgC`tv_Pg8}k@g}WSNr`ER7ZTO4
zXsd^tvhs+tigNH=Vk)U@BwIo(EMH>w=7J!1&^N|9{asdvb2c4zc!PndfXxt_=?MzQ
zgRFB_47J$D9Y%}TE5y2|6V8^fWVe|d6BBl^JK}fukGXV4SF(9*A{{dOhFq+~rUnLP
iY?Jb}%2q5cGvx?>_!;x`hOFdOK$nrv<E>=gXvu%-)@%v@

diff --git a/package.json b/package.json
index 35d015648..69a90445f 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,7 @@
     "url": "https://github.com/molstar/molstar/issues"
   },
   "scripts": {
-    "lint": "tslint src/**/*.ts",
+    "lint": "eslint src/**/*.ts",
     "test": "npm run lint && jest",
     "build": "npm run build-tsc && npm run build-extra && npm run build-webpack",
     "build-tsc": "tsc",
@@ -63,11 +63,15 @@
   ],
   "license": "MIT",
   "devDependencies": {
+    "@typescript-eslint/eslint-plugin": "^2.13.0",
+    "@typescript-eslint/eslint-plugin-tslint": "^2.13.0",
+    "@typescript-eslint/parser": "^2.13.0",
     "benchmark": "^2.1.4",
     "circular-dependency-plugin": "^5.2.0",
     "concurrently": "^5.0.1",
     "cpx": "^1.5.0",
     "css-loader": "^3.3.2",
+    "eslint": "^6.8.0",
     "extra-watch-webpack-plugin": "^1.0.3",
     "file-loader": "^5.0.2",
     "fs-extra": "^8.1.0",
@@ -85,7 +89,6 @@
     "simple-git": "^1.129.0",
     "style-loader": "^1.0.1",
     "ts-jest": "^24.2.0",
-    "tslint": "^5.20.1",
     "typescript": "^3.7.3",
     "webpack": "^4.41.3",
     "webpack-cli": "^3.3.10"
diff --git a/src/mol-state/state.ts b/src/mol-state/state.ts
index 7a0b18d84..de17fbbb7 100644
--- a/src/mol-state/state.ts
+++ b/src/mol-state/state.ts
@@ -680,8 +680,8 @@ async function updateNode(ctx: UpdateContext, currentRef: Ref): Promise<UpdateNo
     }
 
     let parentCell = transform.transformer.definition.from.length === 0
-    ? ctx.cells.get(current.transform.parent)
-    : StateSelection.findAncestorOfType(tree, ctx.cells, currentRef, transform.transformer.definition.from);
+        ? ctx.cells.get(current.transform.parent)
+        : StateSelection.findAncestorOfType(tree, ctx.cells, currentRef, transform.transformer.definition.from);
     if (!parentCell) {
         throw new Error(`No suitable parent found for '${currentRef}'`);
     }
diff --git a/src/mol-state/transformer.ts b/src/mol-state/transformer.ts
index 602415646..459b77a69 100644
--- a/src/mol-state/transformer.ts
+++ b/src/mol-state/transformer.ts
@@ -190,13 +190,13 @@ namespace Transformer {
                 display: typeof info.display === 'string'
                     ? { name: info.display }
                     : !!info.display
-                    ? info.display
-                    : { name: capitalize(info.name.replace(/[-]/g, ' ')) },
+                        ? info.display
+                        : { name: capitalize(info.name.replace(/[-]/g, ' ')) },
                 params: typeof info.params === 'object'
                     ? () => info.params as any
                     : !!info.params
-                    ? info.params as any
-                    : void 0,
+                        ? info.params as any
+                        : void 0,
                 ...def
             });
         }
diff --git a/tslint.json b/tslint.json
deleted file mode 100644
index ecf0639ee..000000000
--- a/tslint.json
+++ /dev/null
@@ -1,74 +0,0 @@
-{
-    "rules": {
-        "array-type": [
-            true,
-            "array"
-        ],
-        "arrow-parens": false,
-        "no-var-keyword": true,
-        "no-construct": true,
-        "ordered-imports": [false],
-        "trailing-comma": [false],
-        "class-name": false,
-        "comment-format": [
-            true,
-            "check-space"
-        ],
-        "indent": [
-            true,
-            "spaces"
-        ],
-        "ban-types": [
-            true,
-            ["String", "Use primitive 'string' instead."],
-            ["Boolean", "Use primitive 'boolean' instead."],
-            ["Number", "Use primitive 'number' instead."]
-        ],
-        "no-eval": true,
-        "no-internal-module": true,
-        "no-trailing-whitespace": true,
-        "no-unsafe-finally": true,
-        "one-line": [
-            true,
-            "check-open-brace",
-            "check-whitespace"
-        ],
-        "quotemark": [
-            true,
-            "single"
-        ],
-        "semicolon": [ false ],
-        "triple-equals": [
-            true,
-            "allow-null-check"
-        ],
-        "typedef-whitespace": [
-            true,
-            {
-                "call-signature": "nospace",
-                "index-signature": "nospace",
-                "parameter": "nospace",
-                "property-declaration": "nospace",
-                "variable-declaration": "nospace"
-            }
-        ],
-        "variable-name": [
-            true,
-            "ban-keywords"
-        ],
-        "whitespace": [
-            true,
-            "check-branch",
-            "check-decl",
-            "check-separator",
-            "check-type"
-        ]
-    },
-    "jsRules": {
-        "triple-equals": [
-            true,
-            "allow-null-check"
-        ]
-    },
-    "defaultSeverity": "warning"
-}
\ No newline at end of file
-- 
GitLab