aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShin'ya Ueoka <ueokande@i-beam.org>2020-08-11 21:40:23 +0900
committerShin'ya Ueoka <ueokande@i-beam.org>2020-08-11 21:40:23 +0900
commit0b98a22eba4f7bbac215abd800293ac2be67b24d (patch)
treeae78b7edc460a79708742bff55c4c6fa55699e47
parentf497109ecc801660dc23bbad8445b120cd75561e (diff)
Enable @typescript-eslint/no-extra-non-null-assertion
-rw-r--r--.eslintrc1
-rw-r--r--e2e/follow.test.ts4
-rw-r--r--e2e/lib/Console.ts4
-rw-r--r--e2e/lib/JSONOptionPage.ts2
-rw-r--r--e2e/lib/TestServer.ts4
-rw-r--r--e2e/mark.test.ts2
-rw-r--r--src/background/completion/impl/BookmarkRepositoryImpl.ts8
-rw-r--r--src/background/completion/impl/HistoryRepositoryImpl.ts8
-rw-r--r--src/background/completion/impl/TabRepositoryImpl.ts6
-rw-r--r--src/background/usecases/NavigateUseCase.ts12
-rw-r--r--src/background/usecases/SettingUseCase.ts2
-rw-r--r--src/content/repositories/ClipboardRepository.ts2
-rw-r--r--src/content/usecases/FollowMasterUseCase.ts4
-rw-r--r--src/settings/components/index.tsx4
-rw-r--r--src/shared/settings/Settings.ts2
-rw-r--r--test/background/repositories/Mark.test.ts4
-rw-r--r--test/content/presenters/Hint.test.ts10
-rw-r--r--test/settings/components/ui/input.test.tsx18
-rw-r--r--test/settings/reducers/setting.test.ts6
19 files changed, 51 insertions, 52 deletions
diff --git a/.eslintrc b/.eslintrc
index 8ef2463..21b631e 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -28,7 +28,6 @@
"@typescript-eslint/explicit-module-boundary-types": "off",
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-explicit-any": "off",
- "@typescript-eslint/no-extra-non-null-assertion": "off",
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
"@typescript-eslint/no-use-before-define": "off"
diff --git a/e2e/follow.test.ts b/e2e/follow.test.ts
index 5fb6c58..90f9a59 100644
--- a/e2e/follow.test.ts
+++ b/e2e/follow.test.ts
@@ -164,7 +164,7 @@ describe("follow test", () => {
await page.sendKeys("a");
const tagName = (await webdriver.executeScript(
- () => document.activeElement!!.tagName
+ () => document.activeElement!.tagName
)) as string;
assert.strictEqual(tagName.toLowerCase(), "input");
});
@@ -188,7 +188,7 @@ describe("follow test", () => {
await page.sendKeys("a");
const tagName = (await webdriver.executeScript(
- () => document.activeElement!!.tagName
+ () => document.activeElement!.tagName
)) as string;
assert.strictEqual(tagName.toLowerCase(), "input");
});
diff --git a/e2e/lib/Console.ts b/e2e/lib/Console.ts
index 0bae2f7..de61d66 100644
--- a/e2e/lib/Console.ts
+++ b/e2e/lib/Console.ts
@@ -62,12 +62,12 @@ export class Console {
const objs = [];
for (const li of Array.from(items)) {
if (li.classList.contains("vimvixen-console-completion-title")) {
- objs.push({ type: "title", text: li.textContent!!.trim() });
+ objs.push({ type: "title", text: li.textContent!.trim() });
} else if ("vimvixen-console-completion-item") {
const highlight = li.classList.contains(
"vimvixen-completion-selected"
);
- objs.push({ type: "item", text: li.textContent!!.trim(), highlight });
+ objs.push({ type: "item", text: li.textContent!.trim(), highlight });
} else {
throw new Error(`unexpected class: ${li.className}`);
}
diff --git a/e2e/lib/JSONOptionPage.ts b/e2e/lib/JSONOptionPage.ts
index 1c2db5b..0f2b0a7 100644
--- a/e2e/lib/JSONOptionPage.ts
+++ b/e2e/lib/JSONOptionPage.ts
@@ -15,7 +15,7 @@ export default class JSONOptionPage {
);
await textarea.sendKeys(" ");
await this.webdriver.executeScript(() =>
- document.querySelector("textarea")!!.blur()
+ document.querySelector("textarea")!.blur()
);
}
diff --git a/e2e/lib/TestServer.ts b/e2e/lib/TestServer.ts
index e0c711b..dc86ba2 100644
--- a/e2e/lib/TestServer.ts
+++ b/e2e/lib/TestServer.ts
@@ -41,7 +41,7 @@ export default class TestServer {
this.http = http.createServer(this.app);
return new Promise((resolve) => {
- this.http!!.listen(this.port, this.address, () => {
+ this.http!.listen(this.port, this.address, () => {
resolve();
});
});
@@ -52,7 +52,7 @@ export default class TestServer {
return Promise.resolve();
}
return new Promise((resolve) => {
- this.http!!.close(() => {
+ this.http!.close(() => {
this.http = undefined;
resolve();
});
diff --git a/e2e/mark.test.ts b/e2e/mark.test.ts
index d7ec26c..0f09d82 100644
--- a/e2e/mark.test.ts
+++ b/e2e/mark.test.ts
@@ -86,7 +86,7 @@ describe("mark test", () => {
handles = await webdriver.getAllWindowHandles();
assert.strictEqual(handles.length, 2);
});
- await webdriver.switchTo().window(handles!![0]);
+ await webdriver.switchTo().window(handles![0]);
page = await Page.navigateTo(webdriver, server.url("/#second"));
await page.sendKeys("'", "A");
diff --git a/src/background/completion/impl/BookmarkRepositoryImpl.ts b/src/background/completion/impl/BookmarkRepositoryImpl.ts
index 2bc779d..ed6c5a6 100644
--- a/src/background/completion/impl/BookmarkRepositoryImpl.ts
+++ b/src/background/completion/impl/BookmarkRepositoryImpl.ts
@@ -23,7 +23,7 @@ export default class CachedBookmarkRepository implements BookmarkRepository {
.filter((item) => {
let url = undefined;
try {
- url = new URL(item.url!!);
+ url = new URL(item.url!);
} catch (e) {
return false;
}
@@ -31,8 +31,8 @@ export default class CachedBookmarkRepository implements BookmarkRepository {
})
.slice(0, COMPLETION_ITEM_LIMIT)
.map((item) => ({
- title: item.title!!,
- url: item.url!!,
+ title: item.title!,
+ url: item.url!,
}));
}
@@ -41,7 +41,7 @@ export default class CachedBookmarkRepository implements BookmarkRepository {
return query.split(" ").every((keyword) => {
return (
item.title.toLowerCase().includes(keyword.toLowerCase()) ||
- item.url!!.includes(keyword)
+ item.url!.includes(keyword)
);
});
});
diff --git a/src/background/completion/impl/HistoryRepositoryImpl.ts b/src/background/completion/impl/HistoryRepositoryImpl.ts
index b1992a4..3bf064e 100644
--- a/src/background/completion/impl/HistoryRepositoryImpl.ts
+++ b/src/background/completion/impl/HistoryRepositoryImpl.ts
@@ -36,8 +36,8 @@ export default class CachedHistoryRepository implements HistoryRepository {
.sort((x, y) => Number(y.visitCount) - Number(x.visitCount))
.slice(0, COMPLETION_ITEM_LIMIT)
.map((item) => ({
- title: item.title!!,
- url: item.url!!,
+ title: item.title!,
+ url: item.url!,
}));
}
@@ -59,8 +59,8 @@ export default class CachedHistoryRepository implements HistoryRepository {
return items.filter((item) => {
return query.split(" ").every((keyword) => {
return (
- item.title!!.toLowerCase().includes(keyword.toLowerCase()) ||
- item.url!!.includes(keyword)
+ item.title!.toLowerCase().includes(keyword.toLowerCase()) ||
+ item.url!.includes(keyword)
);
});
});
diff --git a/src/background/completion/impl/TabRepositoryImpl.ts b/src/background/completion/impl/TabRepositoryImpl.ts
index 5e33e5a..a279bd4 100644
--- a/src/background/completion/impl/TabRepositoryImpl.ts
+++ b/src/background/completion/impl/TabRepositoryImpl.ts
@@ -30,10 +30,10 @@ export default class TabRepositoryImpl implements TabRepository {
private static toEntity(tab: browser.tabs.Tab): Tab {
return {
- id: tab.id!!,
- url: tab.url!!,
+ id: tab.id!,
+ url: tab.url!,
active: tab.active,
- title: tab.title!!,
+ title: tab.title!,
faviconUrl: tab.favIconUrl,
index: tab.index,
};
diff --git a/src/background/usecases/NavigateUseCase.ts b/src/background/usecases/NavigateUseCase.ts
index 2e887e7..974606c 100644
--- a/src/background/usecases/NavigateUseCase.ts
+++ b/src/background/usecases/NavigateUseCase.ts
@@ -11,27 +11,27 @@ export default class NavigateUseCase {
async openHistoryNext(): Promise<void> {
const tab = await this.tabPresenter.getCurrent();
- await this.navigateClient.historyNext(tab.id!!);
+ await this.navigateClient.historyNext(tab.id!);
}
async openHistoryPrev(): Promise<void> {
const tab = await this.tabPresenter.getCurrent();
- await this.navigateClient.historyPrev(tab.id!!);
+ await this.navigateClient.historyPrev(tab.id!);
}
async openLinkNext(): Promise<void> {
const tab = await this.tabPresenter.getCurrent();
- await this.navigateClient.linkNext(tab.id!!);
+ await this.navigateClient.linkNext(tab.id!);
}
async openLinkPrev(): Promise<void> {
const tab = await this.tabPresenter.getCurrent();
- await this.navigateClient.linkPrev(tab.id!!);
+ await this.navigateClient.linkPrev(tab.id!);
}
async openParent(): Promise<void> {
const tab = await this.tabPresenter.getCurrent();
- const url = new URL(tab.url!!);
+ const url = new URL(tab.url!);
if (url.hash.length > 0) {
url.hash = "";
} else if (url.search.length > 0) {
@@ -50,7 +50,7 @@ export default class NavigateUseCase {
async openRoot(): Promise<void> {
const tab = await this.tabPresenter.getCurrent();
- const url = new URL(tab.url!!);
+ const url = new URL(tab.url!);
await this.tabPresenter.open(url.origin);
}
}
diff --git a/src/background/usecases/SettingUseCase.ts b/src/background/usecases/SettingUseCase.ts
index ccee227..34c1f3a 100644
--- a/src/background/usecases/SettingUseCase.ts
+++ b/src/background/usecases/SettingUseCase.ts
@@ -36,7 +36,7 @@ export default class SettingUseCase {
this.showUnableToLoad(e);
value = DefaultSettingData.toSettings();
}
- await this.cachedSettingRepository.update(value!!);
+ await this.cachedSettingRepository.update(value!);
return value;
}
diff --git a/src/content/repositories/ClipboardRepository.ts b/src/content/repositories/ClipboardRepository.ts
index a700543..20e7367 100644
--- a/src/content/repositories/ClipboardRepository.ts
+++ b/src/content/repositories/ClipboardRepository.ts
@@ -15,7 +15,7 @@ export class ClipboardRepositoryImpl {
textarea.focus();
const ok = window.document.execCommand("paste");
- const value = textarea.textContent!!;
+ const value = textarea.textContent!;
textarea.remove();
if (!ok) {
diff --git a/src/content/usecases/FollowMasterUseCase.ts b/src/content/usecases/FollowMasterUseCase.ts
index 329f05a..88c682e 100644
--- a/src/content/usecases/FollowMasterUseCase.ts
+++ b/src/content/usecases/FollowMasterUseCase.ts
@@ -47,7 +47,7 @@ export default class FollowMasterUseCase {
for (let i = 0; i < frameElements.length; ++i) {
const ele = frameElements[i] as HTMLFrameElement | HTMLIFrameElement;
const { left: frameX, top: frameY } = ele.getBoundingClientRect();
- const client = this.followSlaveClientFactory.create(ele.contentWindow!!);
+ const client = this.followSlaveClientFactory.create(ele.contentWindow!);
client.requestHintCount(
{ width: viewWidth, height: viewHeight },
{ x: frameX, y: frameY }
@@ -59,7 +59,7 @@ export default class FollowMasterUseCase {
createSlaveHints(count: number, sender: Window): void {
const produced = [];
for (let i = 0; i < count; ++i) {
- const tag = this.producer!!.produce();
+ const tag = this.producer!.produce();
produced.push(tag);
this.followMasterRepository.addTag(tag);
}
diff --git a/src/settings/components/index.tsx b/src/settings/components/index.tsx
index 5793a8f..9d71cac 100644
--- a/src/settings/components/index.tsx
+++ b/src/settings/components/index.tsx
@@ -106,9 +106,9 @@ class SettingsComponent extends React.Component<Props> {
let fields = null;
const disabled = this.props.error.length > 0;
if (this.props.source === "form") {
- fields = this.renderFormFields(this.props.form!!);
+ fields = this.renderFormFields(this.props.form!);
} else if (this.props.source === "json") {
- fields = this.renderJsonFields(this.props.json!!, this.props.error);
+ fields = this.renderJsonFields(this.props.json!, this.props.error);
}
return (
<div>
diff --git a/src/shared/settings/Settings.ts b/src/shared/settings/Settings.ts
index 6f178ea..f37fbf0 100644
--- a/src/shared/settings/Settings.ts
+++ b/src/shared/settings/Settings.ts
@@ -43,7 +43,7 @@ export default class Settings {
const valid = validate(json);
if (!valid) {
const message = (validate as any)
- .errors!!.map((err: Ajv.ErrorObject) => {
+ .errors!.map((err: Ajv.ErrorObject) => {
return `'${err.dataPath}' ${err.message}`;
})
.join("; ");
diff --git a/test/background/repositories/Mark.test.ts b/test/background/repositories/Mark.test.ts
index 5cee5b6..3b054e5 100644
--- a/test/background/repositories/Mark.test.ts
+++ b/test/background/repositories/Mark.test.ts
@@ -13,13 +13,13 @@ describe("background/repositories/mark", () => {
await repository.setMark("A", mark);
- let got = (await repository.getMark("A"))!!;
+ let got = (await repository.getMark("A"))!;
expect(got.tabId).to.equal(1);
expect(got.url).to.equal("http://example.com");
expect(got.x).to.equal(10);
expect(got.y).to.equal(30);
- got = (await repository.getMark("B"))!!;
+ got = (await repository.getMark("B"))!;
expect(got).to.be.undefined;
});
});
diff --git a/test/content/presenters/Hint.test.ts b/test/content/presenters/Hint.test.ts
index f961f88..1a7c868 100644
--- a/test/content/presenters/Hint.test.ts
+++ b/test/content/presenters/Hint.test.ts
@@ -13,17 +13,17 @@ describe("Hint", () => {
describe("#constructor", () => {
it("creates a hint element with tag name", () => {
- const link = document.getElementById("test-link")!!;
+ const link = document.getElementById("test-link")!;
new Hint(link, "abc");
const elem = document.querySelector(".vimvixen-hint");
- expect(elem!!.textContent!!.trim()).to.be.equal("abc");
+ expect(elem!.textContent!.trim()).to.be.equal("abc");
});
});
describe("#show", () => {
it("shows an element", () => {
- const link = document.getElementById("test-link")!!;
+ const link = document.getElementById("test-link")!;
const hint = new Hint(link, "abc");
hint.hide();
hint.show();
@@ -46,10 +46,10 @@ describe("Hint", () => {
describe("#remove", () => {
it("removes an element", () => {
- const link = document.getElementById("test-link")!!;
+ const link = document.getElementById("test-link")!;
const hint = new Hint(link, "abc");
- const elem = document.querySelector(".vimvixen-hint")!!;
+ const elem = document.querySelector(".vimvixen-hint")!;
expect(elem.parentElement).to.not.be.null;
hint.remove();
expect(elem.parentElement).to.be.null;
diff --git a/test/settings/components/ui/input.test.tsx b/test/settings/components/ui/input.test.tsx
index 191bfed..d244d8f 100644
--- a/test/settings/components/ui/input.test.tsx
+++ b/test/settings/components/ui/input.test.tsx
@@ -25,8 +25,8 @@ describe("settings/ui/Input", () => {
);
});
- const label = document.querySelector("label")!!;
- const input = document.querySelector("input")!!;
+ const label = document.querySelector("label")!;
+ const input = document.querySelector("input")!;
expect(label.textContent).to.contain("myfield");
expect(input.type).to.contain("text");
expect(input.name).to.contain("myname");
@@ -50,7 +50,7 @@ describe("settings/ui/Input", () => {
);
});
- const input = document.querySelector("input")!!;
+ const input = document.querySelector("input")!;
input.value = "newvalue";
ReactTestUtils.Simulate.change(input);
});
@@ -65,8 +65,8 @@ describe("settings/ui/Input", () => {
);
});
- const label = document.querySelector("label")!!;
- const input = document.querySelector("input")!!;
+ const label = document.querySelector("label")!;
+ const input = document.querySelector("input")!;
expect(label.textContent).to.contain("myfield");
expect(input.type).to.contain("radio");
expect(input.name).to.contain("myname");
@@ -111,9 +111,9 @@ describe("settings/ui/Input", () => {
);
});
- const label = document.querySelector("label")!!;
- const textarea = document.querySelector("textarea")!!;
- const error = document.querySelector(".settings-ui-input-error")!!;
+ const label = document.querySelector("label")!;
+ const textarea = document.querySelector("textarea")!;
+ const error = document.querySelector(".settings-ui-input-error")!;
expect(label.textContent).to.contain("myfield");
expect(textarea.nodeName).to.contain("TEXTAREA");
expect(textarea.name).to.contain("myname");
@@ -138,7 +138,7 @@ describe("settings/ui/Input", () => {
);
});
- const input = document.querySelector("textarea")!!;
+ const input = document.querySelector("textarea")!;
input.value = "newvalue";
ReactTestUtils.Simulate.change(input);
});
diff --git a/test/settings/reducers/setting.test.ts b/test/settings/reducers/setting.test.ts
index 99c4c80..34e76e2 100644
--- a/test/settings/reducers/setting.test.ts
+++ b/test/settings/reducers/setting.test.ts
@@ -24,7 +24,7 @@ describe("settings setting reducer", () => {
};
const state = settingReducer(undefined, action);
expect(state.source).to.equal("json");
- expect(state.json!!.toJSONText()).to.equal('{ "key": "value" }');
+ expect(state.json!.toJSONText()).to.equal('{ "key": "value" }');
expect(state.form).to.deep.equal(action.form);
});
@@ -36,7 +36,7 @@ describe("settings setting reducer", () => {
};
const state = settingReducer(undefined, action);
expect(state.error).to.equal("bad value");
- expect(state.json!!.toJSONText()).to.equal("{}");
+ expect(state.json!.toJSONText()).to.equal("{}");
});
it("return next state for SETTING_SWITCH_TO_FORM", () => {
@@ -55,7 +55,7 @@ describe("settings setting reducer", () => {
json: JSONTextSettings.fromText("{}"),
};
const state = settingReducer(undefined, action);
- expect(state.json!!.toJSONText()).to.equal("{}");
+ expect(state.json!.toJSONText()).to.equal("{}");
expect(state.source).to.equal(SettingSource.JSON);
});
});