From c18f6fde80c4672df2d2b98d4ecd45bb2958a97d Mon Sep 17 00:00:00 2001
From: rinsuki <428rinsuki+git@gmail.com>
Date: Wed, 4 Mar 2020 11:45:33 +0900
Subject: [PATCH] =?UTF-8?q?lint=E3=82=92GitHub=20Actions=20=E3=81=A7?=
 =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=20(#6101)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* package.json の lint スクリプトを修正

* lint アクションを追加

* yarn lint --fix

* 手動修正
---
 .github/workflows/nodejs.yml                | 10 ++++++++++
 package.json                                |  2 +-
 src/@types/jsrsasign.d.ts                   |  9 +++------
 src/client/directives/size.ts               |  2 +-
 src/client/init.ts                          |  4 ++--
 src/client/mios.ts                          |  2 +-
 src/misc/check-hit-antenna.ts               |  4 ++--
 src/models/entities/clip-note.ts            |  2 +-
 src/models/repositories/user.ts             |  4 ++--
 src/server/api/endpoints/antennas/create.ts |  4 ++--
 src/server/api/endpoints/antennas/update.ts |  4 ++--
 src/server/api/stream/channels/main.ts      |  3 ++-
 src/services/add-note-to-antenna.ts         |  2 +-
 src/services/note/create.ts                 |  2 +-
 tslint.json                                 |  4 +++-
 15 files changed, 34 insertions(+), 24 deletions(-)

diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml
index d8c29abc3..91668786e 100644
--- a/.github/workflows/nodejs.yml
+++ b/.github/workflows/nodejs.yml
@@ -41,3 +41,13 @@ jobs:
       run: yarn build
     - name: Test
       run: yarn test
+
+  lint:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v2
+    - uses: actions/setup-node@v1
+      with:
+        node-version: 12.x
+    - run: yarn install
+    - run: yarn lint
diff --git a/package.json b/package.json
index 4fc350cc2..fa66bdcf6 100644
--- a/package.json
+++ b/package.json
@@ -21,7 +21,7 @@
 		"gulp": "gulp build",
 		"clean": "gulp clean",
 		"cleanall": "gulp cleanall",
-		"lint": "gulp lint",
+		"lint": "tslint 'src/**/*.ts'",
 		"test": "cross-env TS_NODE_FILES=true gulp test",
 		"format": "gulp format"
 	},
