From d3513189bb9c3e9a85a7666a1e92a2cfdee31baa Mon Sep 17 00:00:00 2001 From: Colin Date: Wed, 28 Apr 2021 19:00:11 -0400 Subject: [PATCH] Fixup lint warnings --- .eslintrc.base.json | 7 +- .../BaseFeatureWidget/BaseFeatureDetail.tsx | 2 +- .../SequenceFeatureDetails.tsx | 2 +- packages/core/PluginManager.ts | 12 +- packages/core/assemblyManager/assembly.ts | 1 - .../assemblyManager/assemblyConfigSchemas.ts | 8 +- .../core/configuration/configurationSlot.ts | 36 +++-- packages/core/configuration/util.ts | 32 +++-- packages/core/data_adapters/BaseAdapter.ts | 4 +- .../pluggableElementTypes/ConnectionType.ts | 1 - .../models/baseTrackConfig.ts | 4 +- .../renderers/BoxRendererType.ts | 8 +- .../ComparativeServerSideRendererType.ts | 4 +- .../renderers/FeatureRendererType.ts | 8 +- packages/core/rpc/BaseRpcDriver.test.ts | 1 - packages/core/rpc/ElectronRpcDriver.ts | 1 - packages/core/rpc/RpcManager.ts | 4 +- packages/core/rpc/coreRpcMethods.ts | 4 +- packages/core/ui/AboutDialog.tsx | 1 - packages/core/ui/PrerenderedCanvas.tsx | 12 +- packages/core/ui/RecentSessionCard.js | 8 +- packages/core/util/Base1DViewModel.ts | 8 +- packages/core/util/aborting.ts | 9 +- packages/core/util/calculateStaticBlocks.ts | 4 +- packages/core/util/compositeMap.ts | 8 +- packages/core/util/index.ts | 43 ++++-- packages/core/util/io/ElectronLocalFile.ts | 12 +- packages/core/util/io/ElectronRemoteFile.ts | 24 +++- packages/core/util/io/rangeFetcher.ts | 9 +- packages/core/util/jexl.ts | 1 - .../core/util/layouts/GranularRectLayout.ts | 72 +++++++--- packages/core/util/mst-reflection.js | 4 +- packages/core/util/offscreenCanvasPonyfill.js | 14 +- packages/core/util/simpleFeature.ts | 8 +- packages/core/util/stats.ts | 4 +- packages/development-tools/index.js | 1 - .../AlignmentsFeatureDetail.tsx | 1 - .../alignments/src/BamAdapter/BamAdapter.ts | 9 +- .../src/BamAdapter/MismatchParser.ts | 4 +- .../alignments/src/CramAdapter/CramAdapter.ts | 8 +- .../CramAdapter/CramSlightlyLazyFeature.ts | 29 ++++- .../src/CramAdapter/CramTestAdapters.ts | 4 +- .../LinearAlignmentsDisplay/models/model.tsx | 7 +- .../components/FilterByTag.tsx | 1 - .../alignments/src/NestedFrequencyTable.ts | 2 +- .../src/PileupRenderer/PileupRenderer.tsx | 5 +- .../components/PileupRendering.tsx | 15 ++- .../src/BreakpointSplitView.ts | 8 +- .../src/components/Translocations.tsx | 4 +- plugins/breakpoint-split-view/src/model.ts | 2 +- .../components/BaseChordDisplay.tsx | 8 +- .../components/RpcRenderedSvgGroup.js | 8 +- .../models/BaseChordDisplayModel.ts | 12 +- .../src/CircularView/components/Ruler.js | 8 +- .../src/CircularView/models/CircularView.ts | 7 +- .../models/viewportVisibleRegion.ts | 55 ++++++-- .../components/CallbackEditor.js | 4 +- .../FromConfigRegionsAdapter.ts | 8 +- .../FromConfigSequenceAdapter.ts | 8 +- .../components/AddConnectionWidget.js | 7 +- .../components/ConnectionTypeSelect.tsx | 3 - .../src/AddTrackWidget/model.ts | 1 - .../components/CloseConnectionDialog.tsx | 4 +- .../components/HierarchicalTrackSelector.js | 2 +- .../src/ucsc-trackhub/model.js | 2 +- .../src/ucsc-trackhub/ucscTrackHub.js | 12 +- .../dotplot-view/src/DotplotDisplay/index.ts | 4 +- .../DotplotRenderer/ComparativeRenderRpc.ts | 4 +- .../DotplotView/components/DotplotView.tsx | 4 +- .../dotplot-view/src/PAFAdapter/PAFAdapter.ts | 4 - plugins/dotplot-view/src/index.ts | 8 +- .../components/FilterControls.js | 4 +- .../src/LinearFilteringDisplay/model.js | 12 +- plugins/hic/src/HicRenderer/HicRenderer.tsx | 1 - .../src/JBrowse1Connection/jb1ConfigLoad.ts | 65 ++++++--- .../src/JBrowse1Connection/jb1ConfigParse.ts | 123 +++++++++++++----- .../src/JBrowse1Connection/jb1ToJb2.ts | 36 +++-- .../src/JBrowse1Connection/util.ts | 9 +- .../BreakpointSplitRenderer.ts | 2 +- .../components/BreakpointSplitRendering.tsx | 1 - .../src/BreakpointSplitView/index.ts | 12 +- .../components/LinearSyntenyRendering.tsx | 1 - plugins/linear-comparative-view/src/index.tsx | 3 +- .../models/BaseLinearDisplayModel.tsx | 15 ++- .../components/ExportSvgDialog.tsx | 1 - .../components/ImportForm.tsx | 1 - .../src/LinearGenomeView/components/Ruler.tsx | 1 - .../src/LinearGenomeView/index.tsx | 8 +- .../src/LinearGenomeView/util.ts | 8 +- .../lollipop/src/LollipopRenderer/Layout.ts | 16 ++- .../LollipopRenderer/components/Lollipop.js | 36 +++-- .../components/LollipopRendering.js | 28 +++- .../components/Rendering.js | 8 +- .../ProteinReferenceSequenceRenderer/util.js | 8 +- .../src/SPARQLAdapter/SPARQLAdapter.test.ts | 11 +- .../rdf/src/SPARQLAdapter/SPARQLAdapter.ts | 36 +++-- .../components/DivSequenceRendering.tsx | 6 +- .../sequence/src/referenceSeqTrackConfig.ts | 4 +- .../components/ImportWizard.js | 7 +- .../SpreadsheetView/components/RowMenu.tsx | 4 +- .../SpreadsheetView/components/Spreadsheet.js | 4 +- .../importAdapters/BedImport.ts | 4 +- .../importAdapters/ImportUtils.test.ts | 4 +- .../importAdapters/ImportUtils.ts | 4 +- .../importAdapters/STARFusionImport.ts | 4 +- .../importAdapters/VcfImport.ts | 4 +- .../models/ColumnDataTypes/Number.js | 16 ++- .../models/ColumnDataTypes/Text.js | 8 +- .../SpreadsheetView/models/FilterControls.ts | 8 +- .../SpreadsheetView/models/ImportWizard.ts | 8 +- .../src/SpreadsheetView/models/Spreadsheet.ts | 14 +- .../SpreadsheetView/models/SpreadsheetView.ts | 19 ++- .../SpreadsheetView/models/StaticRowSet.ts | 4 +- .../SvInspectorView/SvInspectorViewType.js | 4 +- .../components/SvInspectorView.js | 6 +- .../SvInspectorView/models/SvInspectorView.js | 19 ++- .../models/adhocFeatureUtils.js | 8 +- .../models/breakpointSplitViewFromTableRow.js | 12 +- .../SvgFeatureRenderer/components/Segments.js | 4 +- .../components/SvgFeatureRendering.js | 24 +++- .../components/SvgOverlay.tsx | 4 +- .../TrackHubRegistrySelect.js | 19 ++- .../models/ChordVariantDisplay.js | 4 +- .../ReactComponent.js | 12 +- .../StructuralVariantChordRenderer/index.js | 4 +- .../src/VcfTabixAdapter/VcfTabixAdapter.ts | 2 +- plugins/wiggle/src/DensityRenderer/index.ts | 2 +- .../src/LinePlotRenderer/LinePlotRenderer.js | 5 +- plugins/wiggle/src/index.ts | 2 +- plugins/wiggle/src/util.ts | 8 +- .../saved-sessions/jbrowse_analytics.js | 8 +- .../saved-sessions/read-session-jbrowse.js | 1 - .../saved-sessions/save-session-jbrowse.js | 1 - products/jbrowse-cli/src/base.ts | 2 - .../jbrowse-cli/src/commands/add-assembly.ts | 20 ++- .../src/commands/add-connection.ts | 28 +++- products/jbrowse-cli/src/testUtil.ts | 1 - products/jbrowse-desktop/public/electron.js | 1 - products/jbrowse-desktop/public/preload.js | 1 - .../rescripts/webpackRescript.js | 6 +- .../rescripts/yarnWorkspacesRescript.js | 2 - products/jbrowse-desktop/src/JBrowse.js | 4 +- products/jbrowse-desktop/src/corePlugins.ts | 4 +- products/jbrowse-desktop/src/index.js | 4 +- products/jbrowse-desktop/src/jbrowseModel.js | 12 +- products/jbrowse-desktop/src/rootModel.ts | 4 +- .../src/sessionModelFactory.ts | 20 ++- .../src/corePlugins.ts | 4 +- .../src/createModel/createSessionModel.ts | 23 ++-- .../JBrowseLinearGenomeView.stories.tsx | 10 +- .../stories/NextstrainGenomeView.stories.tsx | 10 +- .../jbrowse-web/rescripts/webpackRescript.js | 1 - .../rescripts/workerLoaderRescript.js | 1 - .../rescripts/yarnWorkspacesRescript.js | 2 - products/jbrowse-web/src/Loader.tsx | 4 +- products/jbrowse-web/src/RecentSessionCard.js | 4 +- products/jbrowse-web/src/ShareButton.tsx | 2 - products/jbrowse-web/src/corePlugins.ts | 4 +- products/jbrowse-web/src/jbrowseModel.js | 15 ++- products/jbrowse-web/src/rootModel.ts | 2 - products/jbrowse-web/src/rpc.worker.ts | 4 +- .../jbrowse-web/src/sessionModelFactory.ts | 30 +++-- products/jbrowse-web/src/tests/util.js | 6 +- scripts/build.js | 2 - scripts/changelog.js | 1 - scripts/pre-commit.js | 1 - website/docs/figure.jsx | 2 +- website/docs/md_parser.js | 9 +- website/docs/tex_parser.js | 2 +- website/src/pages/index.js | 2 - website/src/pages/plugin_store.js | 3 - 171 files changed, 1139 insertions(+), 484 deletions(-) diff --git a/.eslintrc.base.json b/.eslintrc.base.json index f60d05a4cf..0758114973 100644 --- a/.eslintrc.base.json +++ b/.eslintrc.base.json @@ -3,7 +3,6 @@ "browser": true }, "extends": [ - "airbnb-typescript", "plugin:@typescript-eslint/recommended", "plugin:monorepo/recommended", "plugin:prettier/recommended", @@ -37,9 +36,13 @@ "@typescript-eslint/require-await": "off", "@typescript-eslint/unbound-method": "off", "class-methods-use-this": "off", + "@typescript-eslint/no-redeclare": "off", "global-require": "off", - "import/no-cycle": "off", "curly": "error", + "no-global-assign": "warn", + "react/no-danger": "warn", + "import/no-cycle": "off", + "import/no-anonymous-default-export": "off", "import/prefer-default-export": "off", "jsx-a11y/mouse-events-have-key-events": "off", "max-classes-per-file": "off", diff --git a/packages/core/BaseFeatureWidget/BaseFeatureDetail.tsx b/packages/core/BaseFeatureWidget/BaseFeatureDetail.tsx index 9625d7783c..16eadb9385 100644 --- a/packages/core/BaseFeatureWidget/BaseFeatureDetail.tsx +++ b/packages/core/BaseFeatureWidget/BaseFeatureDetail.tsx @@ -1,4 +1,4 @@ -/* eslint-disable @typescript-eslint/no-explicit-any,react/prop-types,no-nested-ternary */ +/* eslint-disable @typescript-eslint/no-explicit-any,react/prop-types */ import React from 'react' import ErrorBoundary from 'react-error-boundary' import { diff --git a/packages/core/BaseFeatureWidget/SequenceFeatureDetails.tsx b/packages/core/BaseFeatureWidget/SequenceFeatureDetails.tsx index c7812f2389..2914c95233 100644 --- a/packages/core/BaseFeatureWidget/SequenceFeatureDetails.tsx +++ b/packages/core/BaseFeatureWidget/SequenceFeatureDetails.tsx @@ -1,4 +1,4 @@ -/* eslint-disable no-nested-ternary,react/prop-types */ +/* eslint-disable react/prop-types */ import React, { useRef, useState, useEffect } from 'react' import { Button, Select, MenuItem, Typography } from '@material-ui/core' import { useInView } from 'react-intersection-observer' diff --git a/packages/core/PluginManager.ts b/packages/core/PluginManager.ts index 8e1590aec3..8a7163cd51 100644 --- a/packages/core/PluginManager.ts +++ b/packages/core/PluginManager.ts @@ -237,7 +237,9 @@ export default class PluginManager { } configure() { - if (this.configured) throw new Error('already configured') + if (this.configured) { + throw new Error('already configured') + } this.plugins.forEach(plugin => plugin.configure(this)) @@ -364,7 +366,9 @@ export default class PluginManager { lib = ReExports load = (lib: FTYPE): ReturnType => { - if (!this.jbrequireCache.has(lib)) this.jbrequireCache.set(lib, lib(this)) + if (!this.jbrequireCache.has(lib)) { + this.jbrequireCache.set(lib, lib(this)) + } return this.jbrequireCache.get(lib) } @@ -392,7 +396,9 @@ export default class PluginManager { return this.load(lib) } - if (lib.default) return this.jbrequire(lib.default) + if (lib.default) { + return this.jbrequire(lib.default) + } throw new TypeError( 'lib passed to jbrequire must be either a string or a function', diff --git a/packages/core/assemblyManager/assembly.ts b/packages/core/assemblyManager/assembly.ts index 0b9c75500a..dfedf0bba1 100644 --- a/packages/core/assemblyManager/assembly.ts +++ b/packages/core/assemblyManager/assembly.ts @@ -368,7 +368,6 @@ async function loadAssemblyReaction( adapterRegionsWithAssembly.forEach(region => { refNameAliases[region.refName] = region.refName }) - // eslint-disable-next-line consistent-return return { adapterRegionsWithAssembly, refNameAliases } } export type Assembly = Instance> diff --git a/packages/core/assemblyManager/assemblyConfigSchemas.ts b/packages/core/assemblyManager/assemblyConfigSchemas.ts index 3153b850da..1ee1cb76ef 100644 --- a/packages/core/assemblyManager/assemblyConfigSchemas.ts +++ b/packages/core/assemblyManager/assemblyConfigSchemas.ts @@ -38,9 +38,13 @@ export default (pluginManager: PluginManager) => { | SnapshotIn | SnapshotIn, ) { - if (!snapshot) return BaseAssemblyConfigSchema + if (!snapshot) { + return BaseAssemblyConfigSchema + } const { refNameAliases } = snapshot - if (refNameAliases) return AssemblyConfigSchema + if (refNameAliases) { + return AssemblyConfigSchema + } return BaseAssemblyConfigSchema } diff --git a/packages/core/configuration/configurationSlot.ts b/packages/core/configuration/configurationSlot.ts index 02f0c95e07..21573c6941 100644 --- a/packages/core/configuration/configurationSlot.ts +++ b/packages/core/configuration/configurationSlot.ts @@ -93,17 +93,23 @@ const typeModelExtensions: { [typeName: string]: (self: any) => any } = { }, addToKey(key: string, val: string) { const ar = self.value.get(key) - if (!ar) throw new Error(`${key} not found`) + if (!ar) { + throw new Error(`${key} not found`) + } ar.push(val) }, removeAtKeyIndex(key: string, idx: number) { const ar = self.value.get(key) - if (!ar) throw new Error(`${key} not found`) + if (!ar) { + throw new Error(`${key} not found`) + } ar.splice(idx, 1) }, setAtKeyIndex(key: string, idx: number, val: string) { const ar = self.value.get(key) - if (!ar) throw new Error(`${key} not found`) + if (!ar) { + throw new Error(`${key} not found`) + } ar[idx] = val }, }, @@ -163,15 +169,21 @@ export default function ConfigSlot( contextVariable = [], }: ConfigSlotDefinition, ) { - if (!type) throw new Error('type name required') - if (!model) model = typeModels[type] + if (!type) { + throw new Error('type name required') + } + if (!model) { + model = typeModels[type] + } if (!model) { throw new Error( `no builtin config slot type "${type}", and no 'model' param provided`, ) } - if (defaultValue === undefined) throw new Error("no 'defaultValue' provided") + if (defaultValue === undefined) { + throw new Error("no 'defaultValue' provided") + } // if the `type` is something like `color`, then the model name // here will be `ColorConfigSlot` @@ -209,7 +221,9 @@ export default function ConfigSlot( // for embedding in either JSON or a JS function string. // many of the data types override this in typeModelExtensions get valueJSON(): any[] | Record | string | undefined { - if (self.isCallback) return undefined + if (self.isCallback) { + return undefined + } function json(value: { toJSON: Function } | any) { if (value && value.toJSON) { return value.toJSON() @@ -252,11 +266,15 @@ export default function ConfigSlot( self.value = defaultValue }, convertToCallback() { - if (self.isCallback) return + if (self.isCallback) { + return + } self.value = `jexl:${self.valueJSON || "''"}` }, convertToValue() { - if (!self.isCallback) return + if (!self.isCallback) { + return + } // try calling it with no arguments try { const funcResult = self.expr.evalSync() diff --git a/packages/core/configuration/util.ts b/packages/core/configuration/util.ts index c22825bb74..43f95aab84 100644 --- a/packages/core/configuration/util.ts +++ b/packages/core/configuration/util.ts @@ -38,8 +38,12 @@ export function readConfObject( args: Record = {}, // eslint-disable-next-line @typescript-eslint/no-explicit-any ): any { - if (!confObject) throw new TypeError('must provide conf object to read') - if (!slotPath) return getSnapshot(confObject) + if (!confObject) { + throw new TypeError('must provide conf object to read') + } + if (!slotPath) { + return getSnapshot(confObject) + } if (typeof slotPath === 'string') { let slot = confObject[slotPath] // check for the subconf being a map if we don't find it immediately @@ -66,10 +70,14 @@ export function readConfObject( if (slot.expr) { const appliedFunc = slot.expr.evalSync(args) - if (isStateTreeNode(appliedFunc)) return getSnapshot(appliedFunc) + if (isStateTreeNode(appliedFunc)) { + return getSnapshot(appliedFunc) + } return appliedFunc } - if (isStateTreeNode(slot)) return getSnapshot(slot) + if (isStateTreeNode(slot)) { + return getSnapshot(slot) + } return slot } @@ -107,7 +115,9 @@ export function getConf( // eslint-disable-next-line @typescript-eslint/no-explicit-any args: Record = {}, ) { - if (!model) throw new TypeError('must provide a model object') + if (!model) { + throw new TypeError('must provide a model object') + } const { configuration } = model as { configuration: unknown } if (isConfigurationModel(configuration)) { return readConfObject(configuration, slotPath, args) @@ -159,13 +169,17 @@ export function isBareConfigurationSchemaType( return true } // if it's a late type, assume its a config schema - if (isLateType(thing)) return true + if (isLateType(thing)) { + return true + } } return false } export function isConfigurationSchemaType(thing: unknown): boolean { - if (!isType(thing)) return false + if (!isType(thing)) { + return false + } // written as a series of if-statements instead of a big logical OR // because this construction gives much better debugging backtraces. @@ -173,7 +187,9 @@ export function isConfigurationSchemaType(thing: unknown): boolean { // also, note that the order of these statements matters, because // for example some union types are also optional types - if (isBareConfigurationSchemaType(thing)) return true + if (isBareConfigurationSchemaType(thing)) { + return true + } if (isUnionType(thing)) { return getUnionSubTypes(thing).every( diff --git a/packages/core/data_adapters/BaseAdapter.ts b/packages/core/data_adapters/BaseAdapter.ts index 024524014b..dc70f50e22 100644 --- a/packages/core/data_adapters/BaseAdapter.ts +++ b/packages/core/data_adapters/BaseAdapter.ts @@ -55,8 +55,8 @@ function idMaker(args: any, id = '') { let chr for (i = 0; i < id.length; i++) { chr = id.charCodeAt(i) - hash = (hash << 5) - hash + chr // eslint-disable-line no-bitwise - hash |= 0 // eslint-disable-line no-bitwise + hash = (hash << 5) - hash + chr + hash |= 0 } return hash } diff --git a/packages/core/pluggableElementTypes/ConnectionType.ts b/packages/core/pluggableElementTypes/ConnectionType.ts index 07e69b07ff..8548f95e76 100644 --- a/packages/core/pluggableElementTypes/ConnectionType.ts +++ b/packages/core/pluggableElementTypes/ConnectionType.ts @@ -1,4 +1,3 @@ -/* eslint-disable react/static-property-placement */ import { IAnyModelType } from 'mobx-state-tree' import PluggableElementBase from './PluggableElementBase' import { AnyConfigurationSchemaType } from '../configuration/configurationSchema' diff --git a/packages/core/pluggableElementTypes/models/baseTrackConfig.ts b/packages/core/pluggableElementTypes/models/baseTrackConfig.ts index e4b4b4ee3b..dbe992f140 100644 --- a/packages/core/pluggableElementTypes/models/baseTrackConfig.ts +++ b/packages/core/pluggableElementTypes/models/baseTrackConfig.ts @@ -74,7 +74,9 @@ export function createBaseTrackConfig(pluginManager: PluginManager) { actions: (self: any) => ({ addDisplayConf(displayConf: { type: string; displayId: string }) { const { type } = displayConf - if (!type) throw new Error(`unknown display type ${type}`) + if (!type) { + throw new Error(`unknown display type ${type}`) + } const display = self.displays.find( (d: any) => d && d.displayId === displayConf.displayId, ) diff --git a/packages/core/pluggableElementTypes/renderers/BoxRendererType.ts b/packages/core/pluggableElementTypes/renderers/BoxRendererType.ts index e3267d37a6..e950a08bb6 100644 --- a/packages/core/pluggableElementTypes/renderers/BoxRendererType.ts +++ b/packages/core/pluggableElementTypes/renderers/BoxRendererType.ts @@ -133,13 +133,17 @@ export default class BoxRendererType extends FeatureRendererType { // expands region for glyphs to use getExpandedRegion(region: Region, renderArgs: RenderArgsDeserialized) { - if (!region) return region + if (!region) { + return region + } const { bpPerPx, config } = renderArgs const maxFeatureGlyphExpansion = config === undefined ? 0 : readConfObject(config, 'maxFeatureGlyphExpansion') - if (!maxFeatureGlyphExpansion) return region + if (!maxFeatureGlyphExpansion) { + return region + } const bpExpansion = Math.round(maxFeatureGlyphExpansion * bpPerPx) return { ...region, diff --git a/packages/core/pluggableElementTypes/renderers/ComparativeServerSideRendererType.ts b/packages/core/pluggableElementTypes/renderers/ComparativeServerSideRendererType.ts index fa6a9cf93d..895dc97537 100644 --- a/packages/core/pluggableElementTypes/renderers/ComparativeServerSideRendererType.ts +++ b/packages/core/pluggableElementTypes/renderers/ComparativeServerSideRendererType.ts @@ -86,7 +86,9 @@ export default class ComparativeServerSideRenderer extends ServerSideRenderer { * @returns true if this feature passes all configured filters */ featurePassesFilters(renderArgs: RenderArgsDeserialized, feature: Feature) { - if (!renderArgs.filters) return true + if (!renderArgs.filters) { + return true + } return renderArgs.filters.passes(feature, renderArgs) } diff --git a/packages/core/pluggableElementTypes/renderers/FeatureRendererType.ts b/packages/core/pluggableElementTypes/renderers/FeatureRendererType.ts index 3fc0fdb08b..cfeb55401f 100644 --- a/packages/core/pluggableElementTypes/renderers/FeatureRendererType.ts +++ b/packages/core/pluggableElementTypes/renderers/FeatureRendererType.ts @@ -174,7 +174,9 @@ export default class FeatureRendererType extends ServerSideRendererType { filter(feature => this.featurePassesFilters(renderArgs, feature)), tap(feature => { const id = feature.id() - if (!id) throw new Error(`invalid feature id "${id}"`) + if (!id) { + throw new Error(`invalid feature id "${id}"`) + } features.set(id, feature) }), ignoreElements(), @@ -190,7 +192,9 @@ export default class FeatureRendererType extends ServerSideRendererType { * @returns true if this feature passes all configured filters */ featurePassesFilters(renderArgs: RenderArgsDeserialized, feature: Feature) { - if (!renderArgs.filters) return true + if (!renderArgs.filters) { + return true + } return renderArgs.filters.passes(feature, renderArgs) } diff --git a/packages/core/rpc/BaseRpcDriver.test.ts b/packages/core/rpc/BaseRpcDriver.test.ts index bf73b7f3f7..a1774a18c9 100644 --- a/packages/core/rpc/BaseRpcDriver.test.ts +++ b/packages/core/rpc/BaseRpcDriver.test.ts @@ -36,7 +36,6 @@ class MockWorkerHandle implements WorkerHandle { throw new Error('timeout') } - // eslint-disable-next-line no-await-in-loop await timeout(50) } } else if (name === 'doWorkShortPingTime') { diff --git a/packages/core/rpc/ElectronRpcDriver.ts b/packages/core/rpc/ElectronRpcDriver.ts index d03363383a..1d06c7d0af 100644 --- a/packages/core/rpc/ElectronRpcDriver.ts +++ b/packages/core/rpc/ElectronRpcDriver.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-await-in-loop */ import shortid from 'shortid' import BaseRpcDriver, { RpcDriverConstructorArgs } from './BaseRpcDriver' import PluginManager from '../PluginManager' diff --git a/packages/core/rpc/RpcManager.ts b/packages/core/rpc/RpcManager.ts index 0cf716b034..ca240f7b1d 100644 --- a/packages/core/rpc/RpcManager.ts +++ b/packages/core/rpc/RpcManager.ts @@ -60,7 +60,9 @@ export default class RpcManager { getDriver(backendName: keyof typeof DriverClasses): DriverClass { const driver = this.driverObjects.get(backendName) - if (driver) return driver + if (driver) { + return driver + } const backendConfiguration = this.backendConfigurations[backendName] const DriverClassImpl = DriverClasses[backendName] diff --git a/packages/core/rpc/coreRpcMethods.ts b/packages/core/rpc/coreRpcMethods.ts index 84eb5864e2..ed0f551bf9 100644 --- a/packages/core/rpc/coreRpcMethods.ts +++ b/packages/core/rpc/coreRpcMethods.ts @@ -155,7 +155,9 @@ export class CoreFreeResources extends RpcMethodType { // pass the freeResources hint along to all the renderers as well this.pluginManager.getRendererTypes().forEach(renderer => { const count = renderer.freeResources(/* specification */) - if (count) deleteCount += count + if (count) { + deleteCount += count + } }) return deleteCount diff --git a/packages/core/ui/AboutDialog.tsx b/packages/core/ui/AboutDialog.tsx index ad35280674..d12348ea3c 100644 --- a/packages/core/ui/AboutDialog.tsx +++ b/packages/core/ui/AboutDialog.tsx @@ -1,4 +1,3 @@ -/* eslint-disable no-nested-ternary */ import React, { useState, useEffect } from 'react' import { Dialog, diff --git a/packages/core/ui/PrerenderedCanvas.tsx b/packages/core/ui/PrerenderedCanvas.tsx index 9ec453aea2..217206c8bb 100644 --- a/packages/core/ui/PrerenderedCanvas.tsx +++ b/packages/core/ui/PrerenderedCanvas.tsx @@ -22,11 +22,17 @@ function PrerenderedCanvas(props: { const featureCanvas = useRef(null) useEffect(() => { - if (!imageData) return + if (!imageData) { + return + } const canvas = featureCanvas.current - if (!canvas) return + if (!canvas) { + return + } const context = canvas.getContext('2d') - if (!context) return + if (!context) { + return + } if (imageData.commands) { imageData.commands.forEach((command: any) => { if (command.type === 'strokeStyle') { diff --git a/packages/core/ui/RecentSessionCard.js b/packages/core/ui/RecentSessionCard.js index b134e7006e..162a9f088e 100644 --- a/packages/core/ui/RecentSessionCard.js +++ b/packages/core/ui/RecentSessionCard.js @@ -47,8 +47,12 @@ function RecentSessionCard({ const handleMenuClose = action => { setMenuAnchorEl(null) - if (action === 'delete') return onDelete(sessionName) - if (action === 'rename') return onRename(sessionName) + if (action === 'delete') { + return onDelete(sessionName) + } + if (action === 'rename') { + return onRename(sessionName) + } return undefined } diff --git a/packages/core/util/Base1DViewModel.ts b/packages/core/util/Base1DViewModel.ts index bb794d6ea3..d77535da39 100644 --- a/packages/core/util/Base1DViewModel.ts +++ b/packages/core/util/Base1DViewModel.ts @@ -218,7 +218,9 @@ const Base1DView = types leftPx: BpOffset | undefined, rightPx: BpOffset | undefined, ) { - if (leftPx === undefined || rightPx === undefined) return + if (leftPx === undefined || rightPx === undefined) { + return + } const singleRefSeq = leftPx.refName === rightPx.refName && leftPx.index === rightPx.index @@ -309,7 +311,9 @@ const Base1DView = types zoomTo(newBpPerPx: number, offset = self.width / 2) { const bpPerPx = newBpPerPx - if (bpPerPx === self.bpPerPx) return + if (bpPerPx === self.bpPerPx) { + return + } const oldBpPerPx = self.bpPerPx self.bpPerPx = bpPerPx diff --git a/packages/core/util/aborting.ts b/packages/core/util/aborting.ts index 6cf84c7949..6d9b804985 100644 --- a/packages/core/util/aborting.ts +++ b/packages/core/util/aborting.ts @@ -16,14 +16,15 @@ class AbortError extends Error { * @returns nothing */ export function checkAbortSignal(signal?: AbortSignal): void { - if (!signal) return + if (!signal) { + return + } if (!(signal instanceof AbortSignal)) { throw new TypeError('must pass an AbortSignal') } if (signal.aborted) { - // eslint-disable-next-line @typescript-eslint/no-throw-literal throw makeAbortError() } } @@ -55,7 +56,9 @@ export function makeAbortError() { } export function observeAbortSignal(signal?: AbortSignal): Observable { - if (!signal) return Observable.create() + if (!signal) { + return Observable.create() + } return fromEvent(signal, 'abort') } diff --git a/packages/core/util/calculateStaticBlocks.ts b/packages/core/util/calculateStaticBlocks.ts index f55315917f..2776f31dfb 100644 --- a/packages/core/util/calculateStaticBlocks.ts +++ b/packages/core/util/calculateStaticBlocks.ts @@ -63,7 +63,9 @@ export default function calculateStaticBlocks( let windowLeftBlockNum = Math.floor((windowLeftBp - regionBpOffset) / blockSizeBp) - extra - if (windowLeftBlockNum < 0) windowLeftBlockNum = 0 + if (windowLeftBlockNum < 0) { + windowLeftBlockNum = 0 + } const regionWidthPx = (regionEnd - regionStart) / bpPerPx diff --git a/packages/core/util/compositeMap.ts b/packages/core/util/compositeMap.ts index 1d32bc1bbc..1d61d81e13 100644 --- a/packages/core/util/compositeMap.ts +++ b/packages/core/util/compositeMap.ts @@ -9,14 +9,18 @@ export default class CompositeMap { has(id: T) { for (const submap of this.submaps.values()) { - if (submap.has(id)) return true + if (submap.has(id)) { + return true + } } return false } get(id: T) { for (const submap of this.submaps.values()) { - if (submap.has(id)) return submap.get(id) + if (submap.has(id)) { + return submap.get(id) + } } return undefined } diff --git a/packages/core/util/index.ts b/packages/core/util/index.ts index b12eefd6c9..c78aef2ff4 100644 --- a/packages/core/util/index.ts +++ b/packages/core/util/index.ts @@ -147,9 +147,14 @@ export function findParentThat( ) { let currentNode: IAnyStateTreeNode | undefined = node while (currentNode && isAlive(currentNode)) { - if (predicate(currentNode)) return currentNode - if (hasParent(currentNode)) currentNode = getParent(currentNode) - else break + if (predicate(currentNode)) { + return currentNode + } + if (hasParent(currentNode)) { + currentNode = getParent(currentNode) + } else { + break + } } throw new Error('no matching node found') } @@ -463,21 +468,29 @@ export function compareLocs(locA: ParsedLocString, locB: ParsedLocString) { locA.assemblyName || locB.assemblyName ? (locA.assemblyName || '').localeCompare(locB.assemblyName || '') : 0 - if (assemblyComp) return assemblyComp + if (assemblyComp) { + return assemblyComp + } const refComp = locA.refName || locB.refName ? (locA.refName || '').localeCompare(locB.refName || '') : 0 - if (refComp) return refComp + if (refComp) { + return refComp + } if (locA.start !== undefined && locB.start !== undefined) { const startComp = locA.start - locB.start - if (startComp) return startComp + if (startComp) { + return startComp + } } if (locA.end !== undefined && locB.end !== undefined) { const endComp = locA.end - locB.end - if (endComp) return endComp + if (endComp) { + return endComp + } } return 0 } @@ -500,8 +513,12 @@ export function compareLocStrings( * @param max - */ export function clamp(num: number, min: number, max: number): number { - if (num < min) return min - if (num > max) return max + if (num < min) { + return min + } + if (num > max) { + return max + } return num } @@ -607,8 +624,11 @@ interface Config { // similar to electron.js export function mergeConfigs(A: Config, B: Config) { const merged = merge(A, B) - if (B.defaultSession) merged.defaultSession = B.defaultSession - else if (A.defaultSession) merged.defaultSession = A.defaultSession + if (B.defaultSession) { + merged.defaultSession = B.defaultSession + } else if (A.defaultSession) { + merged.defaultSession = A.defaultSession + } return merged } @@ -876,7 +896,6 @@ export function blobToDataURL(blob: Blob) { // otherwise listens for prerendered_canvas but reads empty pixels, and doesn't // get the contents of the canvas export const rIC = - // eslint-disable-next-line no-nested-ternary typeof jest === 'undefined' ? typeof window !== 'undefined' && window.requestIdleCallback ? window.requestIdleCallback diff --git a/packages/core/util/io/ElectronLocalFile.ts b/packages/core/util/io/ElectronLocalFile.ts index 998957b8a9..d4c0c28663 100644 --- a/packages/core/util/io/ElectronLocalFile.ts +++ b/packages/core/util/io/ElectronLocalFile.ts @@ -21,7 +21,9 @@ export default class ElectronLocalFile implements GenericFilehandle { constructor(source: PathLike) { let ipcRenderer - if (electron) ipcRenderer = electron.ipcRenderer + if (electron) { + ipcRenderer = electron.ipcRenderer + } if (!ipcRenderer) { throw new Error( 'Cannot use ElectronLocalFile without ipcRenderer from electron', @@ -32,7 +34,9 @@ export default class ElectronLocalFile implements GenericFilehandle { } private async getFd(): Promise { - if (!this.filename) throw new Error('no file path specified') + if (!this.filename) { + throw new Error('no file path specified') + } if (!this.fd) { this.fd = this.ipcRenderer.invoke('open', this.filename, 'r') as Promise< number @@ -66,7 +70,9 @@ export default class ElectronLocalFile implements GenericFilehandle { } async readFile(_: FilehandleOptions = {}): Promise { - if (!this.filename) throw new Error('no file path specified') + if (!this.filename) { + throw new Error('no file path specified') + } const result = await this.ipcRenderer.invoke('readFile', this.filename) diff --git a/packages/core/util/io/ElectronRemoteFile.ts b/packages/core/util/io/ElectronRemoteFile.ts index 1263e591cf..3a59e74683 100644 --- a/packages/core/util/io/ElectronRemoteFile.ts +++ b/packages/core/util/io/ElectronRemoteFile.ts @@ -47,7 +47,9 @@ export default class ElectronRemoteFile implements GenericFilehandle { public constructor(source: string, opts: FilehandleOptions = {}) { let ipcRenderer - if (electron) ipcRenderer = electron.ipcRenderer + if (electron) { + ipcRenderer = electron.ipcRenderer + } if (!ipcRenderer) { throw new Error( 'Cannot use ElectronLocalFile without ipcRenderer from electron', @@ -60,7 +62,9 @@ export default class ElectronRemoteFile implements GenericFilehandle { // if it is a file URL, monkey-patch ourselves to act like a LocalFile if (source.startsWith('file://')) { const path = uri2path(source) - if (!path) throw new TypeError('invalid file url') + if (!path) { + throw new TypeError('invalid file url') + } const localFile = new ElectronLocalFile(path) this.read = localFile.read.bind(localFile) this.readFile = localFile.readFile.bind(localFile) @@ -100,7 +104,9 @@ export default class ElectronRemoteFile implements GenericFilehandle { input: RequestInfo, init?: RequestInit, ): Promise => { - if (init) init.signal = undefined + if (init) { + init.signal = undefined + } const serializedResponse = (await this.ipcRenderer.invoke( 'fetch', input, @@ -159,7 +165,9 @@ export default class ElectronRemoteFile implements GenericFilehandle { } } else { const contentLength = response.headers.get('content-length') - if (contentLength) this._stat = { size: parseInt(contentLength, 10) } + if (contentLength) { + this._stat = { size: parseInt(contentLength, 10) } + } } } return response @@ -234,8 +242,12 @@ export default class ElectronRemoteFile implements GenericFilehandle { } public async stat(): Promise { - if (!this._stat) await this.headFetch() - if (!this._stat) await this.read(Buffer.allocUnsafe(10), 0, 10, 0) + if (!this._stat) { + await this.headFetch() + } + if (!this._stat) { + await this.read(Buffer.allocUnsafe(10), 0, 10, 0) + } if (!this._stat) { throw new Error(`unable to determine size of file at ${this.url}`) } diff --git a/packages/core/util/io/rangeFetcher.ts b/packages/core/util/io/rangeFetcher.ts index 06b9261776..b03b943e7c 100644 --- a/packages/core/util/io/rangeFetcher.ts +++ b/packages/core/util/io/rangeFetcher.ts @@ -88,13 +88,16 @@ async function globalCacheFetch( const requestHeaders = opts && opts.headers let range if (requestHeaders) { - if (requestHeaders instanceof Headers) range = requestHeaders.get('range') - else if (Array.isArray(requestHeaders)) { + if (requestHeaders instanceof Headers) { + range = requestHeaders.get('range') + } else if (Array.isArray(requestHeaders)) { ;[, range] = requestHeaders.find(([key]) => key === 'range') || [ undefined, undefined, ] - } else range = requestHeaders.range + } else { + range = requestHeaders.range + } } if (range) { const rangeParse = /bytes=(\d+)-(\d+)/.exec(range) diff --git a/packages/core/util/jexl.ts b/packages/core/util/jexl.ts index 6ef04d6b26..3ac8494483 100644 --- a/packages/core/util/jexl.ts +++ b/packages/core/util/jexl.ts @@ -108,7 +108,6 @@ export default function (/* config?: any*/): JexlNonBuildable { return tags ? tags[str] : feature.get(str) }) - // eslint-disable-next-line no-bitwise j.addBinaryOp('&', 15, (a: number, b: number) => a & b) return j diff --git a/packages/core/util/layouts/GranularRectLayout.ts b/packages/core/util/layouts/GranularRectLayout.ts index 565f7e3dc2..f59b5a299e 100644 --- a/packages/core/util/layouts/GranularRectLayout.ts +++ b/packages/core/util/layouts/GranularRectLayout.ts @@ -66,12 +66,22 @@ class LayoutRow { } getItemAt(x: number): Record | boolean | undefined { - if (this.allFilled) return this.allFilled - if (!this.rowState) return undefined + if (this.allFilled) { + return this.allFilled + } + if (!this.rowState) { + return undefined + } - if (this.rowState.min === undefined) return undefined - if (x < this.rowState.min) return undefined - if (x >= this.rowState.max) return undefined + if (this.rowState.min === undefined) { + return undefined + } + if (x < this.rowState.min) { + return undefined + } + if (x >= this.rowState.max) { + return undefined + } const offset = x - this.rowState.offset // if (offset < 0) // debugger @@ -81,13 +91,19 @@ class LayoutRow { } isRangeClear(left: number, right: number): boolean { - if (this.allFilled) return false + if (this.allFilled) { + return false + } - if (!this.rowState) return true + if (!this.rowState) { + return true + } const { min, max } = this.rowState - if (right <= min || left >= max) return true + if (right <= min || left >= max) { + return true + } // TODO: check right and middle before looping const maxX = Math.min(max, right) @@ -185,8 +201,12 @@ class LayoutRow { this.rowState.bits[x] = data } - if (left < this.rowState.min) this.rowState.min = left - if (right > this.rowState.max) this.rowState.max = right + if (left < this.rowState.min) { + this.rowState.min = left + } + if (right > this.rowState.max) { + this.rowState.max = right + } // // this.log(`added ${leftX} - ${rightX}`) } @@ -194,13 +214,19 @@ class LayoutRow { * Given a range of interbase coordinates, deletes all data dealing with that range */ discardRange(left: number, right: number): void { - if (this.allFilled) return // allFilled is irrevocable currently + if (this.allFilled) { + return + } // allFilled is irrevocable currently // if we have no data, do nothing - if (!this.rowState) return + if (!this.rowState) { + return + } // if doesn't overlap at all, do nothing - if (right <= this.rowState.min || left >= this.rowState.max) return + if (right <= this.rowState.min || left >= this.rowState.max) { + return + } // if completely encloses range, discard everything if (left <= this.rowState.min && right >= this.rowState.max) { @@ -352,7 +378,9 @@ export default class GranularRectLayout implements BaseLayout { // console.log(`${this.id} add ${id}`) const storedRec = this.rectangles.get(id) if (storedRec) { - if (storedRec.top === null) return null + if (storedRec.top === null) { + return null + } // add it to the bitmap again, since that bitmap range may have been discarded this.addRectToBitmap(storedRec) @@ -379,7 +407,9 @@ export default class GranularRectLayout implements BaseLayout { let top = 0 if (this.displayMode !== 'collapse') { for (; top <= maxTop; top += 1) { - if (!this.collides(rectangle, top)) break + if (!this.collides(rectangle, top)) { + break + } } if (top > maxTop) { @@ -433,7 +463,9 @@ export default class GranularRectLayout implements BaseLayout { } addRectToBitmap(rect: Rectangle): void { - if (rect.top === null) return + if (rect.top === null) { + return + } const data = rect.data || true const { bitmap } = this @@ -466,7 +498,9 @@ export default class GranularRectLayout implements BaseLayout { const { bitmap } = this for (let y = 0; y < bitmap.length; y += 1) { const row = bitmap[y] - if (row) row.discardRange(pLeft, pRight) + if (row) { + row.discardRange(pLeft, pRight) + } } } @@ -477,7 +511,9 @@ export default class GranularRectLayout implements BaseLayout { getByCoord(x: number, y: number): Record | boolean | undefined { const pY = Math.floor(y / this.pitchY) const row = this.bitmap[pY] - if (!row) return undefined + if (!row) { + return undefined + } const pX = Math.floor(x / this.pitchX) return row.getItemAt(pX) } diff --git a/packages/core/util/mst-reflection.js b/packages/core/util/mst-reflection.js index f8b9aa8d59..311e4abeb5 100644 --- a/packages/core/util/mst-reflection.js +++ b/packages/core/util/mst-reflection.js @@ -37,7 +37,9 @@ export function getSubType(type) { * @returns {Array} */ export function getUnionSubTypes(unionType) { - if (!isUnionType(unionType)) throw new TypeError('not an MST union type') + if (!isUnionType(unionType)) { + throw new TypeError('not an MST union type') + } const t = unionType._types || unionType.types || diff --git a/packages/core/util/offscreenCanvasPonyfill.js b/packages/core/util/offscreenCanvasPonyfill.js index a428af1808..a0c118fa59 100644 --- a/packages/core/util/offscreenCanvasPonyfill.js +++ b/packages/core/util/offscreenCanvasPonyfill.js @@ -1,6 +1,4 @@ -/* eslint-disable import/no-mutable-exports */ /* eslint-disable no-restricted-globals */ -/* eslint-disable prefer-destructuring */ import React from 'react' import Path from 'svg-path-generator' import Color from 'color' @@ -244,12 +242,16 @@ function parseFont(font) { if (!fontSize) { const parts = element.split('/') fontSize = parts[0] - if (parts.length > 1) lineHeight = parts[1] + if (parts.length > 1) { + lineHeight = parts[1] + } break } fontFamily = element - if (elements.length) fontFamily += ` ${elements.join(' ')}` + if (elements.length) { + fontFamily += ` ${elements.join(' ')}` + } break outer } } @@ -270,7 +272,9 @@ export class PonyfillOffscreenCanvas { } getContext(type) { - if (type !== '2d') throw new Error(`unknown type ${type}`) + if (type !== '2d') { + throw new Error(`unknown type ${type}`) + } this.context = new PonyfillOffscreenContext(this.width, this.height) return this.context } diff --git a/packages/core/util/simpleFeature.ts b/packages/core/util/simpleFeature.ts index 3ac63b8fc5..fec3ba716a 100644 --- a/packages/core/util/simpleFeature.ts +++ b/packages/core/util/simpleFeature.ts @@ -187,9 +187,13 @@ export default class SimpleFeature implements Feature { public toJSON(): SimpleFeatureSerialized { const d = { ...this.data, uniqueId: this.id() } as SimpleFeatureSerialized const p = this.parent() - if (p) d.parentId = p.id() + if (p) { + d.parentId = p.id() + } const c = this.children() - if (c) d.subfeatures = c.map(child => child.toJSON()) + if (c) { + d.subfeatures = c.map(child => child.toJSON()) + } return d } diff --git a/packages/core/util/stats.ts b/packages/core/util/stats.ts index 0955e77b6c..5656336af6 100644 --- a/packages/core/util/stats.ts +++ b/packages/core/util/stats.ts @@ -34,7 +34,9 @@ export function calcStdFromSums( n: number, population = false, ): number { - if (n === 0) return 0 + if (n === 0) { + return 0 + } let variance if (population) { variance = sumSquares / n - (sum * sum) / (n * n) diff --git a/packages/development-tools/index.js b/packages/development-tools/index.js index 9ea81b7448..3b04237bfb 100644 --- a/packages/development-tools/index.js +++ b/packages/development-tools/index.js @@ -11,7 +11,6 @@ function createJBrowsePluginTsdxConfig(config, options, globals) { try { require.resolve(id) return false - // eslint-disable-next-line no-empty } catch {} } } diff --git a/plugins/alignments/src/AlignmentsFeatureDetail/AlignmentsFeatureDetail.tsx b/plugins/alignments/src/AlignmentsFeatureDetail/AlignmentsFeatureDetail.tsx index de4e8f4684..5ff0731cf8 100644 --- a/plugins/alignments/src/AlignmentsFeatureDetail/AlignmentsFeatureDetail.tsx +++ b/plugins/alignments/src/AlignmentsFeatureDetail/AlignmentsFeatureDetail.tsx @@ -38,7 +38,6 @@ function AlignmentFlags(props: { feature: any }) {
{flags}
{flagNames.map((name, index) => { - // eslint-disable-next-line no-bitwise const val = flags & (1 << index) const key = `${name}_${val}` return ( diff --git a/plugins/alignments/src/BamAdapter/BamAdapter.ts b/plugins/alignments/src/BamAdapter/BamAdapter.ts index 0a04c8de0b..08cc792c5b 100644 --- a/plugins/alignments/src/BamAdapter/BamAdapter.ts +++ b/plugins/alignments/src/BamAdapter/BamAdapter.ts @@ -111,8 +111,12 @@ export default class BamAdapter extends BaseFeatureDataAdapter { private async seqFetch(refName: string, start: number, end: number) { const refSeqStore = this.sequenceAdapter - if (!refSeqStore) return undefined - if (!refName) return undefined + if (!refSeqStore) { + return undefined + } + if (!refName) { + return undefined + } const features = refSeqStore.getFeatures({ refName, @@ -169,7 +173,6 @@ export default class BamAdapter extends BaseFeatureDataAdapter { for (const record of records) { let ref: string | undefined if (!record.get('md')) { - // eslint-disable-next-line no-await-in-loop ref = await this.seqFetch( originalRefName || refName, record.get('start'), diff --git a/plugins/alignments/src/BamAdapter/MismatchParser.ts b/plugins/alignments/src/BamAdapter/MismatchParser.ts index e4b2bf9628..7fbe47198d 100644 --- a/plugins/alignments/src/BamAdapter/MismatchParser.ts +++ b/plugins/alignments/src/BamAdapter/MismatchParser.ts @@ -177,7 +177,9 @@ export function mdToMismatches( const s = cigarOps ? getTemplateCoordLocal(curr.start) : curr.start curr.base = seq ? seq.substr(s, 1) : 'X' const qualScore = qual?.slice(s, s + 1)[0] - if (qualScore) curr.qual = qualScore + if (qualScore) { + curr.qual = qualScore + } curr.altbase = token nextRecord() } diff --git a/plugins/alignments/src/CramAdapter/CramAdapter.ts b/plugins/alignments/src/CramAdapter/CramAdapter.ts index 39c7be7347..e1e191d63a 100644 --- a/plugins/alignments/src/CramAdapter/CramAdapter.ts +++ b/plugins/alignments/src/CramAdapter/CramAdapter.ts @@ -87,10 +87,14 @@ export class CramAdapter extends BaseFeatureDataAdapter { start -= 1 // convert from 1-based closed to interbase const refSeqStore = this.sequenceAdapter - if (!refSeqStore) return undefined + if (!refSeqStore) { + return undefined + } const refName = this.refIdToOriginalName(seqId) || this.refIdToName(seqId) // console.log(`CRAM seq ID ${seqId} -> ${refName}`) - if (!refName) return undefined + if (!refName) { + return undefined + } const features = refSeqStore.getFeatures( { diff --git a/plugins/alignments/src/CramAdapter/CramSlightlyLazyFeature.ts b/plugins/alignments/src/CramAdapter/CramSlightlyLazyFeature.ts index 8fa485d2bf..9f4d70b62f 100644 --- a/plugins/alignments/src/CramAdapter/CramSlightlyLazyFeature.ts +++ b/plugins/alignments/src/CramAdapter/CramSlightlyLazyFeature.ts @@ -174,28 +174,38 @@ export default class CramSlightlyLazyFeature implements Feature { } else if (code === 'D' || code === 'N') { // Deletion or Ref Skip last_pos += data - if (oplen) cigar += oplen + op + if (oplen) { + cigar += oplen + op + } cigar += data + code oplen = 0 } else if (code === 'I' || code === 'S') { // Insertion or soft-clip seq += data - if (oplen) cigar += oplen + op + if (oplen) { + cigar += oplen + op + } cigar += data.length + code oplen = 0 } else if (code === 'i') { // Single base insertion seq += data - if (oplen) cigar += oplen + op + if (oplen) { + cigar += oplen + op + } cigar += `${1}I` oplen = 0 } else if (code === 'P') { // Padding - if (oplen) cigar += oplen + op + if (oplen) { + cigar += oplen + op + } cigar += `${data}P` } else if (code === 'H') { // Hard clip - if (oplen) cigar += oplen + op + if (oplen) { + cigar += oplen + op + } cigar += `${data}H` oplen = 0 } // else q or Q @@ -242,7 +252,10 @@ export default class CramSlightlyLazyFeature implements Feature { get(field: string) { const methodName = `_get_${field}` // @ts-ignore - if (this[methodName]) return this[methodName]() + if (this[methodName]) { + // @ts-ignore + return this[methodName]() + } return undefined } @@ -296,7 +309,9 @@ export default class CramSlightlyLazyFeature implements Feature { _get_mismatches(): Mismatch[] { const readFeatures = this.get('cram_read_features') const qual = this.qualRaw() - if (!readFeatures) return [] + if (!readFeatures) { + return [] + } const start = this.get('start') const mismatches: Mismatch[] = [] readFeatures.forEach( diff --git a/plugins/alignments/src/CramAdapter/CramTestAdapters.ts b/plugins/alignments/src/CramAdapter/CramTestAdapters.ts index a6a8f6ec1f..ead84dbfad 100644 --- a/plugins/alignments/src/CramAdapter/CramTestAdapters.ts +++ b/plugins/alignments/src/CramAdapter/CramTestAdapters.ts @@ -33,7 +33,9 @@ export class FetchableSmallFasta { const data = await this.data const entry = data[id] const length = end - start + 1 - if (!entry) throw new Error(`no sequence with id ${id} exists`) + if (!entry) { + throw new Error(`no sequence with id ${id} exists`) + } return entry.sequence.substr(start - 1, length) } diff --git a/plugins/alignments/src/LinearAlignmentsDisplay/models/model.tsx b/plugins/alignments/src/LinearAlignmentsDisplay/models/model.tsx index a0be50261f..1f29071a80 100644 --- a/plugins/alignments/src/LinearAlignmentsDisplay/models/model.tsx +++ b/plugins/alignments/src/LinearAlignmentsDisplay/models/model.tsx @@ -137,8 +137,11 @@ const stateModelFactory = ( } }, setHeight(displayHeight: number) { - if (displayHeight > minDisplayHeight) self.height = displayHeight - else self.height = minDisplayHeight + if (displayHeight > minDisplayHeight) { + self.height = displayHeight + } else { + self.height = minDisplayHeight + } return self.height }, resizeHeight(distance: number) { diff --git a/plugins/alignments/src/LinearPileupDisplay/components/FilterByTag.tsx b/plugins/alignments/src/LinearPileupDisplay/components/FilterByTag.tsx index 588b5f7352..0902886c54 100644 --- a/plugins/alignments/src/LinearPileupDisplay/components/FilterByTag.tsx +++ b/plugins/alignments/src/LinearPileupDisplay/components/FilterByTag.tsx @@ -1,4 +1,3 @@ -/* eslint-disable no-bitwise */ import React, { useState } from 'react' import { observer } from 'mobx-react' import { diff --git a/plugins/alignments/src/NestedFrequencyTable.ts b/plugins/alignments/src/NestedFrequencyTable.ts index 78c502ca4e..8ce150237e 100644 --- a/plugins/alignments/src/NestedFrequencyTable.ts +++ b/plugins/alignments/src/NestedFrequencyTable.ts @@ -1,4 +1,4 @@ -/* eslint-disable guard-for-in,@typescript-eslint/no-explicit-any */ +/* eslint-disable @typescript-eslint/no-explicit-any */ // see perf results on object.keys vs for-in loop // https://jsperf.com/object-keys-vs-hasownproperty/55 export default class NestedFrequencyTable { diff --git a/plugins/alignments/src/PileupRenderer/PileupRenderer.tsx b/plugins/alignments/src/PileupRenderer/PileupRenderer.tsx index c725c55973..64f8f19f77 100644 --- a/plugins/alignments/src/PileupRenderer/PileupRenderer.tsx +++ b/plugins/alignments/src/PileupRenderer/PileupRenderer.tsx @@ -1,4 +1,3 @@ -/* eslint-disable no-bitwise */ import { AnyConfigurationModel } from '@jbrowse/core/configuration/configurationSchema' import BoxRendererType, { RenderArgs, @@ -593,7 +592,9 @@ export default class PileupRenderer extends BoxRendererType { // If softclip length+start is longer than sequence, no need to // continue showing base - if (!base) return + if (!base) { + return + } const [softClipLeftPx, softClipRightPx] = bpSpanPx( softClipStart + k, diff --git a/plugins/alignments/src/PileupRenderer/components/PileupRendering.tsx b/plugins/alignments/src/PileupRenderer/components/PileupRendering.tsx index 8af4fb9e08..2b4c38deef 100644 --- a/plugins/alignments/src/PileupRenderer/components/PileupRendering.tsx +++ b/plugins/alignments/src/PileupRenderer/components/PileupRendering.tsx @@ -41,9 +41,13 @@ function PileupRendering(props: { ) useEffect(() => { const canvas = highlightOverlayCanvas.current - if (!canvas) return + if (!canvas) { + return + } const ctx = canvas.getContext('2d') - if (!ctx) return + if (!ctx) { + return + } ctx.clearRect(0, 0, canvas.width, canvas.height) let rect let blockLayout @@ -177,11 +181,8 @@ function PileupRendering(props: {
{ const { layout: c1, feature: f1, level: level1 } = chunk[i] const level2 = level1 === 0 ? 1 : 0 const id = f1.id() - if (!c1) return null + if (!c1) { + return null + } const info = f1.get('INFO') const chr2 = info.CHR2[0] diff --git a/plugins/breakpoint-split-view/src/model.ts b/plugins/breakpoint-split-view/src/model.ts index aa2ba9280b..cb7017b776 100644 --- a/plugins/breakpoint-split-view/src/model.ts +++ b/plugins/breakpoint-split-view/src/model.ts @@ -1,4 +1,4 @@ -/* eslint-disable @typescript-eslint/no-explicit-any,no-bitwise */ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { MenuItem } from '@jbrowse/core/ui' import CompositeMap from '@jbrowse/core/util/compositeMap' import { LinearGenomeViewStateModel } from '@jbrowse/plugin-linear-genome-view' diff --git a/plugins/circular-view/src/BaseChordDisplay/components/BaseChordDisplay.tsx b/plugins/circular-view/src/BaseChordDisplay/components/BaseChordDisplay.tsx index 500125cfad..eaeaa7b26b 100644 --- a/plugins/circular-view/src/BaseChordDisplay/components/BaseChordDisplay.tsx +++ b/plugins/circular-view/src/BaseChordDisplay/components/BaseChordDisplay.tsx @@ -13,8 +13,12 @@ export default ({ lib, load }: PluginManager) => { // eslint-disable-next-line @typescript-eslint/no-explicit-any function BaseChordDisplay({ display }: any) { - if (display.error) return - if (!display.filled) return + if (display.error) { + return + } + if (!display.filled) { + return + } return } BaseChordDisplay.propTypes = { diff --git a/plugins/circular-view/src/BaseChordDisplay/components/RpcRenderedSvgGroup.js b/plugins/circular-view/src/BaseChordDisplay/components/RpcRenderedSvgGroup.js index e5d85dd3a6..f26b940763 100644 --- a/plugins/circular-view/src/BaseChordDisplay/components/RpcRenderedSvgGroup.js +++ b/plugins/circular-view/src/BaseChordDisplay/components/RpcRenderedSvgGroup.js @@ -25,14 +25,18 @@ export default ({ jbrequire }) => { // and hydration for when we have some free time. helps // keep the framerate up. rIC(() => { - if (!isAlive(model)) return + if (!isAlive(model)) { + return + } const mainThreadRendering = React.createElement( renderingComponent, { ...data, ...renderProps }, null, ) rIC(() => { - if (!isAlive(model)) return + if (!isAlive(model)) { + return + } hydrate(mainThreadRendering, domNode) }) }) diff --git a/plugins/circular-view/src/BaseChordDisplay/models/BaseChordDisplayModel.ts b/plugins/circular-view/src/BaseChordDisplay/models/BaseChordDisplayModel.ts index 42205d16c9..dcf1216792 100644 --- a/plugins/circular-view/src/BaseChordDisplay/models/BaseChordDisplayModel.ts +++ b/plugins/circular-view/src/BaseChordDisplay/models/BaseChordDisplayModel.ts @@ -55,7 +55,9 @@ export const BaseChordDisplayModel = types get blockDefinitions() { const origSlices = (getContainingView(self) as CircularViewModel) .staticSlices - if (!self.refNameMap) return origSlices + if (!self.refNameMap) { + return origSlices + } const slices = JSON.parse(JSON.stringify(origSlices)) @@ -117,9 +119,13 @@ export const BaseChordDisplayModel = types * is probably a feature */ get selectedFeatureId() { - if (!isAlive(self)) return undefined + if (!isAlive(self)) { + return undefined + } const session = getSession(self) - if (!session) return undefined + if (!session) { + return undefined + } const { selection } = session // does it quack like a feature? if (isFeature(selection)) { diff --git a/plugins/circular-view/src/CircularView/components/Ruler.js b/plugins/circular-view/src/CircularView/components/Ruler.js index ca2c0ae894..76044cf6bf 100644 --- a/plugins/circular-view/src/CircularView/components/Ruler.js +++ b/plugins/circular-view/src/CircularView/components/Ruler.js @@ -20,7 +20,9 @@ const useStyles = makeStyles({ function sliceArcPath(slice, radiusPx, startBase, endBase) { // A rx ry x-axis-rotation large-arc-flag sweep-flag x y - if (slice.flipped) [startBase, endBase] = [endBase, startBase] + if (slice.flipped) { + ;[startBase, endBase] = [endBase, startBase] + } const startXY = slice.bpToXY(startBase, radiusPx) const endXY = slice.bpToXY(endBase, radiusPx) const largeArc = @@ -89,7 +91,9 @@ const RulerLabel = observer( ({ view, text, maxWidthPx, radians, radiusPx, title, color }) => { const classes = useStyles() const textXY = polarToCartesian(radiusPx + 5, radians) - if (!text) return null + if (!text) { + return null + } if (text.length * 6.5 < maxWidthPx) { // text is rotated parallel to the ruler arc diff --git a/plugins/circular-view/src/CircularView/models/CircularView.ts b/plugins/circular-view/src/CircularView/models/CircularView.ts index 0e179245ca..c3aa53c81d 100644 --- a/plugins/circular-view/src/CircularView/models/CircularView.ts +++ b/plugins/circular-view/src/CircularView/models/CircularView.ts @@ -264,8 +264,11 @@ export default function CircularView(pluginManager: PluginManager) { const previouslyEmpty = self.displayedRegions.length === 0 self.displayedRegions = cast(regions) - if (previouslyEmpty) this.setBpPerPx(self.minBpPerPx) - else this.setBpPerPx(self.bpPerPx) + if (previouslyEmpty) { + this.setBpPerPx(self.minBpPerPx) + } else { + this.setBpPerPx(self.bpPerPx) + } }, activateTrackSelector() { diff --git a/plugins/circular-view/src/CircularView/models/viewportVisibleRegion.ts b/plugins/circular-view/src/CircularView/models/viewportVisibleRegion.ts index 9edcf6b0e6..85487e80d3 100644 --- a/plugins/circular-view/src/CircularView/models/viewportVisibleRegion.ts +++ b/plugins/circular-view/src/CircularView/models/viewportVisibleRegion.ts @@ -6,7 +6,9 @@ function findCircleIntersectionX( resultArray: [number, number][], ) { const d = Math.abs(y - cy) - if (d > r) return + if (d > r) { + return + } if (d === r) { resultArray.push([cx, y]) } @@ -23,7 +25,9 @@ function findCircleIntersectionY( resultArray: [number, number][], ) { const d = Math.abs(x - cx) - if (d > r) return + if (d > r) { + return + } if (d === r) { resultArray.push([x, cy]) } @@ -35,15 +39,20 @@ function findCircleIntersectionY( function cartesianToTheta(x: number, y: number) { let theta = (Math.atan(y / x) + 2 * Math.PI) % (2 * Math.PI) if (x < 0) { - if (y <= 0) theta += Math.PI - else theta -= Math.PI + if (y <= 0) { + theta += Math.PI + } else { + theta -= Math.PI + } } return theta } export function cartesianToPolar(x: number, y: number) { const rho = Math.sqrt(x * x + y * y) - if (rho === 0) return [0, 0] + if (rho === 0) { + return [0, 0] + } const theta = cartesianToTheta(x, y) return [rho, theta] } @@ -55,18 +64,26 @@ export function thetaRangesOverlap( r2start: number, r2length: number, ) { - if (r1length <= 0 || r2length <= 0) return false - if (r1length + 0.0001 >= twoPi || r2length + 0.0001 >= twoPi) return true + if (r1length <= 0 || r2length <= 0) { + return false + } + if (r1length + 0.0001 >= twoPi || r2length + 0.0001 >= twoPi) { + return true + } // put both range starts between 2Ï€ and 4Ï€ r1start = (((r1start % twoPi) + twoPi) % twoPi) + twoPi r2start = (((r2start % twoPi) + twoPi) % twoPi) + twoPi - if (r1start < r2start + r2length && r1start + r1length > r2start) return true + if (r1start < r2start + r2length && r1start + r1length > r2start) { + return true + } // move r2 2Ï€ to the left and check r2start -= twoPi - if (r1start < r2start + r2length && r1start + r1length > r2start) return true + if (r1start < r2start + r2length && r1start + r1length > r2start) { + return true + } // move it 2Ï€ to the right and check r2start += twoPi + twoPi @@ -102,7 +119,9 @@ export function viewportVisibleSection( for (let i = 0; i < vertices.length; i += 1) { const [x, y] = vertices[i] const rho = Math.sqrt(x * x + y * y) - if (rho > maxRho) maxRho = rho + if (rho > maxRho) { + maxRho = rho + } } return { rho: [0, Math.min(circleRadius, maxRho)], @@ -222,10 +241,18 @@ export function viewportVisibleSection( // ignore vertex if outside the circle if (rho <= circleRadius + 0.001) { // ignore theta if rho is 0 - if (theta < thetaMin && rho > 0.0001) thetaMin = theta - if (theta > thetaMax && rho > 0.0001) thetaMax = theta - if (rho < rhoMin) rhoMin = rho - if (rho > rhoMax) rhoMax = rho + if (theta < thetaMin && rho > 0.0001) { + thetaMin = theta + } + if (theta > thetaMax && rho > 0.0001) { + thetaMax = theta + } + if (rho < rhoMin) { + rhoMin = rho + } + if (rho > rhoMax) { + rhoMax = rho + } } } } diff --git a/plugins/config/src/ConfigurationEditorWidget/components/CallbackEditor.js b/plugins/config/src/ConfigurationEditorWidget/components/CallbackEditor.js index 89264640a2..3567c95932 100644 --- a/plugins/config/src/ConfigurationEditorWidget/components/CallbackEditor.js +++ b/plugins/config/src/ConfigurationEditorWidget/components/CallbackEditor.js @@ -108,7 +108,9 @@ function CallbackEditor({ slot }) { '_blank', 'noopener,noreferrer', ) - if (newWindow) newWindow.opener = null + if (newWindow) { + newWindow.opener = null + } }} > diff --git a/plugins/config/src/FromConfigAdapter/FromConfigRegionsAdapter.ts b/plugins/config/src/FromConfigAdapter/FromConfigRegionsAdapter.ts index 6c68aebe64..a719776219 100644 --- a/plugins/config/src/FromConfigAdapter/FromConfigRegionsAdapter.ts +++ b/plugins/config/src/FromConfigAdapter/FromConfigRegionsAdapter.ts @@ -49,7 +49,9 @@ export default class FromConfigRegionsAdapter ) { currentRegion.end = feature.get('end') } else { - if (currentRegion) regions.push(currentRegion) + if (currentRegion) { + regions.push(currentRegion) + } currentRegion = { refName, start: feature.get('start'), @@ -57,7 +59,9 @@ export default class FromConfigRegionsAdapter } } } - if (currentRegion) regions.push(currentRegion) + if (currentRegion) { + regions.push(currentRegion) + } } // sort the regions by refName diff --git a/plugins/config/src/FromConfigAdapter/FromConfigSequenceAdapter.ts b/plugins/config/src/FromConfigAdapter/FromConfigSequenceAdapter.ts index a5aff37d03..14502ea708 100644 --- a/plugins/config/src/FromConfigAdapter/FromConfigSequenceAdapter.ts +++ b/plugins/config/src/FromConfigAdapter/FromConfigSequenceAdapter.ts @@ -58,7 +58,9 @@ export default class FromSequenceConfigAdapter extends FromConfigAdapter { ) { currentRegion.end = feature.get('end') } else { - if (currentRegion) regions.push(currentRegion) + if (currentRegion) { + regions.push(currentRegion) + } currentRegion = { refName, start: feature.get('start'), @@ -66,7 +68,9 @@ export default class FromSequenceConfigAdapter extends FromConfigAdapter { } } } - if (currentRegion) regions.push(currentRegion) + if (currentRegion) { + regions.push(currentRegion) + } } // sort the regions by refName diff --git a/plugins/data-management/src/AddConnectionWidget/components/AddConnectionWidget.js b/plugins/data-management/src/AddConnectionWidget/components/AddConnectionWidget.js index 6ddcc52a88..545182f3be 100644 --- a/plugins/data-management/src/AddConnectionWidget/components/AddConnectionWidget.js +++ b/plugins/data-management/src/AddConnectionWidget/components/AddConnectionWidget.js @@ -77,8 +77,11 @@ function AddConnectionWidget({ model }) { } function handleNext() { - if (activeStep === steps.length - 1) handleFinish() - else setActiveStep(activeStep + 1) + if (activeStep === steps.length - 1) { + handleFinish() + } else { + setActiveStep(activeStep + 1) + } } function handleBack() { diff --git a/plugins/data-management/src/AddConnectionWidget/components/ConnectionTypeSelect.tsx b/plugins/data-management/src/AddConnectionWidget/components/ConnectionTypeSelect.tsx index dd8d15366a..7663c5984e 100644 --- a/plugins/data-management/src/AddConnectionWidget/components/ConnectionTypeSelect.tsx +++ b/plugins/data-management/src/AddConnectionWidget/components/ConnectionTypeSelect.tsx @@ -10,9 +10,6 @@ function ConnectionTypeSelect(props: { connectionTypeChoices: ConnectionType[] connectionType: ConnectionType setConnectionType: Function - assemblyNameChoices: string[] - assemblyName: string - setAssemblyName: Function }) { const { connectionTypeChoices, connectionType, setConnectionType } = props diff --git a/plugins/data-management/src/AddTrackWidget/model.ts b/plugins/data-management/src/AddTrackWidget/model.ts index d0d496a911..2fa472322b 100644 --- a/plugins/data-management/src/AddTrackWidget/model.ts +++ b/plugins/data-management/src/AddTrackWidget/model.ts @@ -10,7 +10,6 @@ import { function isAbsoluteUrl(url: string) { try { - // eslint-disable-next-line no-new new URL(url) return true } catch (error) { diff --git a/plugins/data-management/src/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.tsx b/plugins/data-management/src/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.tsx index 5a6f51ad35..d1732a0458 100644 --- a/plugins/data-management/src/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.tsx +++ b/plugins/data-management/src/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.tsx @@ -54,7 +54,9 @@ function CloseConnectionDialog({ onClick={ modalInfo ? () => { - if (safelyBreakConnection) safelyBreakConnection() + if (safelyBreakConnection) { + safelyBreakConnection() + } setModalInfo() } : () => {} diff --git a/plugins/data-management/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js b/plugins/data-management/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js index f53cfbba6e..c81c6ea735 100644 --- a/plugins/data-management/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +++ b/plugins/data-management/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js @@ -1,4 +1,4 @@ -/* eslint-disable react/prop-types,no-nested-ternary,jsx-a11y/no-static-element-interactions,jsx-a11y/click-events-have-key-events */ +/* eslint-disable react/prop-types */ import React, { Suspense, lazy, diff --git a/plugins/data-management/src/ucsc-trackhub/model.js b/plugins/data-management/src/ucsc-trackhub/model.js index 4268892535..6502674a68 100644 --- a/plugins/data-management/src/ucsc-trackhub/model.js +++ b/plugins/data-management/src/ucsc-trackhub/model.js @@ -13,7 +13,7 @@ import { generateTracks, } from './ucscTrackHub' -export default function (pluginManager) { +export default function UCSCTrackHubConnection(pluginManager) { return types.compose( 'UCSCTrackHubConnection', BaseConnectionModelFactory(pluginManager), diff --git a/plugins/data-management/src/ucsc-trackhub/ucscTrackHub.js b/plugins/data-management/src/ucsc-trackhub/ucscTrackHub.js index 959a1aa8ac..59a4812564 100644 --- a/plugins/data-management/src/ucsc-trackhub/ucscTrackHub.js +++ b/plugins/data-management/src/ucsc-trackhub/ucscTrackHub.js @@ -48,7 +48,9 @@ export function generateTracks( 'container', 'view', ] - if (trackKeys.some(key => parentTrackKeys.includes(key))) return + if (trackKeys.some(key => parentTrackKeys.includes(key))) { + return + } const parentTracks = [] let currentTrackName = trackName do { @@ -85,7 +87,9 @@ function makeTrackConfig( sequenceAdapter, ) { let trackType = track.get('type') - if (!trackType) trackType = trackDb.get(track.get('parent')).get('type') + if (!trackType) { + trackType = trackDb.get(track.get('parent')).get('type') + } let baseTrackType = trackType.split(' ')[0] if ( baseTrackType === 'bam' && @@ -98,7 +102,9 @@ function makeTrackConfig( bigDataLocation = { uri: new URL(track.get('bigDataUrl'), trackDbFileLocation.uri).href, } - } else bigDataLocation = { localPath: track.get('bigDataUrl') } + } else { + bigDataLocation = { localPath: track.get('bigDataUrl') } + } let bigDataIndexLocation switch (baseTrackType) { diff --git a/plugins/dotplot-view/src/DotplotDisplay/index.ts b/plugins/dotplot-view/src/DotplotDisplay/index.ts index a70b156f67..eb58bb85ff 100644 --- a/plugins/dotplot-view/src/DotplotDisplay/index.ts +++ b/plugins/dotplot-view/src/DotplotDisplay/index.ts @@ -117,7 +117,9 @@ export function stateModelFactory(configSchema: any) { reactElement: React.ReactElement renderingComponent: React.Component }) { - if (args === undefined) return + if (args === undefined) { + return + } const { data, reactElement, renderingComponent } = args self.filled = true self.message = undefined diff --git a/plugins/dotplot-view/src/DotplotRenderer/ComparativeRenderRpc.ts b/plugins/dotplot-view/src/DotplotRenderer/ComparativeRenderRpc.ts index 7806c1ed10..5aff6ad13b 100644 --- a/plugins/dotplot-view/src/DotplotRenderer/ComparativeRenderRpc.ts +++ b/plugins/dotplot-view/src/DotplotRenderer/ComparativeRenderRpc.ts @@ -64,7 +64,9 @@ export default class ComparativeRender extends RpcMethodType { ) } const { sessionId, adapterConfig, rendererType, signal } = deserializedArgs - if (!sessionId) throw new Error('must pass a unique session id') + if (!sessionId) { + throw new Error('must pass a unique session id') + } checkAbortSignal(signal) diff --git a/plugins/dotplot-view/src/DotplotView/components/DotplotView.tsx b/plugins/dotplot-view/src/DotplotView/components/DotplotView.tsx index 61857500ec..b398546fdd 100644 --- a/plugins/dotplot-view/src/DotplotView/components/DotplotView.tsx +++ b/plugins/dotplot-view/src/DotplotView/components/DotplotView.tsx @@ -134,7 +134,9 @@ export function chooseGridPitch( let majorPitch = 10 ** majorMagnitude while (majorPitch < minMajorPitchBp) { majorPitch *= 2 - if (majorPitch >= minMajorPitchBp) break + if (majorPitch >= minMajorPitchBp) { + break + } majorPitch *= 2.5 } diff --git a/plugins/dotplot-view/src/PAFAdapter/PAFAdapter.ts b/plugins/dotplot-view/src/PAFAdapter/PAFAdapter.ts index 4a6d9fc064..fdca0592b8 100644 --- a/plugins/dotplot-view/src/PAFAdapter/PAFAdapter.ts +++ b/plugins/dotplot-view/src/PAFAdapter/PAFAdapter.ts @@ -60,15 +60,11 @@ export default class PAFAdapter extends BaseFeatureDataAdapter { if (line.length) { const [ chr1, - // @ts-ignore - // eslint-disable-next-line @typescript-eslint/no-unused-vars queryRefSeqLen, start1, end1, strand, chr2, - // @ts-ignore - // eslint-disable-next-line @typescript-eslint/no-unused-vars targetRefSeqLen, start2, end2, diff --git a/plugins/dotplot-view/src/index.ts b/plugins/dotplot-view/src/index.ts index a804cf4178..3c6b8a5a31 100644 --- a/plugins/dotplot-view/src/index.ts +++ b/plugins/dotplot-view/src/index.ts @@ -235,11 +235,9 @@ export default class DotplotPlugin extends Plugin { // from SA[0]'s CIGAR which is the primary alignments. // otherwise it is the primary alignment just use seq.length if // primary alignment - const totalLength = - // eslint-disable-next-line no-bitwise - flags & 2048 - ? getLength(supplementaryAlignments[0].CIGAR) - : getLength(cigar) + const totalLength = getLength( + flags & 2048 ? supplementaryAlignments[0].CIGAR : cigar, + ) const features = [ feat, diff --git a/plugins/filtering/src/LinearFilteringDisplay/components/FilterControls.js b/plugins/filtering/src/LinearFilteringDisplay/components/FilterControls.js index ee5e94f684..79b949fb8d 100644 --- a/plugins/filtering/src/LinearFilteringDisplay/components/FilterControls.js +++ b/plugins/filtering/src/LinearFilteringDisplay/components/FilterControls.js @@ -95,7 +95,9 @@ class FilterControls extends Component { () => { const newSeenAttributes = {} getConf(model, 'filterAttributes').forEach(attrName => { - if (!newSeenAttributes[attrName]) newSeenAttributes[attrName] = {} + if (!newSeenAttributes[attrName]) { + newSeenAttributes[attrName] = {} + } visibleValues(model, attrName).forEach(value => { newSeenAttributes[attrName][value] = true }) diff --git a/plugins/filtering/src/LinearFilteringDisplay/model.js b/plugins/filtering/src/LinearFilteringDisplay/model.js index 8e51a9548b..09ab9ae06b 100644 --- a/plugins/filtering/src/LinearFilteringDisplay/model.js +++ b/plugins/filtering/src/LinearFilteringDisplay/model.js @@ -60,8 +60,12 @@ export default configSchema => { if (newHeight > self.filterControlsMinHeight) { if (newHeight < self.filterControlsMaxHeight) { self.filterControlsHeight = newHeight - } else self.filterControlsHeight = self.filterControlsMaxHeight - } else self.filterControlsHeight = self.filterControlsMinHeight + } else { + self.filterControlsHeight = self.filterControlsMaxHeight + } + } else { + self.filterControlsHeight = self.filterControlsMinHeight + } return self.filterControlsHeight }, resizeFilterControls(distance) { @@ -72,7 +76,9 @@ export default configSchema => { return oldHeight - newHeight }, toggleFilter(attrName, value, checked) { - if (!self.filterOut.has(attrName)) self.filterOut.set(attrName, {}) + if (!self.filterOut.has(attrName)) { + self.filterOut.set(attrName, {}) + } const values = self.filterOut.get(attrName) values.set(String(value), !checked) }, diff --git a/plugins/hic/src/HicRenderer/HicRenderer.tsx b/plugins/hic/src/HicRenderer/HicRenderer.tsx index 67e6c57adf..63fcb71a3d 100644 --- a/plugins/hic/src/HicRenderer/HicRenderer.tsx +++ b/plugins/hic/src/HicRenderer/HicRenderer.tsx @@ -83,7 +83,6 @@ export default class HicRenderer extends ServerSideRendererType { }) ctx.fillRect((bin1 - offset) * w, (bin2 - offset) * w, w, w) if (+Date.now() - start > 400) { - // eslint-disable-next-line no-await-in-loop await abortBreakPoint(signal) start = +Date.now() } diff --git a/plugins/legacy-jbrowse/src/JBrowse1Connection/jb1ConfigLoad.ts b/plugins/legacy-jbrowse/src/JBrowse1Connection/jb1ConfigLoad.ts index f3b33a6b48..845d8d7a3a 100644 --- a/plugins/legacy-jbrowse/src/JBrowse1Connection/jb1ConfigLoad.ts +++ b/plugins/legacy-jbrowse/src/JBrowse1Connection/jb1ConfigLoad.ts @@ -30,8 +30,12 @@ export async function fetchJb1( const protocol = 'uri' in dataRoot ? 'uri' : 'localPath' const dataRootReg = JSON.parse(JSON.stringify(dataRoot)) let dataRootLocation = '' - if (isUriLocation(dataRoot)) dataRootLocation = dataRoot.uri - if (isLocalPathLocation(dataRoot)) dataRootLocation = dataRoot.localPath + if (isUriLocation(dataRoot)) { + dataRootLocation = dataRoot.uri + } + if (isLocalPathLocation(dataRoot)) { + dataRootLocation = dataRoot.localPath + } if (dataRootLocation.endsWith('/')) { dataRootReg[protocol] = dataRootLocation.slice( 0, @@ -44,7 +48,9 @@ export async function fetchJb1( ) { const baseProtocol = 'uri' in baseConfigRoot ? 'uri' : 'localPath' let baseConfigLocation = '' - if (isUriLocation(baseConfigRoot)) baseConfigLocation = baseConfigRoot.uri + if (isUriLocation(baseConfigRoot)) { + baseConfigLocation = baseConfigRoot.uri + } if (isLocalPathLocation(baseConfigRoot)) { baseConfigLocation = baseConfigRoot.localPath } @@ -59,7 +65,6 @@ export async function fetchJb1( let fetchedConfig = null try { // @ts-ignore - // eslint-disable-next-line no-await-in-loop fetchedConfig = await fetchConfigFile({ [baseProtocol]: `${baseConfigLocation}/${conf}`, }) @@ -70,11 +75,15 @@ export async function fetchJb1( } newConfig = mergeConfigs(newConfig, fetchedConfig) || {} } - if (dataRootReg[protocol]) newConfig.dataRoot = dataRootReg[protocol] + if (dataRootReg[protocol]) { + newConfig.dataRoot = dataRootReg[protocol] + } return createFinalConfig(newConfig) } const newConfig = regularizeConf(baseConfig, window.location.href) - if (dataRootReg[protocol]) newConfig.dataRoot = dataRootReg[protocol] + if (dataRootReg[protocol]) { + newConfig.dataRoot = dataRootReg[protocol] + } return createFinalConfig(newConfig) } @@ -95,13 +104,19 @@ export async function fetchConfigFile(location: JBLocation): Promise { if (typeof result !== 'string') { throw new Error(`Error opening location: ${location}`) } - if (isUriLocation(location)) return parseJb1(result, location.uri) - if (isLocalPathLocation(location)) return parseJb1(result, location.localPath) + if (isUriLocation(location)) { + return parseJb1(result, location.uri) + } + if (isLocalPathLocation(location)) { + return parseJb1(result, location.localPath) + } return parseJb1(result) } export function parseJb1(config: string, url = ''): Config { - if (config.trim().startsWith('{')) return parseJB1Json(config, url) + if (config.trim().startsWith('{')) { + return parseJB1Json(config, url) + } return parseJB1Conf(config, url) } @@ -109,9 +124,13 @@ export function parseJb1(config: string, url = ''): Config { * Merges config object b into a. Properties in b override those in a. */ function mergeConfigs(a: Config | null, b: Config | null): Config | null { - if (b === null) return null + if (b === null) { + return null + } - if (a === null) a = {} + if (a === null) { + a = {} + } for (const prop of Object.keys(b)) { if (prop === 'tracks' && prop in a) { @@ -154,7 +173,9 @@ function mergeConfigs(a: Config | null, b: Config | null): Config | null { * Special-case merging of two `tracks` configuration arrays. */ function mergeTrackConfigs(a: Track[], b: Track[]): Track[] { - if (!b.length) return a + if (!b.length) { + return a + } // index the tracks in `a` by track label const aTracks: Record = {} @@ -194,7 +215,9 @@ async function loadIncludes(inputConfig: Config): Promise { ) } const newUpstreamConf = mergeConfigs(clone(upstreamConf), config) - if (!newUpstreamConf) throw new Error('Problem merging configs') + if (!newUpstreamConf) { + throw new Error('Problem merging configs') + } const includes = fillTemplates( regularizeIncludes(config.include || []), newUpstreamConf, @@ -223,15 +246,21 @@ async function loadIncludes(inputConfig: Config): Promise { function regularizeIncludes( includes: Include | string | (Include | string)[] | null, ): Include[] { - if (!includes) return [] + if (!includes) { + return [] + } // coerce include to an array - if (!Array.isArray(includes)) includes = [includes] + if (!Array.isArray(includes)) { + includes = [includes] + } return includes.map( (include): Include => { // coerce bare strings in the includes to URLs - if (typeof include === 'string') include = { url: include } + if (typeof include === 'string') { + include = { url: include } + } // set defaults for format and version if (!('format' in include)) { @@ -313,7 +342,9 @@ const configDefaults = { * @returns nothing meaningful */ function validateConfig(config: Config): void { - if (!config.tracks) config.tracks = [] + if (!config.tracks) { + config.tracks = [] + } if (!config.baseUrl) { throw new Error('Must provide a `baseUrl` in configuration') } diff --git a/plugins/legacy-jbrowse/src/JBrowse1Connection/jb1ConfigParse.ts b/plugins/legacy-jbrowse/src/JBrowse1Connection/jb1ConfigParse.ts index 0af0b0850c..5a8da61265 100644 --- a/plugins/legacy-jbrowse/src/JBrowse1Connection/jb1ConfigParse.ts +++ b/plugins/legacy-jbrowse/src/JBrowse1Connection/jb1ConfigParse.ts @@ -28,7 +28,9 @@ export function parseJB1Conf(config: string, url: string): Config { } function isAlwaysArray(varName: string): boolean { - if (varName === 'include') return true + if (varName === 'include') { + return true + } return false } @@ -52,11 +54,15 @@ function parse(text: string, url: string): Config { try { // parse json const match = value.match(/^json:(.+)/i) - if (match) parsedValue = JSON.parse(match[1]) + if (match) { + parsedValue = JSON.parse(match[1]) + } // parse numbers if it looks numeric else if (/^[+-]?[\d.,]+([eE][-+]?\d+)?$/.test(value)) { parsedValue = parseFloat(value.replace(/,/g, '')) - } else parsedValue = value + } else { + parsedValue = value + } if (!keyPath) { throw new Error(`Error parsing in section ${section.join(' - ')}`) @@ -65,14 +71,22 @@ function parse(text: string, url: string): Config { if (operation === '+=') { let existing = getValue(data, path) if (existing) { - if (!Array.isArray(existing)) existing = [existing] - } else existing = [] + if (!Array.isArray(existing)) { + existing = [existing] + } + } else { + existing = [] + } existing.push(parsedValue) parsedValue = existing } - if (parsedValue === 'true') parsedValue = true - if (parsedValue === 'false') parsedValue = false + if (parsedValue === 'true') { + parsedValue = true + } + if (parsedValue === 'false') { + parsedValue = false + } setValue(data, path, parsedValue) } catch (e) { throw new Error( @@ -151,14 +165,19 @@ export function regularizeConf(conf: Config, url: string): Config { // if tracks is not an array, convert it to one if (conf.tracks && !Array.isArray(conf.tracks)) { // if it's a single track config, wrap it in an arrayref - if (isTrack(conf.tracks)) conf.tracks = [conf.tracks] + if (isTrack(conf.tracks)) { + conf.tracks = [conf.tracks] + } // otherwise, coerce it to an array else { const tracks: Track[] = [] for (const label of Object.keys(conf.tracks)) { const track = conf.tracks[label] - if (isTrack(track)) tracks.push(track) - else tracks.push({ label, ...track }) + if (isTrack(track)) { + tracks.push(track) + } else { + tracks.push({ label, ...track }) + } } conf.tracks = tracks } @@ -168,14 +187,20 @@ export function regularizeConf(conf: Config, url: string): Config { const meta = conf.trackMetadata if (meta && meta.sources) { // if it's a single source config, wrap it in an arrayref - if (typeof meta.sources === 'string') meta.sources = [meta.sources] - if (isSource(meta.sources)) meta.sources = [meta.sources] + if (typeof meta.sources === 'string') { + meta.sources = [meta.sources] + } + if (isSource(meta.sources)) { + meta.sources = [meta.sources] + } if (!Array.isArray(meta.sources)) { const sources: Source[] = [] for (const name of Object.keys(meta.sources)) { const source = meta.sources[name] - if (!('name' in source)) source.name = name + if (!('name' in source)) { + source.name = name + } sources.push(source) } meta.sources = sources @@ -187,7 +212,9 @@ export function regularizeConf(conf: Config, url: string): Config { if (typeof sourceDef === 'string') { const newSourceDef: Source = { url: sourceDef } const typeMatch = sourceDef.match(/\.(\w+)$/) - if (typeMatch) newSourceDef.type = typeMatch[1].toLowerCase() + if (typeMatch) { + newSourceDef.type = typeMatch[1].toLowerCase() + } return newSourceDef } return sourceDef @@ -200,25 +227,37 @@ export function regularizeConf(conf: Config, url: string): Config { conf.sourceUrl = new URL(conf.sourceUrl, window.location.href).href } conf.baseUrl = conf.baseUrl || new URL('.', conf.sourceUrl).href - if (conf.baseUrl.length && !conf.baseUrl.endsWith('/')) conf.baseUrl += '/' + if (conf.baseUrl.length && !conf.baseUrl.endsWith('/')) { + conf.baseUrl += '/' + } if (conf.sourceUrl) { // set a default baseUrl in each of the track and store confs, and the names // conf, if needed const addBase: (Track | Store | Names)[] = [] - if (conf.tracks) addBase.push(...conf.tracks) - if (conf.stores) addBase.push(...Object.values(conf.stores)) - if (conf.names) addBase.push(conf.names) + if (conf.tracks) { + addBase.push(...conf.tracks) + } + if (conf.stores) { + addBase.push(...Object.values(conf.stores)) + } + if (conf.names) { + addBase.push(conf.names) + } addBase.forEach((t): void => { - if (!t.baseUrl) t.baseUrl = conf.baseUrl || '/' + if (!t.baseUrl) { + t.baseUrl = conf.baseUrl || '/' + } }) // resolve the refSeqs and nameUrl if present if (conf.refSeqs && typeof conf.refSeqs === 'string') { conf.refSeqs = new URL(conf.refSeqs, conf.sourceUrl).href } - if (conf.nameUrl) conf.nameUrl = new URL(conf.nameUrl, conf.sourceUrl).href + if (conf.nameUrl) { + conf.nameUrl = new URL(conf.nameUrl, conf.sourceUrl).href + } } conf.stores = conf.stores || {} @@ -232,7 +271,9 @@ export function regularizeConf(conf: Config, url: string): Config { } // skip if it's a new-style track def - if (trackConfig.store) return + if (trackConfig.store) { + return + } let trackClassName: string if (trackConfig.type === 'FeatureTrack') { @@ -268,8 +309,12 @@ export function regularizeConf(conf: Config, url: string): Config { * @param className - class name */ function regularizeClass(root: string, className: string | undefined): string { - if (!className) return '' - if (!className.includes('/')) className = `${root}/${className}` + if (!className) { + return '' + } + if (!className.includes('/')) { + className = `${root}/${className}` + } className = className.replace(/^\//, '') return className } @@ -278,7 +323,9 @@ function guessStoreClass( trackConfig: Track | undefined, urlTemplate: string, ): string { - if (!trackConfig) return '' + if (!trackConfig) { + return '' + } if (trackConfig.type && trackConfig.type.includes('/FixedImage')) { return `JBrowse/Store/TiledImage/Fixed${ trackConfig.backendVersion === 0 ? '_v0' : '' @@ -289,10 +336,18 @@ function guessStoreClass( trackConfig.backendVersion === 0 ? '_v0' : '' }` } - if (/\.bam$/i.test(urlTemplate)) return 'JBrowse/Store/SeqFeature/BAM' - if (/\.cram$/i.test(urlTemplate)) return 'JBrowse/Store/SeqFeature/CRAM' - if (/\.gff3?$/i.test(urlTemplate)) return 'JBrowse/Store/SeqFeature/GFF3' - if (/\.bed$/i.test(urlTemplate)) return 'JBrowse/Store/SeqFeature/BED' + if (/\.bam$/i.test(urlTemplate)) { + return 'JBrowse/Store/SeqFeature/BAM' + } + if (/\.cram$/i.test(urlTemplate)) { + return 'JBrowse/Store/SeqFeature/CRAM' + } + if (/\.gff3?$/i.test(urlTemplate)) { + return 'JBrowse/Store/SeqFeature/GFF3' + } + if (/\.bed$/i.test(urlTemplate)) { + return 'JBrowse/Store/SeqFeature/BED' + } if (/\.vcf.b?gz$/i.test(urlTemplate)) { return 'JBrowse/Store/SeqFeature/VCFTabix' } @@ -314,7 +369,9 @@ function guessStoreClass( if (/\.(fa|fasta)\.b?gz$/i.test(urlTemplate)) { return 'JBrowse/Store/SeqFeature/BgzipIndexedFasta' } - if (/\.2bit$/i.test(urlTemplate)) return 'JBrowse/Store/SeqFeature/TwoBit' + if (/\.2bit$/i.test(urlTemplate)) { + return 'JBrowse/Store/SeqFeature/TwoBit' + } if (trackConfig.type && trackConfig.type.endsWith('/Sequence')) { return 'JBrowse/Store/Sequence/StaticChunked' } @@ -332,7 +389,9 @@ function synthesizeTrackStoreConfig( let storeClass: string if (trackConfig.storeClass) { storeClass = regularizeClass('JBrowse/Store', trackConfig.storeClass) - } else storeClass = guessStoreClass(trackConfig, urlTemplate) + } else { + storeClass = guessStoreClass(trackConfig, urlTemplate) + } if (!storeClass) { console.warn( @@ -361,7 +420,9 @@ function synthesizeTrackStoreConfig( storeConf.name = `store${objectFingerprint(storeConf)}` } // record it - if (!mainConf.stores) mainConf.stores = {} + if (!mainConf.stores) { + mainConf.stores = {} + } mainConf.stores[storeConf.name] = storeConf // connect it to the track conf diff --git a/plugins/legacy-jbrowse/src/JBrowse1Connection/jb1ToJb2.ts b/plugins/legacy-jbrowse/src/JBrowse1Connection/jb1ToJb2.ts index 4e8f7c37db..6abc2e1c47 100644 --- a/plugins/legacy-jbrowse/src/JBrowse1Connection/jb1ToJb2.ts +++ b/plugins/legacy-jbrowse/src/JBrowse1Connection/jb1ToJb2.ts @@ -66,7 +66,9 @@ export function convertTrackConfig( const description = jb1TrackConfig.metadata && (jb1TrackConfig.metadata.description || jb1TrackConfig.metadata.Description) - if (description) jb2TrackConfig.description = description + if (description) { + jb2TrackConfig.description = description + } const category = jb1TrackConfig.category || @@ -111,7 +113,9 @@ export function convertTrackConfig( location: { uri: resolveUrlTemplate(jb1TrackConfig.csiUrlTemplate) }, indexType: 'CSI', } - } else adapter.index = { location: { uri: `${urlTemplate}.bai` } } + } else { + adapter.index = { location: { uri: `${urlTemplate}.bai` } } + } return { ...jb2TrackConfig, type: 'AlignmentsTrack', @@ -128,7 +132,9 @@ export function convertTrackConfig( adapter.craiLocation = { uri: resolveUrlTemplate(jb1TrackConfig.craiUrlTemplate), } - } else adapter.craiLocation = { uri: `${urlTemplate}.crai` } + } else { + adapter.craiLocation = { uri: `${urlTemplate}.crai` } + } return { ...jb2TrackConfig, type: 'AlignmentsTrack', @@ -180,7 +186,9 @@ export function convertTrackConfig( location: { uri: resolveUrlTemplate(jb1TrackConfig.csiUrlTemplate) }, indexType: 'CSI', } - } else adapter.index = { location: { uri: `${urlTemplate}.tbi` } } + } else { + adapter.index = { location: { uri: `${urlTemplate}.tbi` } } + } return { ...jb2TrackConfig, type: 'VariantTrack', @@ -225,7 +233,9 @@ export function convertTrackConfig( location: { uri: resolveUrlTemplate(jb1TrackConfig.csiUrlTemplate) }, indexType: 'CSI', } - } else adapter.index = { location: { uri: `${urlTemplate}.tbi` } } + } else { + adapter.index = { location: { uri: `${urlTemplate}.tbi` } } + } return { ...jb2TrackConfig, type: 'FeatureTrack', @@ -253,7 +263,9 @@ export function convertTrackConfig( location: { uri: resolveUrlTemplate(jb1TrackConfig.csiUrlTemplate) }, indexType: 'CSI', } - } else adapter.index = { location: { uri: `${urlTemplate}.tbi` } } + } else { + adapter.index = { location: { uri: `${urlTemplate}.tbi` } } + } return { ...jb2TrackConfig, type: 'FeatureTrack', @@ -293,7 +305,9 @@ export function convertTrackConfig( adapter.faiLocation = { uri: resolveUrlTemplate(jb1TrackConfig.faiUrlTemplate), } - } else adapter.faiLocation = { uri: `${urlTemplate}.fai` } + } else { + adapter.faiLocation = { uri: `${urlTemplate}.fai` } + } return { ...jb2TrackConfig, type: 'SequenceTrack', @@ -309,12 +323,16 @@ export function convertTrackConfig( adapter.faiLocation = { uri: resolveUrlTemplate(jb1TrackConfig.faiUrlTemplate), } - } else adapter.faiLocation = { uri: `${urlTemplate}.fai` } + } else { + adapter.faiLocation = { uri: `${urlTemplate}.fai` } + } if (jb1TrackConfig.gziUrlTemplate) { adapter.gziLocation = { uri: resolveUrlTemplate(jb1TrackConfig.gziUrlTemplate), } - } else adapter.gziLocation = { uri: `${urlTemplate}.gzi` } + } else { + adapter.gziLocation = { uri: `${urlTemplate}.gzi` } + } return { ...jb2TrackConfig, type: 'ReferenceSequenceTrack', diff --git a/plugins/legacy-jbrowse/src/JBrowse1Connection/util.ts b/plugins/legacy-jbrowse/src/JBrowse1Connection/util.ts index 928cbe41bc..1c55c4014a 100644 --- a/plugins/legacy-jbrowse/src/JBrowse1Connection/util.ts +++ b/plugins/legacy-jbrowse/src/JBrowse1Connection/util.ts @@ -67,13 +67,17 @@ export function fillTemplate( varName = varName.replace(/\s+/g, '') // remove all whitespace const fill = getValue(fillWith, varName) if (fill !== undefined) { - if (typeof fill === 'function') return fill(varName) + if (typeof fill === 'function') { + return fill(varName) + } return fill } if (fillWith.callback) { // @ts-ignore const v = fillWith.callback.call(this, varName) - if (v !== undefined) return v + if (v !== undefined) { + return v + } } return match }, @@ -158,7 +162,6 @@ function mixin( let name let s const empty = {} - // eslint-disable-next-line guard-for-in for (name in source) { // the (!(name in empty) || empty[name] !== s) condition avoids copying // properties in "source" inherited from Object.prototype. For example, diff --git a/plugins/linear-comparative-view/src/BreakpointSplitRenderer/BreakpointSplitRenderer.ts b/plugins/linear-comparative-view/src/BreakpointSplitRenderer/BreakpointSplitRenderer.ts index ea8ad4f2aa..4a8c240adc 100644 --- a/plugins/linear-comparative-view/src/BreakpointSplitRenderer/BreakpointSplitRenderer.ts +++ b/plugins/linear-comparative-view/src/BreakpointSplitRenderer/BreakpointSplitRenderer.ts @@ -1,4 +1,4 @@ -/* eslint-disable no-continue,@typescript-eslint/no-explicit-any */ +/* eslint-disable @typescript-eslint/no-explicit-any */ import ComparativeServerSideRendererType, { RenderArgsDeserialized as ComparativeRenderArgsDeserialized, } from '@jbrowse/core/pluggableElementTypes/renderers/ComparativeServerSideRendererType' diff --git a/plugins/linear-comparative-view/src/BreakpointSplitRenderer/components/BreakpointSplitRendering.tsx b/plugins/linear-comparative-view/src/BreakpointSplitRenderer/components/BreakpointSplitRendering.tsx index 3474259fc9..e195e459a3 100644 --- a/plugins/linear-comparative-view/src/BreakpointSplitRenderer/components/BreakpointSplitRendering.tsx +++ b/plugins/linear-comparative-view/src/BreakpointSplitRenderer/components/BreakpointSplitRendering.tsx @@ -1,4 +1,3 @@ -/* eslint-disable react/require-default-props */ import React, { useRef, useEffect } from 'react' import { getParent, isStateTreeNode } from 'mobx-state-tree' import { observer, PropTypes } from 'mobx-react' diff --git a/plugins/linear-comparative-view/src/BreakpointSplitView/index.ts b/plugins/linear-comparative-view/src/BreakpointSplitView/index.ts index 930e5bb09e..e50ff18c32 100644 --- a/plugins/linear-comparative-view/src/BreakpointSplitView/index.ts +++ b/plugins/linear-comparative-view/src/BreakpointSplitView/index.ts @@ -30,7 +30,9 @@ export default ({ lib, load }: PluginManager) => { // TODO: Figure this out for multiple assembly names const { assemblyName } = view.displayedRegions[0] const assembly = getSession(view).assemblyManager.get(assemblyName) - if (!assembly) throw new Error('assembly not yet loaded') + if (!assembly) { + throw new Error('assembly not yet loaded') + } const { getCanonicalRefName } = assembly const featureRefName = getCanonicalRefName(feature.get('refName')) @@ -52,8 +54,12 @@ export default ({ lib, load }: PluginManager) => { const matePosition = breakendSpecification.MatePosition.split(':') endPos = parseInt(matePosition[1], 10) - 1 mateRefName = getCanonicalRefName(matePosition[0]) - if (breakendSpecification.Join === 'left') startMod = -1 - if (breakendSpecification.MateDirection === 'left') endMod = -1 + if (breakendSpecification.Join === 'left') { + startMod = -1 + } + if (breakendSpecification.MateDirection === 'left') { + endMod = -1 + } } // if (breakendSpecification.Join === 'left') { diff --git a/plugins/linear-comparative-view/src/LinearSyntenyRenderer/components/LinearSyntenyRendering.tsx b/plugins/linear-comparative-view/src/LinearSyntenyRenderer/components/LinearSyntenyRendering.tsx index 4dcb5038fd..ed94e775bf 100644 --- a/plugins/linear-comparative-view/src/LinearSyntenyRenderer/components/LinearSyntenyRendering.tsx +++ b/plugins/linear-comparative-view/src/LinearSyntenyRenderer/components/LinearSyntenyRendering.tsx @@ -1,4 +1,3 @@ -/* eslint-disable no-continue */ import React, { useRef, useMemo, useEffect } from 'react' import { observer } from 'mobx-react' import { isAlive } from 'mobx-state-tree' diff --git a/plugins/linear-comparative-view/src/index.tsx b/plugins/linear-comparative-view/src/index.tsx index 5b42da01e6..671134348b 100644 --- a/plugins/linear-comparative-view/src/index.tsx +++ b/plugins/linear-comparative-view/src/index.tsx @@ -1,4 +1,4 @@ -/* eslint-disable @typescript-eslint/no-explicit-any,no-bitwise */ +/* eslint-disable @typescript-eslint/no-explicit-any */ import React, { useEffect, useState } from 'react' import { makeStyles } from '@material-ui/core/styles' import { @@ -159,7 +159,6 @@ function getTag(f: Feature, tag: string) { } function WindowSizeDlg(props: { - display: any feature: Feature handleClose: () => void track: any diff --git a/plugins/linear-genome-view/src/BaseLinearDisplay/models/BaseLinearDisplayModel.tsx b/plugins/linear-genome-view/src/BaseLinearDisplay/models/BaseLinearDisplayModel.tsx index 177b11218a..62511e25e9 100644 --- a/plugins/linear-genome-view/src/BaseLinearDisplay/models/BaseLinearDisplayModel.tsx +++ b/plugins/linear-genome-view/src/BaseLinearDisplay/models/BaseLinearDisplayModel.tsx @@ -127,7 +127,9 @@ export const BaseLinearDisplay = types get features() { const featureMaps = [] for (const block of self.blockState.values()) { - if (block && block.features) featureMaps.push(block.features) + if (block && block.features) { + featureMaps.push(block.features) + } } stale = true return new CompositeMap(featureMaps) @@ -219,7 +221,9 @@ export const BaseLinearDisplay = types }) // delete any blocks we need go delete self.blockState.forEach((_, key) => { - if (!blocksPresent[key]) this.deleteBlock(key) + if (!blocksPresent[key]) { + this.deleteBlock(key) + } }) } }) @@ -227,8 +231,11 @@ export const BaseLinearDisplay = types addDisposer(self, blockWatchDisposer) }, setHeight(displayHeight: number) { - if (displayHeight > minDisplayHeight) self.height = displayHeight - else self.height = minDisplayHeight + if (displayHeight > minDisplayHeight) { + self.height = displayHeight + } else { + self.height = minDisplayHeight + } return self.height }, resizeHeight(distance: number) { diff --git a/plugins/linear-genome-view/src/LinearGenomeView/components/ExportSvgDialog.tsx b/plugins/linear-genome-view/src/LinearGenomeView/components/ExportSvgDialog.tsx index 804f563d12..f2cbf66e24 100644 --- a/plugins/linear-genome-view/src/LinearGenomeView/components/ExportSvgDialog.tsx +++ b/plugins/linear-genome-view/src/LinearGenomeView/components/ExportSvgDialog.tsx @@ -1,4 +1,3 @@ -/* eslint-disable no-nested-ternary */ import React, { useState } from 'react' import { makeStyles } from '@material-ui/core/styles' import { diff --git a/plugins/linear-genome-view/src/LinearGenomeView/components/ImportForm.tsx b/plugins/linear-genome-view/src/LinearGenomeView/components/ImportForm.tsx index bbfcc02e34..992cdc5516 100644 --- a/plugins/linear-genome-view/src/LinearGenomeView/components/ImportForm.tsx +++ b/plugins/linear-genome-view/src/LinearGenomeView/components/ImportForm.tsx @@ -1,4 +1,3 @@ -/* eslint-disable no-nested-ternary */ import React, { useState, useEffect } from 'react' import { observer } from 'mobx-react' import { getSnapshot } from 'mobx-state-tree' diff --git a/plugins/linear-genome-view/src/LinearGenomeView/components/Ruler.tsx b/plugins/linear-genome-view/src/LinearGenomeView/components/Ruler.tsx index 8fa5b6c74f..8fc62d6594 100644 --- a/plugins/linear-genome-view/src/LinearGenomeView/components/Ruler.tsx +++ b/plugins/linear-genome-view/src/LinearGenomeView/components/Ruler.tsx @@ -8,7 +8,6 @@ function mathPower(num: number): string { if (num < 999) { return String(num) } - // eslint-disable-next-line no-bitwise return `${mathPower(~~(num / 1000))},${`00${~~(num % 1000)}`.substr(-3, 3)}` } diff --git a/plugins/linear-genome-view/src/LinearGenomeView/index.tsx b/plugins/linear-genome-view/src/LinearGenomeView/index.tsx index 2995733418..a5cf8bd45e 100644 --- a/plugins/linear-genome-view/src/LinearGenomeView/index.tsx +++ b/plugins/linear-genome-view/src/LinearGenomeView/index.tsx @@ -605,7 +605,9 @@ export function stateModelFactory(pluginManager: PluginManager) { const parent = getContainingView(self) if (parent) { // I am embedded in a some other view - if (isViewContainer(parent)) parent.removeView(self) + if (isViewContainer(parent)) { + parent.removeView(self) + } } else { // I am part of a session getSession(self).removeView(self) @@ -942,7 +944,9 @@ export function stateModelFactory(pluginManager: PluginManager) { * @param rightPx- `object as {start, end, index, offset}`, offset = end of user drag */ zoomToDisplayedRegions(leftPx: BpOffset, rightPx: BpOffset) { - if (leftPx === undefined || rightPx === undefined) return + if (leftPx === undefined || rightPx === undefined) { + return + } const singleRefSeq = leftPx.refName === rightPx.refName && leftPx.index === rightPx.index diff --git a/plugins/linear-genome-view/src/LinearGenomeView/util.ts b/plugins/linear-genome-view/src/LinearGenomeView/util.ts index ddbbd624e9..84dc327e6d 100644 --- a/plugins/linear-genome-view/src/LinearGenomeView/util.ts +++ b/plugins/linear-genome-view/src/LinearGenomeView/util.ts @@ -18,7 +18,9 @@ export function chooseGridPitch( let majorPitch = 10 ** majorMagnitude while (majorPitch < minMajorPitchBp) { majorPitch *= 2 - if (majorPitch >= minMajorPitchBp) break + if (majorPitch >= minMajorPitchBp) { + break + } majorPitch *= 2.5 } @@ -49,7 +51,9 @@ export function makeTicks( let minBase = start let maxBase = end - if (minBase === null || maxBase === null) return [] + if (minBase === null || maxBase === null) { + return [] + } if (bpPerPx < 0) { ;[minBase, maxBase] = [maxBase, minBase] diff --git a/plugins/lollipop/src/LollipopRenderer/Layout.ts b/plugins/lollipop/src/LollipopRenderer/Layout.ts index 940fa1aad4..1ade547eb5 100644 --- a/plugins/lollipop/src/LollipopRenderer/Layout.ts +++ b/plugins/lollipop/src/LollipopRenderer/Layout.ts @@ -20,7 +20,9 @@ export class FloatingLayout { totalHeight = 0 constructor({ width }: { width: number }) { - if (!width) throw new Error('width required to make a new FloatingLayout') + if (!width) { + throw new Error('width required to make a new FloatingLayout') + } this.width = width } @@ -45,8 +47,12 @@ export class FloatingLayout { * @returns Map of `uniqueId => {x,y,anchorLocation,width,height,data}` */ getLayout(configuration?: AnyConfigurationModel) { - if (!this.layoutDirty) return this.layout - if (!configuration) throw new Error('configuration object required') + if (!this.layoutDirty) { + return this.layout + } + if (!configuration) { + throw new Error('configuration object required') + } const minY = readConfObject(configuration, 'minStickLength') @@ -92,7 +98,9 @@ export class FloatingLayout { currentItem.uniqueId, { ...currentItem, x: start, y: top }, ] - if (bottom > maxBottom) maxBottom = bottom + if (bottom > maxBottom) { + maxBottom = bottom + } } // try to tile them left to right all at the same level diff --git a/plugins/lollipop/src/LollipopRenderer/components/Lollipop.js b/plugins/lollipop/src/LollipopRenderer/components/Lollipop.js index 7005e2b548..9d52d51262 100644 --- a/plugins/lollipop/src/LollipopRenderer/components/Lollipop.js +++ b/plugins/lollipop/src/LollipopRenderer/components/Lollipop.js @@ -18,7 +18,9 @@ function ScoreText({ const scoreString = String(score) const fontWidth = (radiusPx * 2) / scoreString.length const fontHeight = fontWidth * 1.1 - if (fontHeight < 12) return null + if (fontHeight < 12) { + return null + } return ( { const { onFeatureMouseDown: handler, feature } = props - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event, feature.id()) } const onFeatureMouseEnter = event => { const { onFeatureMouseEnter: handler, feature } = props - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event, feature.id()) } const onFeatureMouseOut = event => { const { onFeatureMouseOut: handler, feature } = props - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event, feature.id()) } const onFeatureMouseOver = event => { const { onFeatureMouseOver: handler, feature } = props - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event, feature.id()) } const onFeatureMouseUp = event => { const { onFeatureMouseUp: handler, feature } = props - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event, feature.id()) } const onFeatureMouseLeave = event => { const { onFeatureMouseLeave: handler, feature } = props - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event, feature.id()) } const onFeatureMouseMove = event => { const { onFeatureMouseMove: handler, feature } = props - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event, feature.id()) } const onFeatureClick = event => { const { onFeatureClick: handler, feature } = props - if (!handler) return undefined + if (!handler) { + return undefined + } event.stopPropagation() return handler(event, feature.id()) } diff --git a/plugins/lollipop/src/LollipopRenderer/components/LollipopRendering.js b/plugins/lollipop/src/LollipopRenderer/components/LollipopRendering.js index 30e82db680..3535e0d320 100644 --- a/plugins/lollipop/src/LollipopRenderer/components/LollipopRendering.js +++ b/plugins/lollipop/src/LollipopRenderer/components/LollipopRendering.js @@ -10,43 +10,57 @@ import Stick from './Stick' function LollipopRendering(props) { const onMouseDown = event => { const { onMouseDown: handler } = props - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event) } const onMouseUp = event => { const { onMouseUp: handler } = props - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event) } const onMouseEnter = event => { const { onMouseEnter: handler } = props - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event) } const onMouseLeave = event => { const { onMouseLeave: handler } = props - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event) } const onMouseOver = event => { const { onMouseOver: handler } = props - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event) } const onMouseOut = event => { const { onMouseOut: handler } = props - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event) } const onClick = event => { const { onClick: handler } = props - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event) } diff --git a/plugins/protein/src/ProteinReferenceSequenceRenderer/components/Rendering.js b/plugins/protein/src/ProteinReferenceSequenceRenderer/components/Rendering.js index 03fcca0761..24bde043cf 100644 --- a/plugins/protein/src/ProteinReferenceSequenceRenderer/components/Rendering.js +++ b/plugins/protein/src/ProteinReferenceSequenceRenderer/components/Rendering.js @@ -21,7 +21,9 @@ function Sequence({ y, }) { let s = sequence.split('') - if (region.reversed) s = s.reverse() + if (region.reversed) { + s = s.reverse() + } const letterWidth = 1 / bpPerPx / lettersPerBp return ( @@ -79,7 +81,9 @@ Sequence.defaultProps = { */ function* getFeaturesOfType(type, features) { for (const feature of features) { - if (feature.get('type') === type) yield feature + if (feature.get('type') === type) { + yield feature + } } } diff --git a/plugins/protein/src/ProteinReferenceSequenceRenderer/util.js b/plugins/protein/src/ProteinReferenceSequenceRenderer/util.js index f86f74143f..d2f37d4887 100644 --- a/plugins/protein/src/ProteinReferenceSequenceRenderer/util.js +++ b/plugins/protein/src/ProteinReferenceSequenceRenderer/util.js @@ -24,11 +24,15 @@ export function featuresConsensusSequence(region, features) { // pad with spaces at the beginning of the string if necessary const len = region.end - region.start let sequence = '' - while (sequence.length < len) sequence += ' ' + while (sequence.length < len) { + sequence += ' ' + } for (const f of features) { const seq = f.get('residues') || f.get('seq') - if (seq) sequence = replaceAt(sequence, f.get('start') - region.start, seq) + if (seq) { + sequence = replaceAt(sequence, f.get('start') - region.start, seq) + } } return sequence } diff --git a/plugins/rdf/src/SPARQLAdapter/SPARQLAdapter.test.ts b/plugins/rdf/src/SPARQLAdapter/SPARQLAdapter.test.ts index 4d51dd0685..1fd681699f 100644 --- a/plugins/rdf/src/SPARQLAdapter/SPARQLAdapter.test.ts +++ b/plugins/rdf/src/SPARQLAdapter/SPARQLAdapter.test.ts @@ -13,9 +13,14 @@ import configSchema from './configSchema' test('adapter can fetch variants from volvox.vcf.gz', async () => { function mockFetch(url: string): Promise { let response = {} - if (url.includes('chr1')) response = queryResponse - if (url.includes('chr80')) response = emptyQueryResponse - else if (url.includes('fakeRefNamesQuery')) response = refNamesResponse + if (url.includes('chr1')) { + response = queryResponse + } + if (url.includes('chr80')) { + response = emptyQueryResponse + } else if (url.includes('fakeRefNamesQuery')) { + response = refNamesResponse + } return Promise.resolve(new Response(JSON.stringify(response))) } diff --git a/plugins/rdf/src/SPARQLAdapter/SPARQLAdapter.ts b/plugins/rdf/src/SPARQLAdapter/SPARQLAdapter.ts index b4bb5bad47..9079f20e31 100644 --- a/plugins/rdf/src/SPARQLAdapter/SPARQLAdapter.ts +++ b/plugins/rdf/src/SPARQLAdapter/SPARQLAdapter.ts @@ -71,7 +71,9 @@ export default class SPARQLAdapter extends BaseFeatureDataAdapter { } public async getRefNames(opts: BaseOptions = {}): Promise { - if (this.refNames) return this.refNames + if (this.refNames) { + return this.refNames + } let refNames = [] as string[] if (this.refNamesQueryTemplate) { const queryTemplate = encodeURIComponent(this.refNamesQueryTemplate) @@ -117,7 +119,9 @@ export default class SPARQLAdapter extends BaseFeatureDataAdapter { private resultsToRefNames(response: SPARQLResponse): string[] { const rows = ((response || {}).results || {}).bindings || [] - if (!rows.length) return [] + if (!rows.length) { + return [] + } const fields = response.head.vars if (!fields.includes('refName')) { throw new Error('"refName" not found in refNamesQueryTemplate response') @@ -130,7 +134,9 @@ export default class SPARQLAdapter extends BaseFeatureDataAdapter { refName: string, ): SimpleFeature[] { const rows = ((results || {}).results || {}).bindings || [] - if (!rows.length) return [] + if (!rows.length) { + return [] + } const fields = results.head.vars const requiredFields = ['start', 'end', 'uniqueId'] requiredFields.forEach(requiredField => { @@ -151,14 +157,18 @@ export default class SPARQLAdapter extends BaseFeatureDataAdapter { field = field.slice(4) idx += 1 } - while (idx > rawData.length - 1) rawData.push({}) + while (idx > rawData.length - 1) { + rawData.push({}) + } rawData[idx][field] = value } }) rawData.forEach((rd, idx) => { const { uniqueId } = rd - if (idx < rawData.length - 1) rawData[idx + 1].parentUniqueId = uniqueId + if (idx < rawData.length - 1) { + rawData[idx + 1].parentUniqueId = uniqueId + } seenFeatures[uniqueId] = { data: { ...rd, @@ -179,7 +189,9 @@ export default class SPARQLAdapter extends BaseFeatureDataAdapter { if (pid) { const p = seenFeatures[pid] if (p) { - if (!p.data.subfeatures) p.data.subfeatures = [] + if (!p.data.subfeatures) { + p.data.subfeatures = [] + } p.data.subfeatures.push({ ...f.data, uniqueId, @@ -193,7 +205,9 @@ export default class SPARQLAdapter extends BaseFeatureDataAdapter { let found = false for (const subfeature of subfeatures) { if (subfeature && subfeature.uniqueId === pid) { - if (!subfeature.subfeatures) subfeature.subfeatures = [] + if (!subfeature.subfeatures) { + subfeature.subfeatures = [] + } subfeature.subfeatures.push({ ...f.data, uniqueId, @@ -205,7 +219,9 @@ export default class SPARQLAdapter extends BaseFeatureDataAdapter { subfeatures.push(...subfeature.subfeatures) } } - if (!found) console.error(`Could not find parentID ${pid}`) + if (!found) { + console.error(`Could not find parentID ${pid}`) + } } } } @@ -225,7 +241,9 @@ export default class SPARQLAdapter extends BaseFeatureDataAdapter { opts: BaseOptions = {}, ): Promise { const refNames = await this.getRefNames(opts) - if (refNames.length && !refNames.includes(refName)) return false + if (refNames.length && !refNames.includes(refName)) { + return false + } return true } diff --git a/plugins/sequence/src/DivSequenceRenderer/components/DivSequenceRendering.tsx b/plugins/sequence/src/DivSequenceRenderer/components/DivSequenceRendering.tsx index 770281e2bc..f1647150bc 100644 --- a/plugins/sequence/src/DivSequenceRenderer/components/DivSequenceRendering.tsx +++ b/plugins/sequence/src/DivSequenceRenderer/components/DivSequenceRendering.tsx @@ -1,4 +1,4 @@ -/* eslint-disable no-nested-ternary,@typescript-eslint/no-explicit-any,no-return-assign */ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { AnyConfigurationModel } from '@jbrowse/core/configuration/configurationSchema' import { contrastingTextColor } from '@jbrowse/core/util/color' import { Feature } from '@jbrowse/core/util/simpleFeature' @@ -193,7 +193,9 @@ const SequenceSVG = ({ return null } const seq: string = feature.get('seq') - if (!seq) return null + if (!seq) { + return null + } // incrementer for the y-position of the current sequence being rendered // (applies to both translation rows and dna rows) diff --git a/plugins/sequence/src/referenceSeqTrackConfig.ts b/plugins/sequence/src/referenceSeqTrackConfig.ts index 124895890f..cd5ff1949f 100644 --- a/plugins/sequence/src/referenceSeqTrackConfig.ts +++ b/plugins/sequence/src/referenceSeqTrackConfig.ts @@ -47,7 +47,9 @@ export function createReferenceSeqTrackConfig(pluginManager: PluginManager) { actions: (self: any) => ({ addDisplayConf(displayConf: { type: string; displayId: string }) { const { type } = displayConf - if (!type) throw new Error(`unknown display type ${type}`) + if (!type) { + throw new Error(`unknown display type ${type}`) + } const display = self.displays.find( (d: any) => d && d.displayId === displayConf.displayId, ) diff --git a/plugins/spreadsheet-view/src/SpreadsheetView/components/ImportWizard.js b/plugins/spreadsheet-view/src/SpreadsheetView/components/ImportWizard.js index 39705e5d64..2ec12de55c 100644 --- a/plugins/spreadsheet-view/src/SpreadsheetView/components/ImportWizard.js +++ b/plugins/spreadsheet-view/src/SpreadsheetView/components/ImportWizard.js @@ -46,8 +46,11 @@ const NumberEditor = observer( useEffect(() => { const num = parseInt(val, 10) if (!Number.isNaN(num)) { - if (num > 0) model[modelSetterName](num) - else setVal(1) + if (num > 0) { + model[modelSetterName](num) + } else { + setVal(1) + } } }, [model, modelSetterName, val]) return ( diff --git a/plugins/spreadsheet-view/src/SpreadsheetView/components/RowMenu.tsx b/plugins/spreadsheet-view/src/SpreadsheetView/components/RowMenu.tsx index 6aecf8eae0..998b5c2e3b 100644 --- a/plugins/spreadsheet-view/src/SpreadsheetView/components/RowMenu.tsx +++ b/plugins/spreadsheet-view/src/SpreadsheetView/components/RowMenu.tsx @@ -20,7 +20,9 @@ const RowMenu = observer(({ viewModel, spreadsheetModel }: Props) => { } const rowNumber = spreadsheetModel.rowMenuPosition?.rowNumber - if (rowNumber === undefined) return null + if (rowNumber === undefined) { + return null + } const row = spreadsheetModel.rowSet.rows[rowNumber - 1] diff --git a/plugins/spreadsheet-view/src/SpreadsheetView/components/Spreadsheet.js b/plugins/spreadsheet-view/src/SpreadsheetView/components/Spreadsheet.js index bea063e430..3388dcfa1f 100644 --- a/plugins/spreadsheet-view/src/SpreadsheetView/components/Spreadsheet.js +++ b/plugins/spreadsheet-view/src/SpreadsheetView/components/Spreadsheet.js @@ -155,7 +155,9 @@ const DataRow = observer(({ rowModel, rowNumber, spreadsheetModel }) => { const classes = useStyles() const { hideRowSelection, columnDisplayOrder } = spreadsheetModel let rowClass = classes.dataRow - if (rowModel.isSelected) rowClass += ` ${classes.dataRowSelected}` + if (rowModel.isSelected) { + rowClass += ` ${classes.dataRowSelected}` + } function labelClick(evt) { rowModel.toggleSelect() diff --git a/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/BedImport.ts b/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/BedImport.ts index 508304ce96..a29c671379 100644 --- a/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/BedImport.ts +++ b/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/BedImport.ts @@ -7,7 +7,9 @@ const commentBytes = '#'.split('').map(c => c.charCodeAt(0)) function bytesAreFoundAt(position: number, buffer: Buffer, bytes: number[]) { let i = 0 for (; i < bytes.length; i += 1) { - if (buffer[position + i] !== bytes[i]) return false + if (buffer[position + i] !== bytes[i]) { + return false + } } return true } diff --git a/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/ImportUtils.test.ts b/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/ImportUtils.test.ts index 40abf77ecf..bacceccaf8 100644 --- a/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/ImportUtils.test.ts +++ b/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/ImportUtils.test.ts @@ -4,7 +4,9 @@ import { promises as fsPromises } from 'fs' import path from 'path' import { parseCsvBuffer } from './ImportUtils' -if (!window.TextDecoder) window.TextDecoder = TextDecoder +if (!window.TextDecoder) { + window.TextDecoder = TextDecoder +} const pluginManager = new PluginManager() const SpreadsheetModel = pluginManager.jbrequire( diff --git a/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/ImportUtils.ts b/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/ImportUtils.ts index f8a63bfa09..6356aa29e0 100644 --- a/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/ImportUtils.ts +++ b/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/ImportUtils.ts @@ -84,7 +84,9 @@ function dataToSpreadsheetSnapshot( isLoaded: true, rows: rows.map((row, rowNumber) => { const id = rowNumber + (options.hasColumnNameLine ? 0 : 1) - if (row.length > maxCols) maxCols = row.length + if (row.length > maxCols) { + maxCols = row.length + } return { id: String(id), cells: row.map((text, columnNumber) => { diff --git a/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/STARFusionImport.ts b/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/STARFusionImport.ts index 109652520c..3890a17f02 100644 --- a/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/STARFusionImport.ts +++ b/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/STARFusionImport.ts @@ -30,7 +30,9 @@ export async function parseSTARFusionBuffer( data.columns[0].name = data.columns[0].name.replace('#', '') // set some columns to be numeric data.columns.forEach(col => { - if (numericColumns[col.name]) col.dataType = { type: 'Number' } + if (numericColumns[col.name]) { + col.dataType = { type: 'Number' } + } }) // decorate each row with a feature object in its extendedData diff --git a/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/VcfImport.ts b/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/VcfImport.ts index a853ef7376..cd61d4f0ce 100644 --- a/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/VcfImport.ts +++ b/plugins/spreadsheet-view/src/SpreadsheetView/importAdapters/VcfImport.ts @@ -111,7 +111,9 @@ export function splitVcfFileHeaderAndBody(wholeFile: string) { let prevChar for (; headerEndIndex < wholeFile.length; headerEndIndex += 1) { const c = wholeFile[headerEndIndex] - if (prevChar === '\n' && c !== '#') break + if (prevChar === '\n' && c !== '#') { + break + } prevChar = c } diff --git a/plugins/spreadsheet-view/src/SpreadsheetView/models/ColumnDataTypes/Number.js b/plugins/spreadsheet-view/src/SpreadsheetView/models/ColumnDataTypes/Number.js index 315037ac14..aa75244181 100644 --- a/plugins/spreadsheet-view/src/SpreadsheetView/models/ColumnDataTypes/Number.js +++ b/plugins/spreadsheet-view/src/SpreadsheetView/models/ColumnDataTypes/Number.js @@ -140,10 +140,14 @@ export default ({ jbrequire }) => { const { cellsWithDerived } = row const cell = cellsWithDerived[columnNumber] - if (!cell || !cell.text) return false + if (!cell || !cell.text) { + return false + } const parsedCellText = parseFloat(cell.text) - if (typeof parsedCellText !== 'number') return false + if (typeof parsedCellText !== 'number') { + return false + } const predicate = OPERATION_PREDICATES[operation] if (!predicate) { @@ -158,12 +162,16 @@ export default ({ jbrequire }) => { setFirstNumber(n) { if (Number.isNaN(n) || typeof n !== 'number') { self.firstNumber = undefined - } else self.firstNumber = n + } else { + self.firstNumber = n + } }, setSecondNumber(n) { if (Number.isNaN(n) || typeof n !== 'number') { self.secondNumber = undefined - } else self.secondNumber = n + } else { + self.secondNumber = n + } }, setOperation(op) { self.operation = op diff --git a/plugins/spreadsheet-view/src/SpreadsheetView/models/ColumnDataTypes/Text.js b/plugins/spreadsheet-view/src/SpreadsheetView/models/ColumnDataTypes/Text.js index 246ba3bfbd..90be78cdb8 100644 --- a/plugins/spreadsheet-view/src/SpreadsheetView/models/ColumnDataTypes/Text.js +++ b/plugins/spreadsheet-view/src/SpreadsheetView/models/ColumnDataTypes/Text.js @@ -35,7 +35,9 @@ export default pluginManager => { }, 'ends with': (textInCell, stringToFind) => { const index = textInCell.toLowerCase().indexOf(stringToFind) - if (index === -1) return false + if (index === -1) { + return false + } return index === textInCell.length - stringToFind.length }, } @@ -138,7 +140,9 @@ export default pluginManager => { return function stringPredicate(sheet, row) { const { cellsWithDerived } = row const cell = cellsWithDerived[columnNumber] - if (!cell || !cell.text) return false + if (!cell || !cell.text) { + return false + } const predicate = OPERATION_PREDICATES[operation] if (!predicate) { throw new Error(`"${operation}" not implemented in location filter`) diff --git a/plugins/spreadsheet-view/src/SpreadsheetView/models/FilterControls.ts b/plugins/spreadsheet-view/src/SpreadsheetView/models/FilterControls.ts index 013a8f5c98..7c64ef11f9 100644 --- a/plugins/spreadsheet-view/src/SpreadsheetView/models/FilterControls.ts +++ b/plugins/spreadsheet-view/src/SpreadsheetView/models/FilterControls.ts @@ -36,7 +36,9 @@ export default (pluginManager: PluginManager) => { ) { const cell = cellsWithDerived[columnNumber] // note: case insensitive - if (cell.text && cell.text.toLowerCase().includes(s)) return true + if (cell.text && cell.text.toLowerCase().includes(s)) { + return true + } } return false } @@ -76,7 +78,9 @@ export default (pluginManager: PluginManager) => { }, rowPassesFilters(sheet: unknown, row: unknown) { for (let i = 0; i < this.filters.length; i += 1) { - if (!this.filters[i].predicate(sheet, row)) return false + if (!this.filters[i].predicate(sheet, row)) { + return false + } } return true }, diff --git a/plugins/spreadsheet-view/src/SpreadsheetView/models/ImportWizard.ts b/plugins/spreadsheet-view/src/SpreadsheetView/models/ImportWizard.ts index 728abfc8c1..b2b2a910f8 100644 --- a/plugins/spreadsheet-view/src/SpreadsheetView/models/ImportWizard.ts +++ b/plugins/spreadsheet-view/src/SpreadsheetView/models/ImportWizard.ts @@ -122,7 +122,9 @@ export default (pluginManager: PluginManager) => { }, setColumnNameLineNumber(newnumber: number) { - if (newnumber > 0) self.columnNameLineNumber = newnumber + if (newnumber > 0) { + self.columnNameLineNumber = newnumber + } }, setFileType(typeName: string) { @@ -149,7 +151,9 @@ export default (pluginManager: PluginManager) => { // then set the parent to display it async import() { try { - if (!self.fileSource) return + if (!self.fileSource) { + return + } if (self.loading) { throw new Error('cannot import, load already in progress') diff --git a/plugins/spreadsheet-view/src/SpreadsheetView/models/Spreadsheet.ts b/plugins/spreadsheet-view/src/SpreadsheetView/models/Spreadsheet.ts index da1e870ebd..62037191de 100644 --- a/plugins/spreadsheet-view/src/SpreadsheetView/models/Spreadsheet.ts +++ b/plugins/spreadsheet-view/src/SpreadsheetView/models/Spreadsheet.ts @@ -7,7 +7,7 @@ import ColumnDataTypes from './ColumnDataTypes' import StaticRowSetF from './StaticRowSet' import RowF from './Row' -export default (pluginManager: PluginManager) => { +const SpreadsheetModelF = (pluginManager: PluginManager) => { const { lib, load } = pluginManager const { types, getParent } = lib['mobx-state-tree'] @@ -108,7 +108,9 @@ export default (pluginManager: PluginManager) => { rowA.cellsWithDerived[columnNumber], rowB.cellsWithDerived[columnNumber], ) - if (result) return descending ? -result : result + if (result) { + return descending ? -result : result + } } return 0 }, @@ -146,8 +148,10 @@ export default (pluginManager: PluginManager) => { setSortColumns( newSort: NonNullable>, ) { - // @ts-ignore - if (newSort) self.sortColumns = newSort + if (newSort) { + // @ts-ignore + self.sortColumns = newSort + } }, setColumnType(columnNumber: number, newTypeName: string) { self.columns[columnNumber].dataType = { type: newTypeName } @@ -159,3 +163,5 @@ export default (pluginManager: PluginManager) => { return stateModel } + +export default SpreadsheetModelF diff --git a/plugins/spreadsheet-view/src/SpreadsheetView/models/SpreadsheetView.ts b/plugins/spreadsheet-view/src/SpreadsheetView/models/SpreadsheetView.ts index ab1f4ffbbf..a43a01d145 100644 --- a/plugins/spreadsheet-view/src/SpreadsheetView/models/SpreadsheetView.ts +++ b/plugins/spreadsheet-view/src/SpreadsheetView/models/SpreadsheetView.ts @@ -35,7 +35,7 @@ const defaultRowMenuItems: MenuItemWithDisabledCallback[] = [ }, ] -export default (pluginManager: PluginManager) => { +const SpreadsheetViewModelF = (pluginManager: PluginManager) => { const { lib, load } = pluginManager const { mobx } = lib const { types, getParent, getEnv } = lib['mobx-state-tree'] @@ -94,7 +94,9 @@ export default (pluginManager: PluginManager) => { get outputRows() { if (self.spreadsheet && self.spreadsheet.rowSet.isLoaded) { const selected = self.spreadsheet.rowSet.selectedFilteredRows - if (selected.length) return selected + if (selected.length) { + return selected + } return self.spreadsheet.rowSet.sortedFilteredRows } return undefined @@ -124,8 +126,11 @@ export default (pluginManager: PluginManager) => { return self.width }, setHeight(newHeight: number) { - if (newHeight > minHeight) self.height = newHeight - else self.height = minHeight + if (newHeight > minHeight) { + self.height = newHeight + } else { + self.height = minHeight + } return self.height }, resizeHeight(distance: number) { @@ -152,7 +157,9 @@ export default (pluginManager: PluginManager) => { }, setDisplayMode() { - if (self.readyToDisplay) self.mode = 'display' + if (self.readyToDisplay) { + self.mode = 'display' + } }, closeView() { @@ -164,3 +171,5 @@ export default (pluginManager: PluginManager) => { return stateModel } + +export default SpreadsheetViewModelF diff --git a/plugins/spreadsheet-view/src/SpreadsheetView/models/StaticRowSet.ts b/plugins/spreadsheet-view/src/SpreadsheetView/models/StaticRowSet.ts index cc8bc0009f..a390047300 100644 --- a/plugins/spreadsheet-view/src/SpreadsheetView/models/StaticRowSet.ts +++ b/plugins/spreadsheet-view/src/SpreadsheetView/models/StaticRowSet.ts @@ -1,7 +1,7 @@ import PluginManager from '@jbrowse/core/PluginManager' import Row from './Row' -export default (pluginManager: PluginManager) => { +const StaticRowSetComponentF = (pluginManager: PluginManager) => { const { lib, load } = pluginManager const { types, getParent } = lib['mobx-state-tree'] const RowModel = load(Row) @@ -62,3 +62,5 @@ export default (pluginManager: PluginManager) => { }, })) } + +export default StaticRowSetComponentF diff --git a/plugins/sv-inspector/src/SvInspectorView/SvInspectorViewType.js b/plugins/sv-inspector/src/SvInspectorView/SvInspectorViewType.js index a358ee5e84..757ad9fca5 100644 --- a/plugins/sv-inspector/src/SvInspectorView/SvInspectorViewType.js +++ b/plugins/sv-inspector/src/SvInspectorView/SvInspectorViewType.js @@ -1,7 +1,7 @@ import ReactComponentFactory from './components/SvInspectorView' import StateModelFactory from './models/SvInspectorView' -export default ({ jbrequire }) => { +const SvInspectorViewF = ({ jbrequire }) => { const ViewType = jbrequire('@jbrowse/core/pluggableElementTypes/ViewType') const ReactComponent = jbrequire(ReactComponentFactory) @@ -9,3 +9,5 @@ export default ({ jbrequire }) => { return new ViewType({ name: 'SvInspectorView', stateModel, ReactComponent }) } + +export default SvInspectorViewF diff --git a/plugins/sv-inspector/src/SvInspectorView/components/SvInspectorView.js b/plugins/sv-inspector/src/SvInspectorView/components/SvInspectorView.js index ef3d812a91..59feef1a2c 100644 --- a/plugins/sv-inspector/src/SvInspectorView/components/SvInspectorView.js +++ b/plugins/sv-inspector/src/SvInspectorView/components/SvInspectorView.js @@ -1,6 +1,6 @@ import FolderOpenIcon from '@material-ui/icons/FolderOpen' -export default pluginManager => { +const SvInspectorComponentF = pluginManager => { const { jbrequire } = pluginManager const { observer, PropTypes } = jbrequire('mobx-react') const React = jbrequire('react') @@ -53,6 +53,7 @@ export default pluginManager => { }) const ViewControls = observer(({ model }) => { + // eslint-disable-next-line react-hooks/rules-of-hooks const classes = useStyles() return ( { }) const CircularViewOptions = observer(({ svInspector }) => { + // eslint-disable-next-line react-hooks/rules-of-hooks const classes = useStyles() return ( @@ -168,3 +170,5 @@ export default pluginManager => { } return observer(SvInspectorView) } + +export default SvInspectorComponentF diff --git a/plugins/sv-inspector/src/SvInspectorView/models/SvInspectorView.js b/plugins/sv-inspector/src/SvInspectorView/models/SvInspectorView.js index 61f7b5ba1d..0be0e6b222 100644 --- a/plugins/sv-inspector/src/SvInspectorView/models/SvInspectorView.js +++ b/plugins/sv-inspector/src/SvInspectorView/models/SvInspectorView.js @@ -42,7 +42,7 @@ function defaultOnChordClick(feature, chordTrack, pluginManager) { session.addView('BreakpointSplitView', viewSnapshot) } -export default pluginManager => { +const SvInspectorViewF = pluginManager => { const { jbrequire } = pluginManager const { autorun, reaction } = pluginManager.lib.mobx const { types, getParent, addDisposer, getSnapshot } = pluginManager.lib[ @@ -117,7 +117,9 @@ export default pluginManager => { get assemblyName() { const { assembly } = self.spreadsheetView - if (assembly) return readConfObject(assembly, 'name') + if (assembly) { + return readConfObject(assembly, 'name') + } return undefined }, @@ -283,7 +285,9 @@ export default pluginManager => { assemblyName: self && self.assemblyName, }), data => { - if (!data) return + if (!data) { + return + } const { assemblyName, generatedTrackConf } = data // hide any visible tracks if (self.circularView.tracks.length) { @@ -345,8 +349,11 @@ export default pluginManager => { self.width = newWidth }, setHeight(newHeight) { - if (newHeight > minHeight) self.height = newHeight - else self.height = minHeight + if (newHeight > minHeight) { + self.height = newHeight + } else { + self.height = minHeight + } return self.height }, resizeHeight(distance) { @@ -380,3 +387,5 @@ export default pluginManager => { return { stateModel } } + +export default SvInspectorViewF diff --git a/plugins/sv-inspector/src/SvInspectorView/models/adhocFeatureUtils.js b/plugins/sv-inspector/src/SvInspectorView/models/adhocFeatureUtils.js index 00026d4eb4..aeac31d727 100644 --- a/plugins/sv-inspector/src/SvInspectorView/models/adhocFeatureUtils.js +++ b/plugins/sv-inspector/src/SvInspectorView/models/adhocFeatureUtils.js @@ -14,9 +14,13 @@ export default ({ jbrequire }) => { // load all the other data in the row into an `otherData` object const otherData = {} columns.forEach((column, columnNumber) => { - if (columnsAlreadyUsedInLocations.includes(columnNumber)) return + if (columnsAlreadyUsedInLocations.includes(columnNumber)) { + return + } let { text } = row.cells[columnNumber] - if (column.dataType.type === 'Number') text = parseFloat(text) + if (column.dataType.type === 'Number') { + text = parseFloat(text) + } otherData[column.name] = text }) diff --git a/plugins/sv-inspector/src/SvInspectorView/models/breakpointSplitViewFromTableRow.js b/plugins/sv-inspector/src/SvInspectorView/models/breakpointSplitViewFromTableRow.js index 257d6c0566..644a038eef 100644 --- a/plugins/sv-inspector/src/SvInspectorView/models/breakpointSplitViewFromTableRow.js +++ b/plugins/sv-inspector/src/SvInspectorView/models/breakpointSplitViewFromTableRow.js @@ -14,8 +14,12 @@ export default pluginManager => { rowNumber, ) { if (row.extendedData) { - if (row.extendedData.vcfFeature) return row.extendedData.vcfFeature - if (row.extendedData.feature) return row.extendedData.feature + if (row.extendedData.vcfFeature) { + return row.extendedData.vcfFeature + } + if (row.extendedData.feature) { + return row.extendedData.feature + } } const adhocFeature = makeAdHocSvFeature( spreadsheetView.spreadsheet, @@ -23,7 +27,9 @@ export default pluginManager => { row, session.assemblyManager.isValidRefName, ) - if (adhocFeature) return adhocFeature + if (adhocFeature) { + return adhocFeature + } return undefined } diff --git a/plugins/svg/src/SvgFeatureRenderer/components/Segments.js b/plugins/svg/src/SvgFeatureRenderer/components/Segments.js index d08455f885..8a87a412b5 100644 --- a/plugins/svg/src/SvgFeatureRenderer/components/Segments.js +++ b/plugins/svg/src/SvgFeatureRenderer/components/Segments.js @@ -58,7 +58,9 @@ function Segments(props) { const subfeatureId = String(subfeature.id()) const subfeatureLayout = featureLayout.getSubRecord(subfeatureId) // This subfeature got filtered out - if (!subfeatureLayout) return null + if (!subfeatureLayout) { + return null + } const { GlyphComponent } = subfeatureLayout.data return ( { setMouseIsDown(false) const handler = onMouseUp - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event) }, [onMouseUp], @@ -212,7 +216,9 @@ function SvgFeatureRendering(props) { const mouseEnter = useCallback( event => { const handler = onMouseEnter - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event) }, [onMouseEnter], @@ -221,7 +227,9 @@ function SvgFeatureRendering(props) { const mouseLeave = useCallback( event => { const handler = onMouseLeave - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event) }, [onMouseLeave], @@ -230,7 +238,9 @@ function SvgFeatureRendering(props) { const mouseOver = useCallback( event => { const handler = onMouseOver - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event) }, [onMouseOver], @@ -239,7 +249,9 @@ function SvgFeatureRendering(props) { const mouseOut = useCallback( event => { const handler = onMouseOut - if (!handler) return undefined + if (!handler) { + return undefined + } return handler(event) }, [onMouseOut], diff --git a/plugins/svg/src/SvgFeatureRenderer/components/SvgOverlay.tsx b/plugins/svg/src/SvgFeatureRenderer/components/SvgOverlay.tsx index bb51872534..14d63005dc 100644 --- a/plugins/svg/src/SvgFeatureRenderer/components/SvgOverlay.tsx +++ b/plugins/svg/src/SvgFeatureRenderer/components/SvgOverlay.tsx @@ -193,7 +193,9 @@ function SvgOverlay({ } function onFeatureClick(event: React.MouseEvent) { - if (movedDuringLastMouseDown) return undefined + if (movedDuringLastMouseDown) { + return undefined + } const { onFeatureClick: handler } = handlers if (!(handler && mouseoverFeatureId)) { return undefined diff --git a/plugins/trackhub-registry/src/trackhub-registry/TrackHubRegistrySelect.js b/plugins/trackhub-registry/src/trackhub-registry/TrackHubRegistrySelect.js index a15d8c514b..72c8e375cd 100644 --- a/plugins/trackhub-registry/src/trackhub-registry/TrackHubRegistrySelect.js +++ b/plugins/trackhub-registry/src/trackhub-registry/TrackHubRegistrySelect.js @@ -59,8 +59,11 @@ function TrackHubRegistrySelect({ model, setModelReady }) { const classes = useStyles() useEffect(() => { - if (selectedHub) setModelReady(true) - else setModelReady(false) + if (selectedHub) { + setModelReady(true) + } else { + setModelReady(false) + } }, [selectedHub, setModelReady]) useEffect(() => { @@ -100,8 +103,11 @@ function TrackHubRegistrySelect({ model, setModelReady }) { const controller = new AbortController() const { signal } = controller if (!errorMessage) { - if (selectedAssembly && !hubs.size) getHubs(signal, true) - else if (hubs.size && !allHubsRetrieved) getHubs(signal) + if (selectedAssembly && !hubs.size) { + getHubs(signal, true) + } else if (hubs.size && !allHubsRetrieved) { + getHubs(signal) + } } return () => { @@ -125,7 +131,6 @@ function TrackHubRegistrySelect({ model, setModelReady }) { } else { const hub = openLocation({ uri: item.hub.url }) try { - // eslint-disable-next-line no-await-in-loop await hub.stat() } catch (error) { item.error = error.message @@ -134,7 +139,9 @@ function TrackHubRegistrySelect({ model, setModelReady }) { newHubs.set(item.id, item) } setHubs(newHubs) - if (newHubs.size === response.total_entries) setAllHubsRetrieved(true) + if (newHubs.size === response.total_entries) { + setAllHubsRetrieved(true) + } } } diff --git a/plugins/variants/src/ChordVariantDisplay/models/ChordVariantDisplay.js b/plugins/variants/src/ChordVariantDisplay/models/ChordVariantDisplay.js index 2a89815410..798eb81cc0 100644 --- a/plugins/variants/src/ChordVariantDisplay/models/ChordVariantDisplay.js +++ b/plugins/variants/src/ChordVariantDisplay/models/ChordVariantDisplay.js @@ -3,7 +3,7 @@ import { BaseChordDisplayModel, } from '@jbrowse/plugin-circular-view' -export default pluginManager => { +const ChordVariantDisplayF = pluginManager => { const { jbrequire } = pluginManager const { types } = jbrequire('mobx-state-tree') @@ -59,3 +59,5 @@ export default pluginManager => { // render request is for 1.5x the current viewing window // tracks all have a height +// +export default ChordVariantDisplayF diff --git a/plugins/variants/src/StructuralVariantChordRenderer/ReactComponent.js b/plugins/variants/src/StructuralVariantChordRenderer/ReactComponent.js index 2b773d3923..012df4942f 100644 --- a/plugins/variants/src/StructuralVariantChordRenderer/ReactComponent.js +++ b/plugins/variants/src/StructuralVariantChordRenderer/ReactComponent.js @@ -1,4 +1,4 @@ -export default ({ jbrequire }) => { +const ChordRendererF = ({ jbrequire }) => { const React = jbrequire('react') const { useMemo } = jbrequire('react') const { observer, PropTypes: MobxPropTypes } = jbrequire('mobx-react') @@ -88,10 +88,14 @@ export default ({ jbrequire }) => { onClick(feature, startBlock.region, endBlock.region, evt) } onMouseOver={evt => { - if (!selected) evt.target.style.stroke = hoverStrokeColor + if (!selected) { + evt.target.style.stroke = hoverStrokeColor + } }} onMouseOut={evt => { - if (!selected) evt.target.style.stroke = strokeColor + if (!selected) { + evt.target.style.stroke = strokeColor + } }} /> ) @@ -182,3 +186,5 @@ export default ({ jbrequire }) => { return observer(StructuralVariantChords) } + +export default ChordRendererF diff --git a/plugins/variants/src/StructuralVariantChordRenderer/index.js b/plugins/variants/src/StructuralVariantChordRenderer/index.js index fbdbfe47d7..38d8570752 100644 --- a/plugins/variants/src/StructuralVariantChordRenderer/index.js +++ b/plugins/variants/src/StructuralVariantChordRenderer/index.js @@ -1,6 +1,6 @@ import ReactComponentFactory from './ReactComponent' -export default pluginManager => { +const ChordRendererConfigF = pluginManager => { const { jbrequire } = pluginManager const ChordRendererType = jbrequire( '@jbrowse/core/pluggableElementTypes/renderers/CircularChordRendererType', @@ -40,3 +40,5 @@ export default pluginManager => { pluginManager, }) } + +export default ChordRendererConfigF diff --git a/plugins/variants/src/VcfTabixAdapter/VcfTabixAdapter.ts b/plugins/variants/src/VcfTabixAdapter/VcfTabixAdapter.ts index e3dc3d6494..11eb79e7d6 100644 --- a/plugins/variants/src/VcfTabixAdapter/VcfTabixAdapter.ts +++ b/plugins/variants/src/VcfTabixAdapter/VcfTabixAdapter.ts @@ -19,7 +19,7 @@ import { readConfObject } from '@jbrowse/core/configuration' import VcfFeature from './VcfFeature' import MyConfigSchema from './configSchema' -export default class extends BaseFeatureDataAdapter { +export default class VcfTabixAdapter extends BaseFeatureDataAdapter { protected vcf: TabixIndexedFile protected filehandle: GenericFilehandle diff --git a/plugins/wiggle/src/DensityRenderer/index.ts b/plugins/wiggle/src/DensityRenderer/index.ts index ad3ff6580d..6e0deefd58 100644 --- a/plugins/wiggle/src/DensityRenderer/index.ts +++ b/plugins/wiggle/src/DensityRenderer/index.ts @@ -13,7 +13,7 @@ import WiggleBaseRenderer, { export { default as ReactComponent } from '../WiggleRendering' -export default class extends WiggleBaseRenderer { +export default class DensityRenderer extends WiggleBaseRenderer { draw( ctx: CanvasRenderingContext2D, props: RenderArgsDeserializedWithFeatures, diff --git a/plugins/wiggle/src/LinePlotRenderer/LinePlotRenderer.js b/plugins/wiggle/src/LinePlotRenderer/LinePlotRenderer.js index af41dba0c7..460786f5e2 100644 --- a/plugins/wiggle/src/LinePlotRenderer/LinePlotRenderer.js +++ b/plugins/wiggle/src/LinePlotRenderer/LinePlotRenderer.js @@ -4,7 +4,7 @@ import { getScale } from '../util' import WiggleBaseRenderer from '../WiggleBaseRenderer' import { YSCALEBAR_LABEL_OFFSET } from '../LinearWiggleDisplay/models/model' -export default class extends WiggleBaseRenderer { +export default class LinePlotRenderer extends WiggleBaseRenderer { draw(ctx, props) { const { features, @@ -31,8 +31,7 @@ export default class extends WiggleBaseRenderer { const toY = rawscore => height - scale(rawscore) + offset const colorCallback = readConfObject(config, 'color') === '#f0f' - ? // eslint-disable-next-line @typescript-eslint/no-unused-vars - feature => 'grey' + ? () => 'grey' : feature => readConfObject(config, 'color', { feature }) ctx.strokeStyle = 'grey' diff --git a/plugins/wiggle/src/index.ts b/plugins/wiggle/src/index.ts index b5f0eaef12..0acb687430 100644 --- a/plugins/wiggle/src/index.ts +++ b/plugins/wiggle/src/index.ts @@ -39,7 +39,7 @@ import { WiggleGetMultiRegionStats, } from './WiggleRPC/rpcMethods' -export default class extends Plugin { +export default class WigglePlugin extends Plugin { name = 'WigglePlugin' install(pluginManager: PluginManager) { diff --git a/plugins/wiggle/src/util.ts b/plugins/wiggle/src/util.ts index 628da315c7..0cbd673af2 100644 --- a/plugins/wiggle/src/util.ts +++ b/plugins/wiggle/src/util.ts @@ -101,8 +101,12 @@ export function getNiceDomain({ let [min, max] = domain if (scaleType === 'linear') { - if (max < 0) max = 0 - if (min > 0) min = 0 + if (max < 0) { + max = 0 + } + if (min > 0) { + min = 0 + } } if (scaleType === 'log') { // if the min is 0, assume that it's just something diff --git a/products/jbrowse-aws-lambda-functions/saved-sessions/jbrowse_analytics.js b/products/jbrowse-aws-lambda-functions/saved-sessions/jbrowse_analytics.js index 45677fcf78..8b503099a5 100644 --- a/products/jbrowse-aws-lambda-functions/saved-sessions/jbrowse_analytics.js +++ b/products/jbrowse-aws-lambda-functions/saved-sessions/jbrowse_analytics.js @@ -1,4 +1,3 @@ -// eslint-disable-next-line import/no-unresolved const AWS = require('aws-sdk') const url_parser = require('url') @@ -27,8 +26,7 @@ function recordStats(event, context, done) { const trackTypesRe = /^track-types-/ for (const key in stats) { if (trackTypesRe.test(key)) { - // eslint-disable-next-line radix - trackTypes[key.replace(trackTypesRe, '')] = parseInt(stats[key]) + trackTypes[key.replace(trackTypesRe, '')] = parseInt(stats[key], 10) delete stats[key] } } @@ -40,9 +38,9 @@ function recordStats(event, context, done) { const sessionTrackTypesRe = /^sessionTrack-types-/ for (const key in stats) { if (sessionTrackTypesRe.test(key)) { - // eslint-disable-next-line radix sessionTrackTypes[key.replace(sessionTrackTypesRe, '')] = parseInt( stats[key], + 10, ) delete stats[key] } @@ -64,8 +62,6 @@ function recordStats(event, context, done) { exports.handler = (event, context, callback) => { // console.log('Received event:', JSON.stringify(event, null, 2)); - - // eslint-disable-next-line @typescript-eslint/no-unused-vars const done = (err, res) => callback(null, { statusCode: err ? '400' : '200', diff --git a/products/jbrowse-aws-lambda-functions/saved-sessions/read-session-jbrowse.js b/products/jbrowse-aws-lambda-functions/saved-sessions/read-session-jbrowse.js index d0905851d3..8ce2202fce 100644 --- a/products/jbrowse-aws-lambda-functions/saved-sessions/read-session-jbrowse.js +++ b/products/jbrowse-aws-lambda-functions/saved-sessions/read-session-jbrowse.js @@ -1,4 +1,3 @@ -// eslint-disable-next-line import/no-unresolved const AWS = require('aws-sdk') const { AWS_REGION: region, sessionTable } = process.env diff --git a/products/jbrowse-aws-lambda-functions/saved-sessions/save-session-jbrowse.js b/products/jbrowse-aws-lambda-functions/saved-sessions/save-session-jbrowse.js index ff609f5d9a..1beae4d54b 100644 --- a/products/jbrowse-aws-lambda-functions/saved-sessions/save-session-jbrowse.js +++ b/products/jbrowse-aws-lambda-functions/saved-sessions/save-session-jbrowse.js @@ -1,4 +1,3 @@ -// eslint-disable-next-line import/no-unresolved const AWS = require('aws-sdk') const { createHash } = require('crypto') const multipart = require('./multipart') diff --git a/products/jbrowse-cli/src/base.ts b/products/jbrowse-cli/src/base.ts index b3af77bddf..1e15931960 100644 --- a/products/jbrowse-cli/src/base.ts +++ b/products/jbrowse-cli/src/base.ts @@ -216,12 +216,10 @@ export default abstract class JBrowseCommand extends Command { let result do { - // eslint-disable-next-line no-await-in-loop const response = await fetch( `https://api.github.com/repos/GMOD/jbrowse-components/releases?page=${page}`, ) if (response.ok) { - // eslint-disable-next-line no-await-in-loop result = (await response.json()) as GithubRelease[] yield result.filter(release => release.tag_name.startsWith('v')) diff --git a/products/jbrowse-cli/src/commands/add-assembly.ts b/products/jbrowse-cli/src/commands/add-assembly.ts index 4dba6efebf..ba760a76e2 100644 --- a/products/jbrowse-cli/src/commands/add-assembly.ts +++ b/products/jbrowse-cli/src/commands/add-assembly.ts @@ -506,7 +506,9 @@ custom Either a JSON file location or inline JSON that defines a custom } catch (error) { // ignore } - if (locationUrl) return false + if (locationUrl) { + return false + } return true } @@ -519,12 +521,16 @@ custom Either a JSON file location or inline JSON that defines a custom // ignore } - if (locationUrl) return false + if (locationUrl) { + return false + } switch (load) { case 'copy': { await Promise.all( filePaths.map(async filePath => { - if (!filePath) return undefined + if (!filePath) { + return undefined + } return fsPromises.copyFile( filePath, path.join(path.dirname(destination), path.basename(filePath)), @@ -536,7 +542,9 @@ custom Either a JSON file location or inline JSON that defines a custom case 'symlink': { await Promise.all( filePaths.map(async filePath => { - if (!filePath) return undefined + if (!filePath) { + return undefined + } return fsPromises.symlink( filePath, path.join(path.dirname(destination), path.basename(filePath)), @@ -548,7 +556,9 @@ custom Either a JSON file location or inline JSON that defines a custom case 'move': { await Promise.all( filePaths.map(async filePath => { - if (!filePath) return undefined + if (!filePath) { + return undefined + } return fsPromises.rename( filePath, path.join(path.dirname(destination), path.basename(filePath)), diff --git a/products/jbrowse-cli/src/commands/add-connection.ts b/products/jbrowse-cli/src/commands/add-connection.ts index dadc7ded71..2d117e6660 100644 --- a/products/jbrowse-cli/src/commands/add-connection.ts +++ b/products/jbrowse-cli/src/commands/add-connection.ts @@ -141,11 +141,15 @@ export default class AddConnection extends JBrowseCommand { } if (connectionId) { this.debug(`Connection id is ${connectionId}`) - } else connectionId = `${type}-${assemblyName}-${Date.now()}` + } else { + connectionId = `${type}-${assemblyName}-${Date.now()}` + } if (name) { this.debug(`Name is: ${name}`) - } else name = connectionId + } else { + name = connectionId + } let configObj = {} if (config) { @@ -202,7 +206,9 @@ export default class AddConnection extends JBrowseCommand { { exit: 150 }, ) } - } else configContents.connections.push(connectionConfig) + } else { + configContents.connections.push(connectionConfig) + } this.debug(`Writing configuration to file ${this.target}`) await this.writeJsonFile(this.target, configContents) @@ -227,7 +233,9 @@ export default class AddConnection extends JBrowseCommand { if (check) { response = await fetch(locationUrl, { method: 'HEAD' }) } - if (!response || response.ok) return locationUrl.href + if (!response || response.ok) { + return locationUrl.href + } this.error(`Response returned with code ${response.status}`) } catch (error) { // ignore @@ -240,9 +248,15 @@ export default class AddConnection extends JBrowseCommand { } determineConnectionType(url: string, config: string | undefined) { - if (path.basename(url) === 'hub.txt') return 'UCSCTrackHubConnection' - if (url.includes('jbrowse/data')) return 'JBrowse1Connection' - if (config && this.isValidJSON(config)) return 'custom' + if (path.basename(url) === 'hub.txt') { + return 'UCSCTrackHubConnection' + } + if (url.includes('jbrowse/data')) { + return 'JBrowse1Connection' + } + if (config && this.isValidJSON(config)) { + return 'custom' + } return this.error( `Unable to determine a specific connection from URL given.\nPlease specify a type with --type.\nIf you want a custom type, please provide the config object with --config`, ) diff --git a/products/jbrowse-cli/src/testUtil.ts b/products/jbrowse-cli/src/testUtil.ts index 945a9be254..5fb8856182 100644 --- a/products/jbrowse-cli/src/testUtil.ts +++ b/products/jbrowse-cli/src/testUtil.ts @@ -1,4 +1,3 @@ -/* eslint-disable import/no-extraneous-dependencies */ import { test as oclifTest } from '@oclif/test' import del from 'del' import fs from 'fs' diff --git a/products/jbrowse-desktop/public/electron.js b/products/jbrowse-desktop/public/electron.js index 1317c18655..49a15a9188 100644 --- a/products/jbrowse-desktop/public/electron.js +++ b/products/jbrowse-desktop/public/electron.js @@ -1,4 +1,3 @@ -// eslint-disable-next-line import/no-extraneous-dependencies const electron = require('electron') const debug = require('electron-debug') const isDev = require('electron-is-dev') diff --git a/products/jbrowse-desktop/public/preload.js b/products/jbrowse-desktop/public/preload.js index 2190c841b2..e41af15693 100644 --- a/products/jbrowse-desktop/public/preload.js +++ b/products/jbrowse-desktop/public/preload.js @@ -1,4 +1,3 @@ -// eslint-disable-next-line import/no-extraneous-dependencies window.electron = require('electron') window.electronBetterIpc = require('electron-better-ipc-extra') diff --git a/products/jbrowse-desktop/rescripts/webpackRescript.js b/products/jbrowse-desktop/rescripts/webpackRescript.js index 84362b5eb3..dde60b2b9a 100644 --- a/products/jbrowse-desktop/rescripts/webpackRescript.js +++ b/products/jbrowse-desktop/rescripts/webpackRescript.js @@ -1,14 +1,14 @@ const path = require('path') -// eslint-disable-next-line import/no-extraneous-dependencies const webpack = require('webpack') -// eslint-disable-next-line import/no-extraneous-dependencies const HtmlWebpackPlugin = require('html-webpack-plugin') module.exports = { webpack: config => { const isDev = config.mode !== 'production' // Get rid of the webpackHotDevClient entry - if (isDev) config.entry.shift() + if (isDev) { + config.entry.shift() + } // Specify two entry points, a main one and one for the window worker const main = config.entry.pop() config.entry = { diff --git a/products/jbrowse-desktop/rescripts/yarnWorkspacesRescript.js b/products/jbrowse-desktop/rescripts/yarnWorkspacesRescript.js index ce84b5570b..0867f5ee97 100644 --- a/products/jbrowse-desktop/rescripts/yarnWorkspacesRescript.js +++ b/products/jbrowse-desktop/rescripts/yarnWorkspacesRescript.js @@ -5,9 +5,7 @@ */ const fs = require('fs') const path = require('path') -// eslint-disable-next-line import/no-extraneous-dependencies const spawn = require('cross-spawn') -// eslint-disable-next-line import/no-extraneous-dependencies const root = require('find-yarn-workspace-root')() const pgks = spawn.sync('yarn', ['--json', 'workspaces', 'info']) diff --git a/products/jbrowse-desktop/src/JBrowse.js b/products/jbrowse-desktop/src/JBrowse.js index c6611b7306..ca1d98744b 100644 --- a/products/jbrowse-desktop/src/JBrowse.js +++ b/products/jbrowse-desktop/src/JBrowse.js @@ -43,7 +43,9 @@ const JBrowse = observer(({ pluginManager }) => { const { rootModel } = pluginManager const { session, jbrowse, error } = rootModel - if (firstLoad && session) setFirstLoad(false) + if (firstLoad && session) { + setFirstLoad(false) + } useEffect(() => { function sendIpcConfig(snapshot) { diff --git a/products/jbrowse-desktop/src/corePlugins.ts b/products/jbrowse-desktop/src/corePlugins.ts index a028fc8f68..ea68676a12 100644 --- a/products/jbrowse-desktop/src/corePlugins.ts +++ b/products/jbrowse-desktop/src/corePlugins.ts @@ -22,7 +22,7 @@ import SpreadsheetViewPlugin from '@jbrowse/plugin-spreadsheet-view' import SvInspectorPlugin from '@jbrowse/plugin-sv-inspector' import HicPlugin from '@jbrowse/plugin-hic' -export default [ +const corePlugins = [ SVG, LinearGenomeView, Alignments, @@ -47,3 +47,5 @@ export default [ BreakpointSplitView, HicPlugin, ] + +export default corePlugins diff --git a/products/jbrowse-desktop/src/index.js b/products/jbrowse-desktop/src/index.js index 942235d121..5315da8c0c 100644 --- a/products/jbrowse-desktop/src/index.js +++ b/products/jbrowse-desktop/src/index.js @@ -14,7 +14,9 @@ const initialTimestamp = Date.now() window.onbeforeunload = () => { const thisWindowId = getCurrentWindow().id BrowserWindow.getAllWindows().forEach(win => { - if (win.id !== thisWindowId) win.close() + if (win.id !== thisWindowId) { + win.close() + } }) } diff --git a/products/jbrowse-desktop/src/jbrowseModel.js b/products/jbrowse-desktop/src/jbrowseModel.js index af453a2137..83688c6737 100644 --- a/products/jbrowse-desktop/src/jbrowseModel.js +++ b/products/jbrowse-desktop/src/jbrowseModel.js @@ -84,7 +84,9 @@ export default function JBrowseDesktop( }, addAssemblyConf(assemblyConf) { const { name } = assemblyConf - if (!name) throw new Error('Can\'t add assembly with no "name"') + if (!name) { + throw new Error('Can\'t add assembly with no "name"') + } if (self.assemblyNames.includes(name)) { throw new Error( `Can't add assembly with name "${name}", an assembly with that name already exists`, @@ -110,13 +112,17 @@ export default function JBrowseDesktop( }, addTrackConf(trackConf) { const { type } = trackConf - if (!type) throw new Error(`unknown track type ${type}`) + if (!type) { + throw new Error(`unknown track type ${type}`) + } const length = self.tracks.push(trackConf) return self.tracks[length - 1] }, addConnectionConf(connectionConf) { const { type } = connectionConf - if (!type) throw new Error(`unknown connection type ${type}`) + if (!type) { + throw new Error(`unknown connection type ${type}`) + } const length = self.connections.push(connectionConf) return self.connections[length - 1] }, diff --git a/products/jbrowse-desktop/src/rootModel.ts b/products/jbrowse-desktop/src/rootModel.ts index ac7258b88f..7d761a6efd 100644 --- a/products/jbrowse-desktop/src/rootModel.ts +++ b/products/jbrowse-desktop/src/rootModel.ts @@ -143,7 +143,9 @@ export default function RootModel(pluginManager: PluginManager) { self.setSession(sessionSnapshot) if (sessionSnapshot) { this.setHistory(UndoManager.create({}, { targetStore: self.session })) - } else this.setHistory(undefined) + } else { + this.setHistory(undefined) + } }, // eslint-disable-next-line @typescript-eslint/no-explicit-any setHistory(history: any) { diff --git a/products/jbrowse-desktop/src/sessionModelFactory.ts b/products/jbrowse-desktop/src/sessionModelFactory.ts index 6bf36312ad..a8226adb82 100644 --- a/products/jbrowse-desktop/src/sessionModelFactory.ts +++ b/products/jbrowse-desktop/src/sessionModelFactory.ts @@ -227,9 +227,13 @@ export default function sessionModelFactory( }, updateDrawerWidth(drawerWidth: number) { - if (drawerWidth === self.drawerWidth) return self.drawerWidth + if (drawerWidth === self.drawerWidth) { + return self.drawerWidth + } let newDrawerWidth = drawerWidth - if (newDrawerWidth < minDrawerWidth) newDrawerWidth = minDrawerWidth + if (newDrawerWidth < minDrawerWidth) { + newDrawerWidth = minDrawerWidth + } self.drawerWidth = newDrawerWidth return newDrawerWidth }, @@ -243,7 +247,9 @@ export default function sessionModelFactory( addView(typeName: string, initialState = {}) { const typeDefinition = pluginManager.getElementType('view', typeName) - if (!typeDefinition) throw new Error(`unknown view type ${typeName}`) + if (!typeDefinition) { + throw new Error(`unknown view type ${typeName}`) + } const length = self.views.push({ ...initialState, @@ -307,7 +313,9 @@ export default function sessionModelFactory( const type = 'configuration editor widget(s)' callbacks.push(() => this.hideWidget(node)) dereferenced = true - if (!dereferenceTypeCount[type]) dereferenceTypeCount[type] = 0 + if (!dereferenceTypeCount[type]) { + dereferenceTypeCount[type] = 0 + } dereferenceTypeCount[type] += 1 } if (!dereferenced) { @@ -406,7 +414,9 @@ export default function sessionModelFactory( configuration = { type: typeName }, ) { const typeDefinition = pluginManager.getElementType('widget', typeName) - if (!typeDefinition) throw new Error(`unknown widget type ${typeName}`) + if (!typeDefinition) { + throw new Error(`unknown widget type ${typeName}`) + } const data = { ...initialState, id, diff --git a/products/jbrowse-react-linear-genome-view/src/corePlugins.ts b/products/jbrowse-react-linear-genome-view/src/corePlugins.ts index 55e04e7fcb..e6588e702a 100644 --- a/products/jbrowse-react-linear-genome-view/src/corePlugins.ts +++ b/products/jbrowse-react-linear-genome-view/src/corePlugins.ts @@ -9,7 +9,7 @@ import SVG from '@jbrowse/plugin-svg' import Variants from '@jbrowse/plugin-variants' import Wiggle from '@jbrowse/plugin-wiggle' -export default [ +const corePlugins = [ SVG, Alignments, BED, @@ -21,3 +21,5 @@ export default [ Variants, Wiggle, ] + +export default corePlugins diff --git a/products/jbrowse-react-linear-genome-view/src/createModel/createSessionModel.ts b/products/jbrowse-react-linear-genome-view/src/createModel/createSessionModel.ts index d2fc2a8b26..046c6a9ec1 100644 --- a/products/jbrowse-react-linear-genome-view/src/createModel/createSessionModel.ts +++ b/products/jbrowse-react-linear-genome-view/src/createModel/createSessionModel.ts @@ -142,10 +142,14 @@ export default function sessionModelFactory(pluginManager: PluginManager) { initialSnapshot = {}, ) { const { type } = configuration - if (!type) throw new Error('track configuration has no `type` listed') + if (!type) { + throw new Error('track configuration has no `type` listed') + } const name = readConfObject(configuration, 'name') const connectionType = pluginManager.getConnectionType(type) - if (!connectionType) throw new Error(`unknown connection type ${type}`) + if (!connectionType) { + throw new Error(`unknown connection type ${type}`) + } const connectionData = { ...initialSnapshot, name, @@ -184,7 +188,9 @@ export default function sessionModelFactory(pluginManager: PluginManager) { const type = 'configuration editor widget(s)' callbacks.push(() => this.hideWidget(node)) dereferenced = true - if (!dereferenceTypeCount[type]) dereferenceTypeCount[type] = 0 + if (!dereferenceTypeCount[type]) { + dereferenceTypeCount[type] = 0 + } dereferenceTypeCount[type] += 1 } if (!dereferenced) { @@ -226,7 +232,9 @@ export default function sessionModelFactory(pluginManager: PluginManager) { addView(typeName: string, initialState = {}) { const typeDefinition = pluginManager.getElementType('view', typeName) - if (!typeDefinition) throw new Error(`unknown view type ${typeName}`) + if (!typeDefinition) { + throw new Error(`unknown view type ${typeName}`) + } self.view = { ...initialState, @@ -243,7 +251,9 @@ export default function sessionModelFactory(pluginManager: PluginManager) { configuration = { type: typeName }, ) { const typeDefinition = pluginManager.getElementType('widget', typeName) - if (!typeDefinition) throw new Error(`unknown widget type ${typeName}`) + if (!typeDefinition) { + throw new Error(`unknown widget type ${typeName}`) + } const data = { ...initialState, id, @@ -339,10 +349,7 @@ export default function sessionModelFactory(pluginManager: PluginManager) { export type SessionStateModel = ReturnType export type SessionModel = Instance -/* eslint-disable @typescript-eslint/no-unused-vars */ -// @ts-ignore function z(x: Instance): AbstractSessionModel { - /* eslint-enable @typescript-eslint/no-unused-vars */ // this function's sole purpose is to get typescript to check // that the session model implements all of AbstractSessionModel return x diff --git a/products/jbrowse-react-linear-genome-view/stories/JBrowseLinearGenomeView.stories.tsx b/products/jbrowse-react-linear-genome-view/stories/JBrowseLinearGenomeView.stories.tsx index 19537bc078..99970dab90 100644 --- a/products/jbrowse-react-linear-genome-view/stories/JBrowseLinearGenomeView.stories.tsx +++ b/products/jbrowse-react-linear-genome-view/stories/JBrowseLinearGenomeView.stories.tsx @@ -10,10 +10,6 @@ import { import volvoxConfig from '../public/test_data/volvox/config.json' import volvoxSession from '../public/volvox-session.json' -export default { - title: 'Linear View', -} - const theme = createJBrowseTheme() // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -251,3 +247,9 @@ export const WithRuntimePlugins = () => { ) } + +const JBrowseLinearGenomeViewStories = { + title: 'Linear View', +} + +export default JBrowseLinearGenomeViewStories diff --git a/products/jbrowse-react-linear-genome-view/stories/NextstrainGenomeView.stories.tsx b/products/jbrowse-react-linear-genome-view/stories/NextstrainGenomeView.stories.tsx index 257f0ba08f..2411330a8a 100644 --- a/products/jbrowse-react-linear-genome-view/stories/NextstrainGenomeView.stories.tsx +++ b/products/jbrowse-react-linear-genome-view/stories/NextstrainGenomeView.stories.tsx @@ -7,10 +7,6 @@ import { } from '../src' import nextstrainConfig from '../public/nextstrain_covid.json' -export default { - title: 'Nextstrain View', -} - const theme = createJBrowseTheme({ palette: { primary: { @@ -43,3 +39,9 @@ export const NextstrainGenomeView = () => { ) } + +const NextstrainStory = { + title: 'Nextstrain View', +} + +export default NextstrainStory diff --git a/products/jbrowse-web/rescripts/webpackRescript.js b/products/jbrowse-web/rescripts/webpackRescript.js index 9ef48d93c2..842bbdbcc5 100644 --- a/products/jbrowse-web/rescripts/webpackRescript.js +++ b/products/jbrowse-web/rescripts/webpackRescript.js @@ -1,4 +1,3 @@ -// eslint-disable-next-line import/no-extraneous-dependencies const webpack = require('webpack') module.exports = { diff --git a/products/jbrowse-web/rescripts/workerLoaderRescript.js b/products/jbrowse-web/rescripts/workerLoaderRescript.js index 78216f02e7..8f7469a923 100644 --- a/products/jbrowse-web/rescripts/workerLoaderRescript.js +++ b/products/jbrowse-web/rescripts/workerLoaderRescript.js @@ -2,7 +2,6 @@ * based on https://github.com/linonetwo/rescript-worker-loader, but with * custom resolving of babel-plugin-named-asset-import */ -// eslint-disable-next-line import/no-extraneous-dependencies const getCacheIdentifier = require('react-dev-utils/getCacheIdentifier') module.exports = config => { diff --git a/products/jbrowse-web/rescripts/yarnWorkspacesRescript.js b/products/jbrowse-web/rescripts/yarnWorkspacesRescript.js index ce84b5570b..0867f5ee97 100644 --- a/products/jbrowse-web/rescripts/yarnWorkspacesRescript.js +++ b/products/jbrowse-web/rescripts/yarnWorkspacesRescript.js @@ -5,9 +5,7 @@ */ const fs = require('fs') const path = require('path') -// eslint-disable-next-line import/no-extraneous-dependencies const spawn = require('cross-spawn') -// eslint-disable-next-line import/no-extraneous-dependencies const root = require('find-yarn-workspace-root')() const pgks = spawn.sync('yarn', ['--json', 'workspaces', 'info']) diff --git a/products/jbrowse-web/src/Loader.tsx b/products/jbrowse-web/src/Loader.tsx index 8e76057a65..0825f4f319 100644 --- a/products/jbrowse-web/src/Loader.tsx +++ b/products/jbrowse-web/src/Loader.tsx @@ -658,7 +658,7 @@ const PlatformSpecificFatalErrorDialog = (props: unknown) => { /> ) } -export default ({ initialTimestamp }: { initialTimestamp: number }) => { +const LoaderWrapper = ({ initialTimestamp }: { initialTimestamp: number }) => { return ( @@ -668,4 +668,6 @@ export default ({ initialTimestamp }: { initialTimestamp: number }) => { ) } +export default LoaderWrapper + export type SessionLoader = Instance diff --git a/products/jbrowse-web/src/RecentSessionCard.js b/products/jbrowse-web/src/RecentSessionCard.js index 1cbb5e9db7..83ae82267d 100644 --- a/products/jbrowse-web/src/RecentSessionCard.js +++ b/products/jbrowse-web/src/RecentSessionCard.js @@ -30,7 +30,9 @@ function RecentSessionCard({ sessionName, onClick, onDelete }) { const handleMenuClose = action => { setMenuAnchorEl(null) - if (action === 'delete') return onDelete(sessionName) + if (action === 'delete') { + return onDelete(sessionName) + } return undefined } diff --git a/products/jbrowse-web/src/ShareButton.tsx b/products/jbrowse-web/src/ShareButton.tsx index 0b38057e2d..d31a4b59b7 100644 --- a/products/jbrowse-web/src/ShareButton.tsx +++ b/products/jbrowse-web/src/ShareButton.tsx @@ -1,4 +1,3 @@ -/* eslint-disable no-nested-ternary */ import React, { useState, useEffect } from 'react' import Button from '@material-ui/core/Button' import ShareIcon from '@material-ui/icons/Share' @@ -266,7 +265,6 @@ const ShareDialog = observer( InputProps={{ readOnly: true, }} - // eslint-disable-next-line react/jsx-no-duplicate-props inputProps={{ 'data-testid': 'share-url-text' }} variant="filled" style={{ width: '100%' }} diff --git a/products/jbrowse-web/src/corePlugins.ts b/products/jbrowse-web/src/corePlugins.ts index a028fc8f68..ea68676a12 100644 --- a/products/jbrowse-web/src/corePlugins.ts +++ b/products/jbrowse-web/src/corePlugins.ts @@ -22,7 +22,7 @@ import SpreadsheetViewPlugin from '@jbrowse/plugin-spreadsheet-view' import SvInspectorPlugin from '@jbrowse/plugin-sv-inspector' import HicPlugin from '@jbrowse/plugin-hic' -export default [ +const corePlugins = [ SVG, LinearGenomeView, Alignments, @@ -47,3 +47,5 @@ export default [ BreakpointSplitView, HicPlugin, ] + +export default corePlugins diff --git a/products/jbrowse-web/src/jbrowseModel.js b/products/jbrowse-web/src/jbrowseModel.js index e3b45502ec..04ebdbb29f 100644 --- a/products/jbrowse-web/src/jbrowseModel.js +++ b/products/jbrowse-web/src/jbrowseModel.js @@ -104,7 +104,9 @@ export default function JBrowseWeb( }, addTrackConf(trackConf) { const { type } = trackConf - if (!type) throw new Error(`unknown track type ${type}`) + if (!type) { + throw new Error(`unknown track type ${type}`) + } const track = self.tracks.find(t => t.trackId === trackConf.trackId) if (track) { return track @@ -125,7 +127,9 @@ export default function JBrowseWeb( }, addConnectionConf(connectionConf) { const { type } = connectionConf - if (!type) throw new Error(`unknown connection type ${type}`) + if (!type) { + throw new Error(`unknown connection type ${type}`) + } const length = self.connections.push(connectionConf) return self.connections[length - 1] }, @@ -176,8 +180,11 @@ export default function JBrowseWeb( postProcessor(snapshot) { function removeAttr(obj, attr) { for (const prop in obj) { - if (prop === attr) delete obj[prop] - else if (typeof obj[prop] === 'object') removeAttr(obj[prop]) + if (prop === attr) { + delete obj[prop] + } else if (typeof obj[prop] === 'object') { + removeAttr(obj[prop]) + } } } removeAttr(snapshot, 'baseUri') diff --git a/products/jbrowse-web/src/rootModel.ts b/products/jbrowse-web/src/rootModel.ts index 17dbd77f26..ebb8bb7035 100644 --- a/products/jbrowse-web/src/rootModel.ts +++ b/products/jbrowse-web/src/rootModel.ts @@ -169,14 +169,12 @@ export default function RootModel( addDisposer( self, autorun(() => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars for (const [_, val] of self.savedSessionsVolatile.entries()) { try { const key = self.localStorageId(val.name) localStorage.setItem(key, JSON.stringify({ session: val })) } catch (e) { if (e.code === '22' || e.code === '1024') { - // eslint-disable-next-line no-alert alert( 'Local storage is full! Please use the "Open sessions" panel to remove old sessions', ) diff --git a/products/jbrowse-web/src/rpc.worker.ts b/products/jbrowse-web/src/rpc.worker.ts index bd1bb2567c..1f6a4dc094 100644 --- a/products/jbrowse-web/src/rpc.worker.ts +++ b/products/jbrowse-web/src/rpc.worker.ts @@ -13,7 +13,9 @@ import corePlugins from './corePlugins' // prevent mobx-react from doing funny things when we render in the worker. // but only if we are running in the browser. in node tests, leave it alone. -if (typeof __webpack_require__ === 'function') useStaticRendering(true) +if (typeof __webpack_require__ === 'function') { + useStaticRendering(true) +} interface WorkerConfiguration { plugins: PluginDefinition[] diff --git a/products/jbrowse-web/src/sessionModelFactory.ts b/products/jbrowse-web/src/sessionModelFactory.ts index 59ce6e0097..1e5dd9c8fe 100644 --- a/products/jbrowse-web/src/sessionModelFactory.ts +++ b/products/jbrowse-web/src/sessionModelFactory.ts @@ -208,10 +208,14 @@ export default function sessionModelFactory( initialSnapshot = {}, ) { const { type } = configuration - if (!type) throw new Error('track configuration has no `type` listed') + if (!type) { + throw new Error('track configuration has no `type` listed') + } const name = readConfObject(configuration, 'name') const connectionType = pluginManager.getConnectionType(type) - if (!connectionType) throw new Error(`unknown connection type ${type}`) + if (!connectionType) { + throw new Error(`unknown connection type ${type}`) + } const connectionData = { ...initialSnapshot, name, @@ -252,7 +256,9 @@ export default function sessionModelFactory( const type = 'configuration editor widget(s)' callbacks.push(() => this.hideWidget(node)) dereferenced = true - if (!dereferenceTypeCount[type]) dereferenceTypeCount[type] = 0 + if (!dereferenceTypeCount[type]) { + dereferenceTypeCount[type] = 0 + } dereferenceTypeCount[type] += 1 } if (!dereferenced) { @@ -316,9 +322,13 @@ export default function sessionModelFactory( }, updateDrawerWidth(drawerWidth: number) { - if (drawerWidth === self.drawerWidth) return self.drawerWidth + if (drawerWidth === self.drawerWidth) { + return self.drawerWidth + } let newDrawerWidth = drawerWidth - if (newDrawerWidth < minDrawerWidth) newDrawerWidth = minDrawerWidth + if (newDrawerWidth < minDrawerWidth) { + newDrawerWidth = minDrawerWidth + } self.drawerWidth = newDrawerWidth return newDrawerWidth }, @@ -332,7 +342,9 @@ export default function sessionModelFactory( addView(typeName: string, initialState = {}) { const typeDefinition = pluginManager.getElementType('view', typeName) - if (!typeDefinition) throw new Error(`unknown view type ${typeName}`) + if (!typeDefinition) { + throw new Error(`unknown view type ${typeName}`) + } const length = self.views.push({ ...initialState, @@ -456,7 +468,9 @@ export default function sessionModelFactory( configuration = { type: typeName }, ) { const typeDefinition = pluginManager.getElementType('widget', typeName) - if (!typeDefinition) throw new Error(`unknown widget type ${typeName}`) + if (!typeDefinition) { + throw new Error(`unknown widget type ${typeName}`) + } const data = { ...initialState, id, @@ -684,8 +698,6 @@ export default function sessionModelFactory( export type SessionStateModel = ReturnType export type SessionModel = Instance -// @ts-ignore -// eslint-disable-next-line @typescript-eslint/no-unused-vars function z(x: Instance): AbstractSessionModel { // this function's sole purpose is to get typescript to check // that the session model implements all of AbstractSessionModel diff --git a/products/jbrowse-web/src/tests/util.js b/products/jbrowse-web/src/tests/util.js index 3fee59b743..ce974b00ff 100644 --- a/products/jbrowse-web/src/tests/util.js +++ b/products/jbrowse-web/src/tests/util.js @@ -1,4 +1,4 @@ -import rangeParser from 'range-parser' // eslint-disable-line import/no-extraneous-dependencies +import rangeParser from 'range-parser' import PluginManager from '@jbrowse/core/PluginManager' import JBrowseRootModelFactory from '../rootModel' import configSnapshot from '../../test_data/volvox/config.json' @@ -29,7 +29,9 @@ export function getPluginManager(initialState, adminMode = true) { JSON.stringify({ session: rootModel.jbrowse.defaultSession }), ) rootModel.activateSession(name) - } else rootModel.setDefaultSession() + } else { + rootModel.setDefaultSession() + } rootModel.session.views.map(view => view.setWidth(800)) pluginManager.setRootModel(rootModel) diff --git a/scripts/build.js b/scripts/build.js index 882d15fd17..54493143f4 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -1,10 +1,8 @@ -/* eslint-disable import/no-extraneous-dependencies */ const fs = require('fs') const path = require('path') const { DepGraph } = require('dependency-graph') const spawn = require('cross-spawn') const workspaceRoot = require('find-yarn-workspace-root')() -/* eslint-enable import/no-extraneous-dependencies */ const DEPENDENCY_TYPES = [ 'devDependencies', diff --git a/scripts/changelog.js b/scripts/changelog.js index 181fd8109b..c077471390 100644 --- a/scripts/changelog.js +++ b/scripts/changelog.js @@ -1,5 +1,4 @@ /* eslint-disable no-console */ -// eslint-disable-next-line import/no-extraneous-dependencies const spawn = require('cross-spawn') function main(changed, version) { diff --git a/scripts/pre-commit.js b/scripts/pre-commit.js index 8b778d4121..222fa7c3e7 100644 --- a/scripts/pre-commit.js +++ b/scripts/pre-commit.js @@ -3,7 +3,6 @@ * JS/TS files ignored since ESLint provides formatting feedback for those */ -// eslint-disable-next-line import/no-extraneous-dependencies const spawn = require('cross-spawn') function main() { diff --git a/website/docs/figure.jsx b/website/docs/figure.jsx index 7e54889fa8..e62ff4276e 100644 --- a/website/docs/figure.jsx +++ b/website/docs/figure.jsx @@ -1,4 +1,4 @@ -/* eslint-disable react/prop-types,import/no-unresolved */ +/* eslint-disable react/prop-types */ import React from 'react' import useBaseUrl from '@docusaurus/useBaseUrl' diff --git a/website/docs/md_parser.js b/website/docs/md_parser.js index f2d4e44b75..fd7e57f377 100755 --- a/website/docs/md_parser.js +++ b/website/docs/md_parser.js @@ -1,4 +1,4 @@ -/* eslint-disable no-console,no-continue */ +/* eslint-disable no-console */ const readline = require('readline') const rl = readline.createInterface({ @@ -36,8 +36,11 @@ let topLevel = false continue } if (readingHeader === false) { - if (line.startsWith('#')) console.log(`#${line}`) - else console.log(line) + if (line.startsWith('#')) { + console.log(`#${line}`) + } else { + console.log(line) + } } } })() diff --git a/website/docs/tex_parser.js b/website/docs/tex_parser.js index 0faff877f9..2a1ccb11f9 100755 --- a/website/docs/tex_parser.js +++ b/website/docs/tex_parser.js @@ -1,4 +1,4 @@ -/* eslint-disable no-console,no-continue */ +/* eslint-disable no-console */ const readline = require('readline') const acorn = require('acorn') const jsx = require('acorn-jsx') diff --git a/website/src/pages/index.js b/website/src/pages/index.js index ec6aa6781e..9cb534e0c2 100644 --- a/website/src/pages/index.js +++ b/website/src/pages/index.js @@ -1,8 +1,6 @@ import React from 'react' -// eslint-disable-next-line import/no-unresolved import Layout from '@theme/Layout' -// eslint-disable-next-line import/no-unresolved import useDocusaurusContext from '@docusaurus/useDocusaurusContext' import { makeStyles } from '@material-ui/core/styles' import Link from '@material-ui/core/Link' diff --git a/website/src/pages/plugin_store.js b/website/src/pages/plugin_store.js index d5b78578af..e55b4f8840 100644 --- a/website/src/pages/plugin_store.js +++ b/website/src/pages/plugin_store.js @@ -2,9 +2,7 @@ import React, { useState } from 'react' import copy from 'copy-to-clipboard' -// eslint-disable-next-line import/no-unresolved import Layout from '@theme/Layout' -// eslint-disable-next-line import/no-unresolved import useDocusaurusContext from '@docusaurus/useDocusaurusContext' import { makeStyles } from '@material-ui/core/styles' @@ -30,7 +28,6 @@ import CloseIcon from '@material-ui/icons/Close' import { DialogContent } from '@material-ui/core' -// eslint-disable-next-line import/no-unresolved import { plugins } from '../../plugins.json' const useStyles = makeStyles(theme => ({