diff --git a/.eslintrc.json b/.eslintrc.json index 73d6cea999..b1db8a1786 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -4,8 +4,7 @@ "plugin:@typescript-eslint/recommended", "plugin:wc/recommended", "plugin:lit/recommended", - "prettier", - "prettier/@typescript-eslint" + "prettier" ], "parser": "@typescript-eslint/parser", "parserOptions": { @@ -85,6 +84,25 @@ "@typescript-eslint/explicit-function-return-type": 0, "@typescript-eslint/explicit-module-boundary-types": 0, "@typescript-eslint/no-shadow": ["error"], + "@typescript-eslint/naming-convention": [ + 0, + { + "selector": "default", + "format": ["camelCase", "snake_case"], + "leadingUnderscore": "allow", + "trailingUnderscore": "allow" + }, + { + "selector": ["variable"], + "format": ["camelCase", "snake_case", "UPPER_CASE"], + "leadingUnderscore": "allow", + "trailingUnderscore": "allow" + }, + { + "selector": "typeLike", + "format": ["PascalCase"] + } + ], "lit/attribute-value-entities": 0 }, "plugins": ["disable", "import", "lit", "prettier", "@typescript-eslint"], diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 6663a4988e..05c8af47e4 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -37,9 +37,11 @@ jobs: - name: Build resources run: ./node_modules/.bin/gulp gen-icons-json build-translations gather-gallery-demos - name: Run eslint - run: ./node_modules/.bin/eslint '{**/src,src}/**/*.{js,ts,html}' --ignore-path .gitignore + run: yarn run lint:eslint - name: Run tsc - run: ./node_modules/.bin/tsc + run: yarn run lint:types + - name: Run prettier + run: yarn run lint:prettier test: runs-on: ubuntu-latest steps: diff --git a/cast/src/launcher/layout/hc-cast.ts b/cast/src/launcher/layout/hc-cast.ts index 7bcbe70d59..c91e38f2af 100644 --- a/cast/src/launcher/layout/hc-cast.ts +++ b/cast/src/launcher/layout/hc-cast.ts @@ -54,9 +54,7 @@ class HcCast extends LitElement { const error = this.castManager.castState === "NO_DEVICES_AVAILABLE" ? html` -

- There were no suitable Chromecast devices to cast to found. -

+

There were no suitable Chromecast devices to cast to found.

` : undefined; diff --git a/cast/src/launcher/layout/hc-connect.ts b/cast/src/launcher/layout/hc-connect.ts index 8f3e1272ee..518c582f2c 100644 --- a/cast/src/launcher/layout/hc-connect.ts +++ b/cast/src/launcher/layout/hc-connect.ts @@ -86,9 +86,7 @@ export class HcConnect extends LitElement {
- - Retry - + Retry
Log out diff --git a/demo/src/stubs/translations.ts b/demo/src/stubs/translations.ts index 62ee9ac1bd..7eced853f0 100644 --- a/demo/src/stubs/translations.ts +++ b/demo/src/stubs/translations.ts @@ -3,8 +3,6 @@ import { MockHomeAssistant } from "../../../src/fake_data/provide_hass"; export const mockTranslations = (hass: MockHomeAssistant) => { hass.mockWS( "frontend/get_translations", - (/* msg: {language: string, category: string} */) => { - return { resources: {} }; - } + (/* msg: {language: string, category: string} */) => ({ resources: {} }) ); }; diff --git a/hassio/src/addon-store/hassio-addon-repository.ts b/hassio/src/addon-store/hassio-addon-repository.ts index 746ee5cd8d..4e33f15e8b 100644 --- a/hassio/src/addon-store/hassio-addon-repository.ts +++ b/hassio/src/addon-store/hassio-addon-repository.ts @@ -47,9 +47,7 @@ class HassioAddonRepositoryEl extends LitElement { const repo = this.repo; let _addons = this.addons; if (!this.hass.userData?.showAdvanced) { - _addons = _addons.filter((addon) => { - return !addon.advanced; - }); + _addons = _addons.filter((addon) => !addon.advanced); } const addons = this._getAddons(_addons, this.filter); @@ -68,9 +66,7 @@ class HassioAddonRepositoryEl extends LitElement { } return html`
-

- ${repo.name} -

+

${repo.name}

${addons.map( (addon) => html` diff --git a/hassio/src/addon-store/hassio-addon-store.ts b/hassio/src/addon-store/hassio-addon-store.ts index 5ca3d77d73..fd41a504db 100644 --- a/hassio/src/addon-store/hassio-addon-store.ts +++ b/hassio/src/addon-store/hassio-addon-store.ts @@ -86,9 +86,7 @@ class HassioAddonStore extends LitElement { main-page supervisor > - - ${this.supervisor.localize("panel.store")} - + ${this.supervisor.localize("panel.store")} { - return repositories.sort(sortRepos).map((repo) => { + ) => + repositories.sort(sortRepos).map((repo) => { const filteredAddons = addons.filter( (addon) => addon.repository === repo.slug ); @@ -171,8 +169,7 @@ class HassioAddonStore extends LitElement { > ` : html``; - }); - } + }) ); private _handleAction(ev: CustomEvent) { diff --git a/hassio/src/addon-view/config/hassio-addon-audio.ts b/hassio/src/addon-view/config/hassio-addon-audio.ts index de682a9520..79275a39cf 100644 --- a/hassio/src/addon-view/config/hassio-addon-audio.ts +++ b/hassio/src/addon-view/config/hassio-addon-audio.ts @@ -69,13 +69,13 @@ class HassioAddonAudio extends LitElement { .selected=${this._selectedInput!} > ${this._inputDevices && - this._inputDevices.map((item) => { - return html` + this._inputDevices.map( + (item) => html` ${item.name} - `; - })} + ` + )} ${this._outputDevices && - this._outputDevices.map((item) => { - return html` + this._outputDevices.map( + (item) => html` ${item.name} - `; - })} + ` + )}
diff --git a/hassio/src/addon-view/config/hassio-addon-config.ts b/hassio/src/addon-view/config/hassio-addon-config.ts index 706dd12789..56ebbfa5f5 100644 --- a/hassio/src/addon-view/config/hassio-addon-config.ts +++ b/hassio/src/addon-view/config/hassio-addon-config.ts @@ -65,19 +65,15 @@ class HassioAddonConfig extends LitElement { @query("ha-yaml-editor") private _editor?: HaYamlEditor; - public computeLabel = (entry: HaFormSchema): string => { - return ( - this.addon.translations[this.hass.language]?.configuration?.[entry.name] - ?.name || - this.addon.translations.en?.configuration?.[entry.name].name || - entry.name - ); - }; + public computeLabel = (entry: HaFormSchema): string => + this.addon.translations[this.hass.language]?.configuration?.[entry.name] + ?.name || + this.addon.translations.en?.configuration?.[entry.name].name || + entry.name; private _filteredShchema = memoizeOne( - (options: Record, schema: HaFormSchema[]) => { - return schema.filter((entry) => entry.name in options || entry.required); - } + (options: Record, schema: HaFormSchema[]) => + schema.filter((entry) => entry.name in options || entry.required) ); protected render(): TemplateResult { diff --git a/hassio/src/addon-view/config/hassio-addon-network.ts b/hassio/src/addon-view/config/hassio-addon-network.ts index 57eeacd187..256f81175f 100644 --- a/hassio/src/addon-view/config/hassio-addon-network.ts +++ b/hassio/src/addon-view/config/hassio-addon-network.ts @@ -79,12 +79,10 @@ class HassioAddonNetwork extends LitElement { "addon.configuration.network.host" )} - - ${this.supervisor.localize("common.description")} - + ${this.supervisor.localize("common.description")} - ${this._config!.map((item) => { - return html` + ${this._config!.map( + (item) => html` ${item.container} @@ -100,8 +98,8 @@ class HassioAddonNetwork extends LitElement { ${this._computeDescription(item)} - `; - })} + ` + )}
@@ -124,25 +122,20 @@ class HassioAddonNetwork extends LitElement { } } - private _computeDescription = (item: NetworkItem): string => { - return ( - this.addon.translations[this.hass.language]?.network?.[item.container] - ?.description || - this.addon.translations.en?.network?.[item.container]?.description || - item.description - ); - }; + private _computeDescription = (item: NetworkItem): string => + this.addon.translations[this.hass.language]?.network?.[item.container] + ?.description || + this.addon.translations.en?.network?.[item.container]?.description || + item.description; private _setNetworkConfig(): void { const network = this.addon.network || {}; const description = this.addon.network_description || {}; - const items: NetworkItem[] = Object.keys(network).map((key) => { - return { - container: key, - host: network[key], - description: description[key], - }; - }); + const items: NetworkItem[] = Object.keys(network).map((key) => ({ + container: key, + host: network[key], + description: description[key], + })); this._config = items.sort((a, b) => (a.container > b.container ? 1 : -1)); } diff --git a/hassio/src/addon-view/info/hassio-addon-info.ts b/hassio/src/addon-view/info/hassio-addon-info.ts index b0f10392fa..03d2c1bf65 100644 --- a/hassio/src/addon-view/info/hassio-addon-info.ts +++ b/hassio/src/addon-view/info/hassio-addon-info.ts @@ -566,9 +566,7 @@ class HassioAddonInfo extends LitElement { ${this.supervisor.localize("addon.dashboard.hostname")} - - ${this.addon.hostname} - + ${this.addon.hostname} ${metrics.map( (metric) => @@ -997,7 +995,7 @@ class HassioAddonInfo extends LitElement { addons: [this.addon.slug], homeassistant: false, }, - updateHandler: async () => await this._updateAddon(), + updateHandler: async () => this._updateAddon(), }); } diff --git a/hassio/src/components/hassio-card-content.ts b/hassio/src/components/hassio-card-content.ts index 02d3fc7e1b..03884e6b94 100644 --- a/hassio/src/components/hassio-card-content.ts +++ b/hassio/src/components/hassio-card-content.ts @@ -56,13 +56,13 @@ class HassioCardContent extends LitElement { > `}
-
- ${this.title} -
+
${this.title}
${this.description} - ${/* treat as available when undefined */ - this.available === false ? " (Not available)" : ""} + ${ + /* treat as available when undefined */ + this.available === false ? " (Not available)" : "" + } ${this.datetime ? html` - - ${this.description} - + ${this.description}
- - ${roundedValue} % - + ${roundedValue} % 50, diff --git a/hassio/src/dashboard/hassio-update.ts b/hassio/src/dashboard/hassio-update.ts index ccff99445b..1a11ee99e4 100644 --- a/hassio/src/dashboard/hassio-update.ts +++ b/hassio/src/dashboard/hassio-update.ts @@ -40,9 +40,8 @@ import { HomeAssistant } from "../../../src/types"; import { showDialogSupervisorUpdate } from "../dialogs/update/show-dialog-update"; import { hassioStyle } from "../resources/hassio-style"; -const computeVersion = (key: string, version: string): string => { - return key === "os" ? version : `${key}-${version}`; -}; +const computeVersion = (key: string, version: string): string => + key === "os" ? version : `${key}-${version}`; @customElement("hassio-update") export class HassioUpdate extends LitElement { @@ -50,11 +49,12 @@ export class HassioUpdate extends LitElement { @property({ attribute: false }) public supervisor!: Supervisor; - private _pendingUpdates = memoizeOne((supervisor: Supervisor): number => { - return Object.keys(supervisor).filter( - (value) => supervisor[value].update_available - ).length; - }); + private _pendingUpdates = memoizeOne( + (supervisor: Supervisor): number => + Object.keys(supervisor).filter( + (value) => supervisor[value].update_available + ).length + ); protected render(): TemplateResult { if (!this.supervisor) { diff --git a/hassio/src/dialogs/network/dialog-hassio-network.ts b/hassio/src/dialogs/network/dialog-hassio-network.ts index 8e6f9610e4..04f2710465 100644 --- a/hassio/src/dialogs/network/dialog-hassio-network.ts +++ b/hassio/src/dialogs/network/dialog-hassio-network.ts @@ -47,7 +47,8 @@ import { HassioNetworkDialogParams } from "./show-dialog-network"; const IP_VERSIONS = ["ipv4", "ipv6"]; @customElement("dialog-hassio-network") -export class DialogHassioNetwork extends LitElement +export class DialogHassioNetwork + extends LitElement implements HassDialog { @property({ attribute: false }) public hass!: HomeAssistant; @@ -76,9 +77,9 @@ export class DialogHassioNetwork extends LitElement this._dirty = false; this._curTabIndex = 0; this.supervisor = params.supervisor; - this._interfaces = params.supervisor.network.interfaces.sort((a, b) => { - return a.primary > b.primary ? -1 : 1; - }); + this._interfaces = params.supervisor.network.interfaces.sort((a, b) => + a.primary > b.primary ? -1 : 1 + ); this._interface = { ...this._interfaces[this._curTabIndex] }; await this.updateComplete; diff --git a/hassio/src/dialogs/registries/dialog-hassio-registries.ts b/hassio/src/dialogs/registries/dialog-hassio-registries.ts index 292fab3f43..4b77b41436 100644 --- a/hassio/src/dialogs/registries/dialog-hassio-registries.ts +++ b/hassio/src/dialogs/registries/dialog-hassio-registries.ts @@ -108,8 +108,8 @@ class HassioRegistriesDialog extends LitElement { ` : html`${this._registries?.length - ? this._registries.map((entry) => { - return html` + ? this._registries.map( + (entry) => html` ${entry.registry} - `; - }) + ` + ) : html` ${this._error}
` : ""}
${repositories.length - ? repositories.map((repo) => { - return html` + ? repositories.map( + (repo) => html`
${repo.name}
@@ -105,13 +105,9 @@ class HassioRepositoriesDialog extends LitElement {
- `; - }) - : html` - - No repositories - - `} + ` + ) + : html` No repositories `}
{ - return repo.source; - }); + const newRepositories = repositories.map((repo) => repo.source); newRepositories.push(input.value); try { @@ -228,19 +222,13 @@ class HassioRepositoriesDialog extends LitElement { private async _removeRepository(ev: Event) { const slug = (ev.currentTarget as any).slug; const repositories = this._filteredRepositories(this._repositories!); - const repository = repositories.find((repo) => { - return repo.slug === slug; - }); + const repository = repositories.find((repo) => repo.slug === slug); if (!repository) { return; } const newRepositories = repositories - .map((repo) => { - return repo.source; - }) - .filter((repo) => { - return repo !== repository.source; - }); + .map((repo) => repo.source) + .filter((repo) => repo !== repository.source); try { await setSupervisorOption(this.hass, { diff --git a/hassio/src/dialogs/snapshot/dialog-hassio-snapshot-upload.ts b/hassio/src/dialogs/snapshot/dialog-hassio-snapshot-upload.ts index 1f657bf0d8..d4948bd553 100644 --- a/hassio/src/dialogs/snapshot/dialog-hassio-snapshot-upload.ts +++ b/hassio/src/dialogs/snapshot/dialog-hassio-snapshot-upload.ts @@ -18,7 +18,8 @@ import "../../components/hassio-upload-snapshot"; import { HassioSnapshotUploadDialogParams } from "./show-dialog-snapshot-upload"; @customElement("dialog-hassio-snapshot-upload") -export class DialogHassioSnapshotUpload extends LitElement +export class DialogHassioSnapshotUpload + extends LitElement implements HassDialog { @property({ attribute: false }) public hass!: HomeAssistant; @@ -57,9 +58,7 @@ export class DialogHassioSnapshotUpload extends LitElement >
- - Upload snapshot - + Upload snapshot diff --git a/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts b/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts index 34042058d3..b44c9eb6c3 100755 --- a/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts +++ b/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts @@ -53,14 +53,13 @@ const _computeFolders = (folders) => { return list; }; -const _computeAddons = (addons) => { - return addons.map((addon) => ({ +const _computeAddons = (addons) => + addons.map((addon) => ({ slug: addon.slug, name: addon.name, version: addon.version, checked: true, })); -}; interface AddonItem { slug: string; @@ -122,9 +121,7 @@ class HassioSnapshotDialog extends LitElement {
- - ${this._computeName} - + ${this._computeName} @@ -152,8 +149,8 @@ class HassioSnapshotDialog extends LitElement { ? html`
Folders:
- ${this._folders.map((item) => { - return html` + ${this._folders.map( + (item) => html` Add-on:
- ${this._addons.map((item) => { - return html` + ${this._addons.map( + (item) => html`
-

- ${this.supervisor.localize("snapshot.create_snapshot")} -

+

${this.supervisor.localize("snapshot.create_snapshot")}

${this.supervisor.localize("snapshot.description")}

diff --git a/hassio/src/system/hassio-core-info.ts b/hassio/src/system/hassio-core-info.ts index bb00dcd05c..bdb156fe20 100644 --- a/hassio/src/system/hassio-core-info.ts +++ b/hassio/src/system/hassio-core-info.ts @@ -178,7 +178,7 @@ class HassioCoreInfo extends LitElement { folders: ["homeassistant"], homeassistant: true, }, - updateHandler: async () => await this._updateCore(), + updateHandler: async () => this._updateCore(), }); } diff --git a/hassio/src/system/hassio-host-info.ts b/hassio/src/system/hassio-host-info.ts index 09e363c1c1..db5e4e2f7e 100644 --- a/hassio/src/system/hassio-host-info.ts +++ b/hassio/src/system/hassio-host-info.ts @@ -97,9 +97,7 @@ class HassioHostInfo extends LitElement { ${this.supervisor.localize("system.host.ip_address")} - - ${primaryIpAddress} - + ${primaryIpAddress} - - ${this.supervisor.localize("system.supervisor.beta_backup")} - + ${this.supervisor.localize("system.supervisor.beta_backup")}

${this.supervisor.localize("system.supervisor.beta_release_items")}