diff --git a/src/@types/jsrsasign.d.ts b/src/@types/jsrsasign.d.ts
index 55bebd9bf..bc9d746f7 100644
--- a/src/@types/jsrsasign.d.ts
+++ b/src/@types/jsrsasign.d.ts
@@ -171,6 +171,7 @@ declare module 'jsrsasign' {
 
 		public static getTLVbyList(h: ASN1S, currentIndex: Idx<ASN1ObjectString>, nthList: Mutable<Nth[]>, checkingTag?: string): ASN1TLV;
 
+		// tslint:disable-next-line:bool-param-default
 		public static getVbyList(h: ASN1S, currentIndex: Idx<ASN1ObjectString>, nthList: Mutable<Nth[]>, checkingTag?: string, removeUnusedbits?: boolean): ASN1V;
 
 		public static hextooidstr(hex: ASN1OIDV): OID;
@@ -620,9 +621,7 @@ declare module 'jsrsasign' {
 
 		public encrypt(text: string): HexString | null;
 
-		public encryptOAEP(text: string, hash?: string, hashLen?: number): HexString | null;
-
-		public encryptOAEP(text: string, hash?: (s: string) => string, hashLen?: number): HexString | null;
+		public encryptOAEP(text: string, hash?: string | ((s: string) => string), hashLen?: number): HexString | null;
 
 		//// RSA PRIVATE
 
@@ -638,9 +637,7 @@ declare module 'jsrsasign' {
 
 		public decrypt(ctext: HexString): string;
 
-		public decryptOAEP(ctext: HexString, hash?: string, hashLen?: number): string | null;
-
-		public encryptOAEP(ctext: HexString, hash?: (s: string) => string, hashLen?: number): string | null;
+		public decryptOAEP(ctext: HexString, hash?: string | ((s: string) => string), hashLen?: number): string | null;
 
 		//// RSA PEM
 
diff --git a/src/client/directives/size.ts b/src/client/directives/size.ts
index c4dd7b145..541f38fd7 100644
--- a/src/client/directives/size.ts
+++ b/src/client/directives/size.ts
@@ -59,7 +59,7 @@ export default {
 		const ro = new ResizeObserver((entries, observer) => {
 			calc();
 		});
-		
+
 		ro.observe(el);
 
 		el._ro_ = ro;
diff --git a/src/client/init.ts b/src/client/init.ts
index 2f2f9f5d5..29eabfee4 100644
--- a/src/client/init.ts
+++ b/src/client/init.ts
@@ -81,14 +81,14 @@ if (lang == null) {
 
 // Detect the user agent
 const ua = navigator.userAgent.toLowerCase();
-let isMobile = /mobile|iphone|ipad|android/.test(ua);
+const isMobile = /mobile|iphone|ipad|android/.test(ua);
 
 // Get the <head> element
 const head = document.getElementsByTagName('head')[0];
 
 // If mobile, insert the viewport meta tag
 if (isMobile || window.innerWidth <= 1024) {
-	const viewport = document.getElementsByName("viewport").item(0);
+	const viewport = document.getElementsByName('viewport').item(0);
 	viewport.setAttribute('content',
 		`${viewport.getAttribute('content')},minimum-scale=1,maximum-scale=1,user-scalable=no`);
 	head.appendChild(viewport);
diff --git a/src/client/mios.ts b/src/client/mios.ts
index a29dcd855..c2ba8ac5c 100644
--- a/src/client/mios.ts
+++ b/src/client/mios.ts
@@ -124,7 +124,7 @@ export default class MiOS extends EventEmitter {
 		} else {
 			// Get token from localStorage
 			const i = localStorage.getItem('i');
-			
+
 			fetchme(i, me => {
 				if (me) {
 					this.store.dispatch('login', me);
diff --git a/src/misc/check-hit-antenna.ts b/src/misc/check-hit-antenna.ts
index 0d72c3f34..fa2479498 100644
--- a/src/misc/check-hit-antenna.ts
+++ b/src/misc/check-hit-antenna.ts
@@ -48,7 +48,7 @@ export async function checkHitAntenna(antenna: Antenna, note: Note, noteUser: Us
 					? note.text!.includes(keyword)
 					: note.text!.toLowerCase().includes(keyword.toLowerCase())
 			));
-		
+
 		if (!matched) return false;
 	}
 
@@ -61,7 +61,7 @@ export async function checkHitAntenna(antenna: Antenna, note: Note, noteUser: Us
 					? note.text!.includes(keyword)
 					: note.text!.toLowerCase().includes(keyword.toLowerCase())
 			));
-		
+
 		if (matched) return false;
 	}
 
diff --git a/src/models/entities/clip-note.ts b/src/models/entities/clip-note.ts
index 19e4750fc..7d96b2ef7 100644
--- a/src/models/entities/clip-note.ts
+++ b/src/models/entities/clip-note.ts
@@ -8,7 +8,7 @@ import { id } from '../id';
 export class ClipNote {
 	@PrimaryColumn(id())
 	public id: string;
-	
+
 	@Index()
 	@Column({
 		...id(),
diff --git a/src/models/repositories/user.ts b/src/models/repositories/user.ts
index 1d669feb5..c6bc35030 100644
--- a/src/models/repositories/user.ts
+++ b/src/models/repositories/user.ts
@@ -98,7 +98,7 @@ export class UserRepository extends Repository<User> {
 
 	public async getHasUnreadAntenna(userId: User['id']): Promise<boolean> {
 		const antennas = await Antennas.find({ userId });
-		
+
 		const unread = antennas.length > 0 ? await AntennaNotes.findOne({
 			antennaId: In(antennas.map(x => x.id)),
 			read: false
@@ -112,7 +112,7 @@ export class UserRepository extends Repository<User> {
 			muterId: userId
 		});
 		const mutedUserIds = mute.map(m => m.muteeId);
-	
+
 		const count = await Notifications.count({
 			where: {
 				notifieeId: userId,
diff --git a/src/server/api/endpoints/antennas/create.ts b/src/server/api/endpoints/antennas/create.ts
index f11b198f8..bc7938526 100644
--- a/src/server/api/endpoints/antennas/create.ts
+++ b/src/server/api/endpoints/antennas/create.ts
@@ -82,7 +82,7 @@ export default define(meta, async (ps, user) => {
 			id: ps.userListId,
 			userId: user.id,
 		});
-	
+
 		if (userList == null) {
 			throw new ApiError(meta.errors.noSuchUserList);
 		}
@@ -91,7 +91,7 @@ export default define(meta, async (ps, user) => {
 			userGroupId: ps.userGroupId,
 			userId: user.id,
 		});
-	
+
 		if (userGroupJoining == null) {
 			throw new ApiError(meta.errors.noSuchUserGroup);
 		}
diff --git a/src/server/api/endpoints/antennas/update.ts b/src/server/api/endpoints/antennas/update.ts
index ab4ce5793..b329e86ad 100644
--- a/src/server/api/endpoints/antennas/update.ts
+++ b/src/server/api/endpoints/antennas/update.ts
@@ -101,7 +101,7 @@ export default define(meta, async (ps, user) => {
 			id: ps.userListId,
 			userId: user.id,
 		});
-	
+
 		if (userList == null) {
 			throw new ApiError(meta.errors.noSuchUserList);
 		}
@@ -110,7 +110,7 @@ export default define(meta, async (ps, user) => {
 			userGroupId: ps.userGroupId,
 			userId: user.id,
 		});
-	
+
 		if (userGroupJoining == null) {
 			throw new ApiError(meta.errors.noSuchUserGroup);
 		}
diff --git a/src/server/api/stream/channels/main.ts b/src/server/api/stream/channels/main.ts
index 7419ba420..22e664bac 100644
--- a/src/server/api/stream/channels/main.ts
+++ b/src/server/api/stream/channels/main.ts
@@ -11,7 +11,8 @@ export default class extends Channel {
 	public async init(params: any) {
 		// Subscribe main stream channel
 		this.subscriber.on(`mainStream:${this.user!.id}`, async data => {
-			let { type, body } = data;
+			const { type } = data;
+			let { body } = data;
 
 			switch (type) {
 				case 'notification': {
diff --git a/src/services/add-note-to-antenna.ts b/src/services/add-note-to-antenna.ts
index 0055639c0..88a6613c6 100644
--- a/src/services/add-note-to-antenna.ts
+++ b/src/services/add-note-to-antenna.ts
@@ -38,7 +38,7 @@ export async function addNoteToAntenna(antenna: Antenna, note: Note, noteUser: U
 		if (note.renoteId != null) {
 			_note.renote = await Notes.findOne(note.renoteId).then(ensure);
 		}
-		
+
 		if (shouldMuteThisNote(_note, mutings.map(x => x.muteeId))) {
 			return;
 		}
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index a10ee5164..50586e8bc 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -223,7 +223,7 @@ export default async (user: User, data: Option, silent = false) => new Promise<N
 			.getMany();
 
 		const followers = followings.map(f => f.followerId);
-		
+
 		for (const antenna of antennas) {
 			checkHitAntenna(antenna, note, user, followers).then(hit => {
 				if (hit) {
diff --git a/tslint.json b/tslint.json
index 733c291f3..4a072b4ff 100644
--- a/tslint.json
+++ b/tslint.json
@@ -61,7 +61,9 @@
 		"no-duplicated-branches": false,
 		"no-identical-conditions": false,
 		"no-useless-cast": false,
-		"no-hardcoded-credentials": false
+		"no-hardcoded-credentials": false,
+		"no-nested-switch": false,
+		"unified-signatures": false
 	},
 	"rulesDirectory": []
 }