From 88e8f1574876b1842db34d52a86d784bf938f696 Mon Sep 17 00:00:00 2001 From: Mathias Bynens Date: Wed, 25 Mar 2020 15:33:12 +0100 Subject: [PATCH] Enable no-case-declarations lint rule Lexical declarations in `case` and `default` clauses are a footgun, since they are visible in the entire switch block, but they only get initialized upon assignment, which only happens if the relevant `case` is actually reached. To ensure that such lexical declarations only apply to the current `case` (which is usually the intention), `case` clauses containing them should be wrapped in curly braces to create an explicit block. More information: https://eslint.org/docs/rules/no-case-declarations Change-Id: I63d9341fcd76d4b9ce8281bd0e6573b886577f08 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2119685 Reviewed-by: Tim van der Lippe Commit-Queue: Mathias Bynens --- .eslintrc.js | 1 + front_end/common/Color.js | 30 ++-- front_end/console/ConsoleFilter.js | 9 +- front_end/console/ConsolePrompt.js | 18 ++- front_end/coverage/CoverageListView.js | 15 +- .../css_overview/CSSOverviewCompletedView.js | 12 +- front_end/elements/ElementsTreeElement.js | 19 ++- front_end/elements/StylesSidebarPane.js | 22 ++- front_end/formatter_worker/FormatterWorker.js | 9 +- .../HeapSnapshotWorkerDispatcher.js | 19 ++- front_end/network/NetworkDataGridNode.js | 75 ++++++---- front_end/network/NetworkPanel.js | 9 +- front_end/profiler/ProfileDataGrid.js | 12 +- front_end/resources/IndexedDBViews.js | 9 +- front_end/sdk/ServerTiming.js | 9 +- front_end/sdk/TracingModel.js | 27 ++-- front_end/source_frame/XMLView.js | 15 +- front_end/sources/SourcesPanel.js | 21 ++- front_end/timeline/TimelineDetailsView.js | 12 +- .../TimelineFlameChartDataProvider.js | 35 +++-- front_end/timeline/TimelineUIUtils.js | 137 +++++++++++++----- front_end/timeline_model/TimelineModel.js | 54 ++++--- front_end/ui/ContextMenu.js | 9 +- front_end/ui/UIUtils.js | 4 +- scripts/localization/check_localizability.js | 11 +- .../utils/check_localized_strings.js | 24 ++- 26 files changed, 421 insertions(+), 196 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 915b7cdfaf..18adb3d9a8 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -49,6 +49,7 @@ module.exports = { // anti-patterns 'no-caller': 2, + 'no-case-declarations': 2, 'no-cond-assign': 2, 'no-console': [2, {'allow': ['assert', 'context', 'error', 'timeStamp', 'time', 'timeEnd', 'warn']}], 'no-debugger': 2, diff --git a/front_end/common/Color.js b/front_end/common/Color.js index 796a0c91da..45fd6209e2 100644 --- a/front_end/common/Color.js +++ b/front_end/common/Color.js @@ -577,44 +577,51 @@ export class Color { } switch (format) { - case Format.Original: + case Format.Original: { return this._originalText; - case Format.RGB: + } + case Format.RGB: { if (this.hasAlpha()) { return null; } return Platform.StringUtilities.sprintf( 'rgb(%d, %d, %d)', toRgbValue(this._rgba[0]), toRgbValue(this._rgba[1]), toRgbValue(this._rgba[2])); - case Format.RGBA: + } + case Format.RGBA: { return Platform.StringUtilities.sprintf( 'rgba(%d, %d, %d, %f)', toRgbValue(this._rgba[0]), toRgbValue(this._rgba[1]), toRgbValue(this._rgba[2]), this._rgba[3]); - case Format.HSL: + } + case Format.HSL: { if (this.hasAlpha()) { return null; } const hsl = this.hsla(); return Platform.StringUtilities.sprintf( 'hsl(%d, %d%, %d%)', Math.round(hsl[0] * 360), Math.round(hsl[1] * 100), Math.round(hsl[2] * 100)); - case Format.HSLA: + } + case Format.HSLA: { const hsla = this.hsla(); return Platform.StringUtilities.sprintf( 'hsla(%d, %d%, %d%, %f)', Math.round(hsla[0] * 360), Math.round(hsla[1] * 100), Math.round(hsla[2] * 100), hsla[3]); - case Format.HEXA: + } + case Format.HEXA: { return Platform.StringUtilities .sprintf( '#%s%s%s%s', toHexValue(this._rgba[0]), toHexValue(this._rgba[1]), toHexValue(this._rgba[2]), toHexValue(this._rgba[3])) .toLowerCase(); - case Format.HEX: + } + case Format.HEX: { if (this.hasAlpha()) { return null; } return Platform.StringUtilities .sprintf('#%s%s%s', toHexValue(this._rgba[0]), toHexValue(this._rgba[1]), toHexValue(this._rgba[2])) .toLowerCase(); - case Format.ShortHEXA: + } + case Format.ShortHEXA: { const hexFormat = this.detectHEXFormat(); if (hexFormat !== Format.ShortHEXA && hexFormat !== Format.ShortHEX) { return null; @@ -624,7 +631,8 @@ export class Color { '#%s%s%s%s', toShortHexValue(this._rgba[0]), toShortHexValue(this._rgba[1]), toShortHexValue(this._rgba[2]), toShortHexValue(this._rgba[3])) .toLowerCase(); - case Format.ShortHEX: + } + case Format.ShortHEX: { if (this.hasAlpha()) { return null; } @@ -636,8 +644,10 @@ export class Color { '#%s%s%s', toShortHexValue(this._rgba[0]), toShortHexValue(this._rgba[1]), toShortHexValue(this._rgba[2])) .toLowerCase(); - case Format.Nickname: + } + case Format.Nickname: { return this.nickname(); + } } return this._originalText; diff --git a/front_end/console/ConsoleFilter.js b/front_end/console/ConsoleFilter.js index 818b3e8603..2e6c28bf3b 100644 --- a/front_end/console/ConsoleFilter.js +++ b/front_end/console/ConsoleFilter.js @@ -91,12 +91,13 @@ export class ConsoleFilter { } } else { switch (filter.key) { - case FilterType.Context: + case FilterType.Context: { if (!passesFilter(filter, message.context, false /* exactMatch */)) { return false; } break; - case FilterType.Source: + } + case FilterType.Source: { const sourceNameForMessage = message.source ? SDK.ConsoleModel.MessageSourceDisplayName.get( /** @type {!SDK.ConsoleModel.MessageSource} */ (message.source)) : @@ -105,11 +106,13 @@ export class ConsoleFilter { return false; } break; - case FilterType.Url: + } + case FilterType.Url: { if (!passesFilter(filter, message.url, false /* exactMatch */)) { return false; } break; + } } } } diff --git a/front_end/console/ConsolePrompt.js b/front_end/console/ConsolePrompt.js index 7cad444e7d..dace78609b 100644 --- a/front_end/console/ConsolePrompt.js +++ b/front_end/console/ConsolePrompt.js @@ -214,7 +214,7 @@ export class ConsolePrompt extends UI.Widget.Widget { const cursorY = this._editor.visualCoordinates(selection.endLine, selection.endColumn).y; switch (keyboardEvent.keyCode) { - case UI.KeyboardShortcut.Keys.Up.code: + case UI.KeyboardShortcut.Keys.Up.code: { const startY = this._editor.visualCoordinates(0, 0).y; if (keyboardEvent.shiftKey || !selection.isEmpty() || cursorY !== startY) { break; @@ -222,7 +222,8 @@ export class ConsolePrompt extends UI.Widget.Widget { newText = this._history.previous(this.text()); isPrevious = true; break; - case UI.KeyboardShortcut.Keys.Down.code: + } + case UI.KeyboardShortcut.Keys.Down.code: { const fullRange = this._editor.fullRange(); const endY = this._editor.visualCoordinates(fullRange.endLine, fullRange.endColumn).y; if (keyboardEvent.shiftKey || !selection.isEmpty() || cursorY !== endY) { @@ -230,27 +231,32 @@ export class ConsolePrompt extends UI.Widget.Widget { } newText = this._history.next(); break; - case UI.KeyboardShortcut.Keys.P.code: // Ctrl+P = Previous + } + case UI.KeyboardShortcut.Keys.P.code: { // Ctrl+P = Previous if (Host.Platform.isMac() && keyboardEvent.ctrlKey && !keyboardEvent.metaKey && !keyboardEvent.altKey && !keyboardEvent.shiftKey) { newText = this._history.previous(this.text()); isPrevious = true; } break; - case UI.KeyboardShortcut.Keys.N.code: // Ctrl+N = Next + } + case UI.KeyboardShortcut.Keys.N.code: { // Ctrl+N = Next if (Host.Platform.isMac() && keyboardEvent.ctrlKey && !keyboardEvent.metaKey && !keyboardEvent.altKey && !keyboardEvent.shiftKey) { newText = this._history.next(); } break; - case UI.KeyboardShortcut.Keys.Enter.code: + } + case UI.KeyboardShortcut.Keys.Enter.code: { this._enterKeyPressed(keyboardEvent); break; - case UI.KeyboardShortcut.Keys.Tab.code: + } + case UI.KeyboardShortcut.Keys.Tab.code: { if (!this.text()) { keyboardEvent.consume(); } break; + } } if (newText === undefined) { diff --git a/front_end/coverage/CoverageListView.js b/front_end/coverage/CoverageListView.js index aef6bba12c..7fc8f69ed0 100644 --- a/front_end/coverage/CoverageListView.js +++ b/front_end/coverage/CoverageListView.js @@ -292,7 +292,7 @@ export class GridNode extends DataGrid.SortableDataGrid.SortableDataGridNode { createCell(columnId) { const cell = this.createTD(columnId); switch (columnId) { - case 'url': + case 'url': { cell.title = this._url; const outer = cell.createChild('div', 'url-outer'); const prefix = outer.createChild('div', 'url-prefix'); @@ -305,7 +305,8 @@ export class GridNode extends DataGrid.SortableDataGrid.SortableDataGridNode { } this.setCellAccessibleName(this._url, cell, columnId); break; - case 'type': + } + case 'type': { cell.textContent = CoverageListView._typeToString(this._coverageInfo.type()); if (this._coverageInfo.type() & CoverageType.JavaScriptPerFunction) { cell.title = ls @@ -315,14 +316,16 @@ export class GridNode extends DataGrid.SortableDataGrid.SortableDataGridNode { `JS coverage with per block granularity: Once a block of JavaScript was executed, that block is marked as covered.`; } break; - case 'size': + } + case 'size': { const sizeSpan = cell.createChild('span'); sizeSpan.textContent = Number.withThousandsSeparator(this._coverageInfo.size() || 0); const sizeAccessibleName = (this._coverageInfo.size() === 1) ? ls`1 byte` : ls`${this._coverageInfo.size() || 0} bytes`; this.setCellAccessibleName(sizeAccessibleName, cell, columnId); break; - case 'unusedSize': + } + case 'unusedSize': { const unusedSize = this._coverageInfo.unusedSize() || 0; const unusedSizeSpan = cell.createChild('span'); const unusedPercentsSpan = cell.createChild('span', 'percent-value'); @@ -333,7 +336,8 @@ export class GridNode extends DataGrid.SortableDataGrid.SortableDataGridNode { ls`${unusedSize} bytes, ${unusedPercentFormatted}`; this.setCellAccessibleName(unusedAccessibleName, cell, columnId); break; - case 'bars': + } + case 'bars': { const barContainer = cell.createChild('div', 'bar-container'); const unusedPercent = this._percentageString(this._coverageInfo.unusedPercentage()); const usedPercent = this._percentageString(this._coverageInfo.usedPercentage()); @@ -361,6 +365,7 @@ export class GridNode extends DataGrid.SortableDataGrid.SortableDataGridNode { } this.setCellAccessibleName( ls`${unusedPercent} % of file unused, ${usedPercent} % of file used`, cell, columnId); + } } return cell; } diff --git a/front_end/css_overview/CSSOverviewCompletedView.js b/front_end/css_overview/CSSOverviewCompletedView.js index 165d91ea78..e9117ce13f 100644 --- a/front_end/css_overview/CSSOverviewCompletedView.js +++ b/front_end/css_overview/CSSOverviewCompletedView.js @@ -335,29 +335,33 @@ export class CSSOverviewCompletedView extends UI.Panel.PanelWithSidebar { let tabTitle = ''; switch (type) { - case 'color': + case 'color': { const {section, color} = evt.data; id = `${section}-${color}`; tabTitle = `${color.toUpperCase()} (${section})`; break; + } - case 'unused-declarations': + case 'unused-declarations': { const {declaration} = evt.data; id = `${declaration}`; tabTitle = `${declaration}`; break; + } - case 'media-queries': + case 'media-queries': { const {text} = evt.data; id = `${text}`; tabTitle = `${text}`; break; + } - case 'font-info': + case 'font-info': { const {name} = evt.data; id = `${name}`; tabTitle = `${name}`; break; + } } let view = this._viewMap.get(id); diff --git a/front_end/elements/ElementsTreeElement.js b/front_end/elements/ElementsTreeElement.js index 3333e3a01e..3f6d05e4ab 100644 --- a/front_end/elements/ElementsTreeElement.js +++ b/front_end/elements/ElementsTreeElement.js @@ -1574,7 +1574,7 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement { titleDOM, /** @type {string} */ (node.name), /** @type {string} */ (node.value), updateRecord, true); break; - case Node.ELEMENT_NODE: + case Node.ELEMENT_NODE: { const pseudoType = node.pseudoType(); if (pseudoType) { this._buildPseudoElementDOM(titleDOM, pseudoType); @@ -1619,6 +1619,7 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement { this._buildTagDOM(titleDOM, tagName, true, false, updateRecord); } break; + } case Node.TEXT_NODE: if (node.parentNode && node.parentNode.nodeName().toLowerCase() === 'script') { @@ -1648,12 +1649,13 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement { } break; - case Node.COMMENT_NODE: + case Node.COMMENT_NODE: { const commentElement = titleDOM.createChild('span', 'webkit-html-comment'); commentElement.createTextChild(''); break; + } - case Node.DOCUMENT_TYPE_NODE: + case Node.DOCUMENT_TYPE_NODE: { const docTypeElement = titleDOM.createChild('span', 'webkit-html-doctype'); docTypeElement.createTextChild(''); break; + } - case Node.CDATA_SECTION_NODE: + case Node.CDATA_SECTION_NODE: { const cdataElement = titleDOM.createChild('span', 'webkit-html-text-node'); cdataElement.createTextChild(''); break; + } - case Node.DOCUMENT_FRAGMENT_NODE: + case Node.DOCUMENT_FRAGMENT_NODE: { const fragmentElement = titleDOM.createChild('span', 'webkit-html-fragment'); fragmentElement.textContent = Platform.StringUtilities.collapseWhitespace(node.nodeNameInCorrectCase()); break; - default: + } + + default: { const nameWithSpaceCollapsed = Platform.StringUtilities.collapseWhitespace(node.nodeNameInCorrectCase()); titleDOM.createTextChild(nameWithSpaceCollapsed); + } } /** diff --git a/front_end/elements/StylesSidebarPane.js b/front_end/elements/StylesSidebarPane.js index 468485e0d8..0e2015ca86 100644 --- a/front_end/elements/StylesSidebarPane.js +++ b/front_end/elements/StylesSidebarPane.js @@ -241,11 +241,12 @@ export class StylesSidebarPane extends ElementsSidebarPane { switch (event.key) { case 'ArrowUp': - case 'ArrowLeft': + case 'ArrowLeft': { const sectionToFocus = section.previousSibling() || section.lastSibling(); sectionToFocus.element.focus(); event.consume(true); break; + } case 'ArrowDown': case 'ArrowRight': { const sectionToFocus = section.nextSibling() || section.firstSibling(); @@ -253,14 +254,16 @@ export class StylesSidebarPane extends ElementsSidebarPane { event.consume(true); break; } - case 'Home': + case 'Home': { section.firstSibling().element.focus(); event.consume(true); break; - case 'End': + } + case 'End': { section.lastSibling().element.focus(); event.consume(true); break; + } } } @@ -1413,10 +1416,11 @@ export class StylePropertiesSection { const mediaTextElement = mediaContainerElement.createChild('span', 'media-text'); switch (media.source) { case SDK.CSSMedia.Source.LINKED_SHEET: - case SDK.CSSMedia.Source.INLINE_SHEET: - mediaTextElement.textContent = 'media="' + media.text + '"'; + case SDK.CSSMedia.Source.INLINE_SHEET: { + mediaTextElement.textContent = `media="${media.text}"`; break; - case SDK.CSSMedia.Source.MEDIA_RULE: + } + case SDK.CSSMedia.Source.MEDIA_RULE: { const decoration = mediaContainerElement.createChild('span'); mediaContainerElement.insertBefore(decoration, mediaTextElement); decoration.textContent = '@media '; @@ -1427,9 +1431,11 @@ export class StylePropertiesSection { 'click', this._handleMediaRuleClick.bind(this, media, mediaTextElement), false); } break; - case SDK.CSSMedia.Source.IMPORT_RULE: - mediaTextElement.textContent = '@import ' + media.text; + } + case SDK.CSSMedia.Source.IMPORT_RULE: { + mediaTextElement.textContent = `@import ${media.text}`; break; + } } } } diff --git a/front_end/formatter_worker/FormatterWorker.js b/front_end/formatter_worker/FormatterWorker.js index a173bd7ecc..3a6e20240f 100644 --- a/front_end/formatter_worker/FormatterWorker.js +++ b/front_end/formatter_worker/FormatterWorker.js @@ -337,7 +337,7 @@ export function argumentsList(content) { const expression = parsed.body[0].expression; let params = null; switch (expression.type) { - case 'ClassExpression': + case 'ClassExpression': { if (!expression.body.body) { break; } @@ -346,16 +346,19 @@ export function argumentsList(content) { params = constructor.value.params; } break; - case 'ObjectExpression': + } + case 'ObjectExpression': { if (!expression.properties[0] || !expression.properties[0].value) { break; } params = expression.properties[0].value.params; break; + } case 'FunctionExpression': - case 'ArrowFunctionExpression': + case 'ArrowFunctionExpression': { params = expression.params; break; + } } if (!params) { return []; diff --git a/front_end/heap_snapshot_worker/HeapSnapshotWorkerDispatcher.js b/front_end/heap_snapshot_worker/HeapSnapshotWorkerDispatcher.js index 53a518af1f..86915219dd 100644 --- a/front_end/heap_snapshot_worker/HeapSnapshotWorkerDispatcher.js +++ b/front_end/heap_snapshot_worker/HeapSnapshotWorkerDispatcher.js @@ -62,13 +62,15 @@ export class HeapSnapshotWorkerDispatcher { const response = {callId: data.callId}; try { switch (data.disposition) { - case 'create': + case 'create': { const constructorFunction = this._findFunction(data.methodName); this._objects[data.objectId] = new constructorFunction(this); break; - case 'dispose': + } + case 'dispose': { delete this._objects[data.objectId]; break; + } case 'getter': { const object = this._objects[data.objectId]; const result = object[data.methodName]; @@ -89,17 +91,18 @@ export class HeapSnapshotWorkerDispatcher { response.result = object[data.methodName].apply(object, data.methodArguments); break; } - case 'evaluateForTest': + case 'evaluateForTest': { try { response.result = self.eval(data.source); - } catch (e) { - response.result = e.toString(); + } catch (error) { + response.result = error.toString(); } break; + } } - } catch (e) { - response.error = e.toString(); - response.errorCallStack = e.stack; + } catch (error) { + response.error = error.toString(); + response.errorCallStack = error.stack; if (data.methodName) { response.errorMethodName = data.methodName; } diff --git a/front_end/network/NetworkDataGridNode.js b/front_end/network/NetworkDataGridNode.js index bc81df608d..e7baee6699 100644 --- a/front_end/network/NetworkDataGridNode.js +++ b/front_end/network/NetworkDataGridNode.js @@ -904,64 +904,83 @@ export class NetworkRequestNode extends NetworkNode { */ renderCell(cell, columnId) { switch (columnId) { - case 'name': + case 'name': { this._renderPrimaryCell(cell, columnId); break; - case 'path': + } + case 'path': { this._renderPrimaryCell(cell, columnId, this._request.pathname); break; - case 'url': + } + case 'url': { this._renderPrimaryCell(cell, columnId, this._request.url()); break; - case 'method': + } + case 'method': { this._setTextAndTitle(cell, this._request.requestMethod); break; - case 'status': + } + case 'status': { this._renderStatusCell(cell); break; - case 'protocol': + } + case 'protocol': { this._setTextAndTitle(cell, this._request.protocol); break; - case 'scheme': + } + case 'scheme': { this._setTextAndTitle(cell, this._request.scheme); break; - case 'domain': + } + case 'domain': { this._setTextAndTitle(cell, this._request.domain); break; - case 'remoteaddress': + } + case 'remoteaddress': { this._setTextAndTitle(cell, this._request.remoteAddress()); break; - case 'cookies': + } + case 'cookies': { this._setTextAndTitle(cell, this._arrayLength(this._request.requestCookies)); break; - case 'setcookies': + } + case 'setcookies': { this._setTextAndTitle(cell, this._arrayLength(this._request.responseCookies)); break; - case 'priority': + } + case 'priority': { const priority = this._request.priority(); this._setTextAndTitle(cell, priority ? PerfUI.NetworkPriorities.uiLabelForNetworkPriority(priority) : ''); break; - case 'connectionid': + } + case 'connectionid': { this._setTextAndTitle(cell, this._request.connectionId); break; - case 'type': + } + case 'type': { this._setTextAndTitle(cell, this.displayType()); break; - case 'initiator': + } + case 'initiator': { this._renderInitiatorCell(cell); break; - case 'size': + } + case 'size': { this._renderSizeCell(cell); break; - case 'time': + } + case 'time': { this._renderTimeCell(cell); break; - case 'timeline': + } + case 'timeline': { this._setTextAndTitle(cell, ''); break; - default: + } + default: { this._setTextAndTitle(cell, this._request.responseHeaderValue(columnId) || ''); break; + } } } @@ -1159,7 +1178,7 @@ export class NetworkRequestNode extends NetworkNode { cell.appendChild(createTextNode(Common.UIString.UIString('Push / '))); } switch (initiator.type) { - case SDK.NetworkRequest.InitiatorType.Parser: + case SDK.NetworkRequest.InitiatorType.Parser: { cell.title = initiator.url + ':' + (initiator.lineNumber + 1); const uiSourceCode = Workspace.Workspace.WorkspaceImpl.instance().uiSourceCodeForURL(initiator.url); cell.appendChild(Components.Linkifier.Linkifier.linkifyURL(initiator.url, { @@ -1169,8 +1188,9 @@ export class NetworkRequestNode extends NetworkNode { })); this._appendSubtitle(cell, Common.UIString.UIString('Parser')); break; + } - case SDK.NetworkRequest.InitiatorType.Redirect: + case SDK.NetworkRequest.InitiatorType.Redirect: { cell.title = initiator.url; const redirectSource = /** @type {!SDK.NetworkRequest.NetworkRequest} */ (request.redirectSource()); console.assert(redirectSource); @@ -1182,8 +1202,9 @@ export class NetworkRequestNode extends NetworkNode { } this._appendSubtitle(cell, Common.UIString.UIString('Redirect')); break; + } - case SDK.NetworkRequest.InitiatorType.Script: + case SDK.NetworkRequest.InitiatorType.Script: { const networkManager = SDK.NetworkManager.NetworkManager.forRequest(request); /** * @type {!Components.Linkifier.Linkifier} @@ -1204,22 +1225,26 @@ export class NetworkRequestNode extends NetworkNode { cell.classList.add('network-script-initiated'); cell.request = request; break; + } - case SDK.NetworkRequest.InitiatorType.Preload: + case SDK.NetworkRequest.InitiatorType.Preload: { cell.title = Common.UIString.UIString('Preload'); cell.classList.add('network-dim-cell'); cell.appendChild(createTextNode(Common.UIString.UIString('Preload'))); break; + } - case SDK.NetworkRequest.InitiatorType.SignedExchange: + case SDK.NetworkRequest.InitiatorType.SignedExchange: { cell.appendChild(Components.Linkifier.Linkifier.linkifyURL(initiator.url)); this._appendSubtitle(cell, Common.UIString.UIString('signed-exchange')); break; + } - default: + default: { cell.title = Common.UIString.UIString('Other'); cell.classList.add('network-dim-cell'); cell.appendChild(createTextNode(Common.UIString.UIString('Other'))); + } } } diff --git a/front_end/network/NetworkPanel.js b/front_end/network/NetworkPanel.js index 34ff3a3987..5295cccd25 100644 --- a/front_end/network/NetworkPanel.js +++ b/front_end/network/NetworkPanel.js @@ -835,17 +835,19 @@ export class ActionDelegate { const panel = self.UI.context.flavor(NetworkPanel); console.assert(panel && panel instanceof NetworkPanel); switch (actionId) { - case 'network.toggle-recording': + case 'network.toggle-recording': { panel._toggleRecording(); return true; - case 'network.hide-request-details': + } + case 'network.hide-request-details': { if (!panel._networkItemView) { return false; } panel._hideRequestPanel(); panel._networkLogView.resetFocus(); return true; - case 'network.search': + } + case 'network.search': { const selection = self.UI.inspectorView.element.window().getSelection(); let queryCandidate = ''; if (selection.rangeCount) { @@ -853,6 +855,7 @@ export class ActionDelegate { } SearchNetworkView.openSearch(queryCandidate); return true; + } } return false; } diff --git a/front_end/profiler/ProfileDataGrid.js b/front_end/profiler/ProfileDataGrid.js index 3d2c14dc21..d29a9009e2 100644 --- a/front_end/profiler/ProfileDataGrid.js +++ b/front_end/profiler/ProfileDataGrid.js @@ -166,17 +166,19 @@ export class ProfileDataGridNode extends DataGrid.DataGrid.DataGridNode { createCell(columnId) { let cell; switch (columnId) { - case 'self': + case 'self': { cell = this._createValueCell(this.self, this.selfPercent, columnId); cell.classList.toggle('highlight', this._searchMatchedSelfColumn); break; + } - case 'total': + case 'total': { cell = this._createValueCell(this.total, this.totalPercent, columnId); cell.classList.toggle('highlight', this._searchMatchedTotalColumn); break; + } - case 'function': + case 'function': { cell = this.createTD(columnId); cell.classList.toggle('highlight', this._searchMatchedFunctionColumn); if (this._deoptReason) { @@ -197,10 +199,12 @@ export class ProfileDataGridNode extends DataGrid.DataGrid.DataGridNode { cell.appendChild(urlElement); this.linkElement = urlElement; break; + } - default: + default: { cell = super.createCell(columnId); break; + } } return cell; } diff --git a/front_end/resources/IndexedDBViews.js b/front_end/resources/IndexedDBViews.js index fd31fcc486..434a56bd8e 100644 --- a/front_end/resources/IndexedDBViews.js +++ b/front_end/resources/IndexedDBViews.js @@ -498,7 +498,7 @@ export class IDBDataGridNode extends DataGrid.DataGrid.DataGridNode { const value = /** @type {!SDK.RemoteObject.RemoteObject} */ (this.data[columnIdentifier]); switch (columnIdentifier) { - case 'value': + case 'value': { cell.removeChildren(); const objectPropSection = ObjectUI.ObjectPropertiesSection.ObjectPropertiesSection.defaultObjectPropertiesSection( @@ -506,14 +506,17 @@ export class IDBDataGridNode extends DataGrid.DataGrid.DataGridNode { cell.appendChild(objectPropSection.element); this.valueObjectPresentation = objectPropSection; break; + } case 'key': - case 'primaryKey': + case 'primaryKey': { cell.removeChildren(); const objectElement = ObjectUI.ObjectPropertiesSection.ObjectPropertiesSection.defaultObjectPresentation( value, undefined /* linkifier */, true /* skipProto */, true /* readOnly */); cell.appendChild(objectElement); break; - default: + } + default: { + } } return cell; diff --git a/front_end/sdk/ServerTiming.js b/front_end/sdk/ServerTiming.js index 7007436acd..9600777c43 100644 --- a/front_end/sdk/ServerTiming.js +++ b/front_end/sdk/ServerTiming.js @@ -178,7 +178,7 @@ export class ServerTiming { */ static getParserForParameter(paramName) { switch (paramName) { - case 'dur': + case 'dur': { /** * @param {!Object} entry * @param {*} paramValue @@ -195,8 +195,9 @@ export class ServerTiming { } } return durParser; + } - case 'desc': + case 'desc': { /** * @param {!Object} entry * @param {?string} paramValue @@ -205,9 +206,11 @@ export class ServerTiming { entry.desc = paramValue || ''; } return descParser; + } - default: + default: { return null; + } } } diff --git a/front_end/sdk/TracingModel.js b/front_end/sdk/TracingModel.js index 1db2a32763..8cd106fa58 100644 --- a/front_end/sdk/TracingModel.js +++ b/front_end/sdk/TracingModel.js @@ -246,20 +246,24 @@ export class TracingModel { } switch (payload.name) { - case MetadataEvent.ProcessSortIndex: + case MetadataEvent.ProcessSortIndex: { process._setSortIndex(payload.args['sort_index']); break; - case MetadataEvent.ProcessName: + } + case MetadataEvent.ProcessName: { const processName = payload.args['name']; process._setName(processName); this._processByName.set(processName, process); break; - case MetadataEvent.ThreadSortIndex: + } + case MetadataEvent.ThreadSortIndex: { process.threadById(payload.tid)._setSortIndex(payload.args['sort_index']); break; - case MetadataEvent.ThreadName: + } + case MetadataEvent.ThreadName: { process.threadById(payload.tid)._setName(payload.args['name']); break; + } } } @@ -371,7 +375,7 @@ export class TracingModel { let openEventsStack = this._openNestableAsyncEvents.get(key); switch (event.phase) { - case phase.NestableAsyncBegin: + case phase.NestableAsyncBegin: { if (!openEventsStack) { openEventsStack = []; this._openNestableAsyncEvents.set(key, openEventsStack); @@ -380,14 +384,16 @@ export class TracingModel { openEventsStack.push(asyncEvent); event.thread._addAsyncEvent(asyncEvent); break; + } - case phase.NestableAsyncInstant: + case phase.NestableAsyncInstant: { if (openEventsStack && openEventsStack.length) { openEventsStack.peekLast()._addStep(event); } break; + } - case phase.NestableAsyncEnd: + case phase.NestableAsyncEnd: { if (!openEventsStack || !openEventsStack.length) { break; } @@ -398,6 +404,7 @@ export class TracingModel { break; } top._addStep(event); + } } } @@ -927,7 +934,7 @@ export class Thread extends NamedObject { const e = this._events[i]; e.ordinal = i; switch (e.phase) { - case phases.End: + case phases.End: { this._events[i] = null; // Mark for removal. // Quietly ignore unbalanced close events, they're legit (we could have missed start one). if (!stack.length) { @@ -942,9 +949,11 @@ export class Thread extends NamedObject { top._complete(e); } break; - case phases.Begin: + } + case phases.Begin: { stack.push(e); break; + } } } while (stack.length) { diff --git a/front_end/source_frame/XMLView.js b/front_end/source_frame/XMLView.js index 7fd4592da3..4b9857f2c7 100644 --- a/front_end/source_frame/XMLView.js +++ b/front_end/source_frame/XMLView.js @@ -313,7 +313,7 @@ export class XMLViewNode extends UI.TreeOutline.TreeElement { _updateTitle() { const node = this._node; switch (node.nodeType) { - case 1: // ELEMENT + case 1: { // ELEMENT const tag = node.tagName; if (this._closeTag) { this._setTitle(['', 'shadow-xml-view-tag']); @@ -343,20 +343,25 @@ export class XMLViewNode extends UI.TreeOutline.TreeElement { titleItems.push('>', 'shadow-xml-view-tag'); this._setTitle(titleItems); return; - case 3: // TEXT + } + case 3: { // TEXT this._setTitle([node.nodeValue, 'shadow-xml-view-text']); return; - case 4: // CDATA + } + case 4: { // CDATA this._setTitle([ '', 'shadow-xml-view-cdata' ]); return; - case 7: // PROCESSING_INSTRUCTION + } + case 7: { // PROCESSING_INSTRUCTION this._setTitle(['', 'shadow-xml-view-processing-instruction']); return; - case 8: // COMMENT + } + case 8: { // COMMENT this._setTitle(['', 'shadow-xml-view-comment']); return; + } } } diff --git a/front_end/sources/SourcesPanel.js b/front_end/sources/SourcesPanel.js index f213cfb24d..f94cd50308 100644 --- a/front_end/sources/SourcesPanel.js +++ b/front_end/sources/SourcesPanel.js @@ -1198,25 +1198,31 @@ export class DebuggingActionDelegate { handleAction(context, actionId) { const panel = SourcesPanel.instance(); switch (actionId) { - case 'debugger.step-over': + case 'debugger.step-over': { panel._stepOver(); return true; - case 'debugger.step-into': + } + case 'debugger.step-into': { panel._stepIntoAsync(); return true; - case 'debugger.step': + } + case 'debugger.step': { panel._stepInto(); return true; - case 'debugger.step-out': + } + case 'debugger.step-out': { panel._stepOut(); return true; - case 'debugger.run-snippet': + } + case 'debugger.run-snippet': { panel._runSnippet(); return true; - case 'debugger.toggle-breakpoints-active': + } + case 'debugger.toggle-breakpoints-active': { panel._toggleBreakpointsActive(); return true; - case 'debugger.evaluate-selection': + } + case 'debugger.evaluate-selection': { const frame = self.UI.context.flavor(UISourceCodeFrame); if (frame) { let text = frame.textEditor.text(frame.textEditor.selection()); @@ -1229,6 +1235,7 @@ export class DebuggingActionDelegate { } } return true; + } } return false; } diff --git a/front_end/timeline/TimelineDetailsView.js b/front_end/timeline/TimelineDetailsView.js index 173ae5c220..5c887ff1fa 100644 --- a/front_end/timeline/TimelineDetailsView.js +++ b/front_end/timeline/TimelineDetailsView.js @@ -162,12 +162,13 @@ export class TimelineDetailsView extends UI.Widget.VBox { return; } switch (this._selection.type()) { - case TimelineSelection.Type.TraceEvent: + case TimelineSelection.Type.TraceEvent: { const event = /** @type {!SDK.TracingModel.Event} */ (this._selection.object()); TimelineUIUtils.buildTraceEventDetails(event, this._model.timelineModel(), this._detailsLinkifier, true) .then(fragment => this._appendDetailsTabsForTraceEventAndShowDetails(event, fragment)); break; - case TimelineSelection.Type.Frame: + } + case TimelineSelection.Type.Frame: { const frame = /** @type {!TimelineModel.TimelineFrameModel.TimelineFrame} */ (this._selection.object()); const filmStripFrame = this._model.filmStripModelFrame(frame); this._setContent(TimelineUIUtils.generateDetailsContentForFrame(frame, filmStripFrame)); @@ -179,14 +180,17 @@ export class TimelineDetailsView extends UI.Widget.VBox { } } break; - case TimelineSelection.Type.NetworkRequest: + } + case TimelineSelection.Type.NetworkRequest: { const request = /** @type {!TimelineModel.TimelineModel.NetworkRequest} */ (this._selection.object()); TimelineUIUtils.buildNetworkRequestDetails(request, this._model.timelineModel(), this._detailsLinkifier) .then(this._setContent.bind(this)); break; - case TimelineSelection.Type.Range: + } + case TimelineSelection.Type.Range: { this._updateSelectedRangeStats(this._selection.startTime(), this._selection.endTime()); break; + } } this._updateContents(); diff --git a/front_end/timeline/TimelineFlameChartDataProvider.js b/front_end/timeline/TimelineFlameChartDataProvider.js index 78336e56b8..67e695d1b5 100644 --- a/front_end/timeline/TimelineFlameChartDataProvider.js +++ b/front_end/timeline/TimelineFlameChartDataProvider.js @@ -294,28 +294,36 @@ export class TimelineFlameChartDataProvider extends Common.ObjectWrapper.ObjectW let rasterCount = 0; for (const track of tracks) { switch (track.type) { - case TimelineModel.TimelineModel.TrackType.Input: + case TimelineModel.TimelineModel.TrackType.Input: { this._appendAsyncEventsGroup( track, ls`Input`, track.asyncEvents, this._interactionsHeaderLevel2, eventEntryType, false /* selectable */); break; - case TimelineModel.TimelineModel.TrackType.Animation: + } + + case TimelineModel.TimelineModel.TrackType.Animation: { this._appendAsyncEventsGroup( track, ls`Animation`, track.asyncEvents, this._interactionsHeaderLevel2, eventEntryType, false /* selectable */); break; - case TimelineModel.TimelineModel.TrackType.Timings: + } + + case TimelineModel.TimelineModel.TrackType.Timings: { const group = this._appendHeader(ls`Timings`, this._timingsHeader, true /* selectable */); group._track = track; this._appendPageMetrics(); this._appendAsyncEventsGroup( track, null, track.asyncEvents, this._timingsHeader, eventEntryType, true /* selectable */); break; - case TimelineModel.TimelineModel.TrackType.Console: + } + + case TimelineModel.TimelineModel.TrackType.Console: { this._appendAsyncEventsGroup( track, ls`Console`, track.asyncEvents, this._headerLevel1, eventEntryType, true /* selectable */); break; - case TimelineModel.TimelineModel.TrackType.MainThread: + } + + case TimelineModel.TimelineModel.TrackType.MainThread: { if (track.forMainFrame) { const group = this._appendSyncEvents( track, track.events, track.url ? ls`Main \u2014 ${track.url}` : ls`Main`, this._headerLevel1, @@ -329,12 +337,16 @@ export class TimelineFlameChartDataProvider extends Common.ObjectWrapper.ObjectW eventEntryType, true /* selectable */); } break; - case TimelineModel.TimelineModel.TrackType.Worker: + } + + case TimelineModel.TimelineModel.TrackType.Worker: { this._appendSyncEvents( track, track.events, track.url ? ls`Worker \u2014 ${track.url}` : ls`Dedicated Worker`, this._headerLevel1, eventEntryType, true /* selectable */); break; - case TimelineModel.TimelineModel.TrackType.Raster: + } + + case TimelineModel.TimelineModel.TrackType.Raster: { if (!rasterCount) { this._appendHeader(ls`Raster`, this._headerLevel1, false /* selectable */); } @@ -343,16 +355,21 @@ export class TimelineFlameChartDataProvider extends Common.ObjectWrapper.ObjectW track, track.events, ls`Rasterizer Thread ${rasterCount}`, this._headerLevel2, eventEntryType, true /* selectable */); break; - case TimelineModel.TimelineModel.TrackType.GPU: + } + + case TimelineModel.TimelineModel.TrackType.GPU: { this._appendSyncEvents( track, track.events, ls`GPU`, this._headerLevel1, eventEntryType, true /* selectable */); break; - case TimelineModel.TimelineModel.TrackType.Other: + } + + case TimelineModel.TimelineModel.TrackType.Other: { this._appendSyncEvents( track, track.events, track.name || ls`Thread`, this._headerLevel1, eventEntryType, true /* selectable */); this._appendAsyncEventsGroup( track, track.name, track.asyncEvents, this._headerLevel1, eventEntryType, true /* selectable */); break; + } } } if (this._timelineData.selectedGroup) { diff --git a/front_end/timeline/TimelineUIUtils.js b/front_end/timeline/TimelineUIUtils.js index 006d1b11e4..5b194c3038 100644 --- a/front_end/timeline/TimelineUIUtils.js +++ b/front_end/timeline/TimelineUIUtils.js @@ -669,9 +669,11 @@ export class TimelineUIUtils { case recordType.WebSocketCreate: case recordType.WebSocketSendHandshakeRequest: case recordType.WebSocketReceiveHandshakeResponse: - case recordType.WebSocketDestroy: + case recordType.WebSocketDestroy: { detailsText = await TimelineUIUtils.buildDetailsTextForTraceEvent(event, target); break; + } + case recordType.PaintImage: case recordType.DecodeImage: case recordType.ResizeImage: @@ -689,8 +691,9 @@ export class TimelineUIUtils { } break; } + case recordType.FunctionCall: - case recordType.JSFrame: + case recordType.JSFrame: { details = createElement('span'); details.createTextChild(TimelineUIUtils.frameDisplayName(eventData)); const location = linkifyLocation( @@ -700,9 +703,13 @@ export class TimelineUIUtils { details.appendChild(location); } break; - case recordType.CompileModule: + } + + case recordType.CompileModule: { details = linkifyLocation('', event.args['fileName'], 0, 0); break; + } + case recordType.CompileScript: case recordType.EvaluateScript: { const url = eventData['url']; @@ -711,6 +718,7 @@ export class TimelineUIUtils { } break; } + case recordType.StreamingCompileScript: { const url = eventData['url']; if (url) { @@ -718,13 +726,15 @@ export class TimelineUIUtils { } break; } - default: + + default: { if (event.hasCategory(TimelineModel.TimelineModel.TimelineModelImpl.Category.Console)) { detailsText = null; } else { details = linkifyTopCallFrame(); } break; + } } if (!details && detailsText) { @@ -868,34 +878,42 @@ export class TimelineUIUtils { switch (event.name) { case recordTypes.GCEvent: case recordTypes.MajorGC: - case recordTypes.MinorGC: + case recordTypes.MinorGC: { const delta = event.args['usedHeapSizeBefore'] - event.args['usedHeapSizeAfter']; contentHelper.appendTextRow(ls`Collected`, Number.bytesToString(delta)); break; + } + case recordTypes.JSFrame: - case recordTypes.FunctionCall: + case recordTypes.FunctionCall: { const detailsNode = await TimelineUIUtils.buildDetailsNodeForTraceEvent(event, model.targetByEvent(event), linkifier); if (detailsNode) { contentHelper.appendElementRow(ls`Function`, detailsNode); } break; + } + case recordTypes.TimerFire: case recordTypes.TimerInstall: - case recordTypes.TimerRemove: + case recordTypes.TimerRemove: { contentHelper.appendTextRow(ls`Timer ID`, eventData['timerId']); if (event.name === recordTypes.TimerInstall) { contentHelper.appendTextRow(ls`Timeout`, Number.millisToString(eventData['timeout'])); contentHelper.appendTextRow(ls`Repeats`, !eventData['singleShot']); } break; - case recordTypes.FireAnimationFrame: + } + + case recordTypes.FireAnimationFrame: { contentHelper.appendTextRow(ls`Callback ID`, eventData['id']); break; + } + case recordTypes.ResourceWillSendRequest: case recordTypes.ResourceSendRequest: case recordTypes.ResourceReceiveResponse: case recordTypes.ResourceReceivedData: - case recordTypes.ResourceFinish: + case recordTypes.ResourceFinish: { url = timelineData.url; if (url) { contentHelper.appendElementRow(ls`Resource`, Components.Linkifier.Linkifier.linkifyURL(url, {tabStop: true})); @@ -920,10 +938,14 @@ export class TimelineUIUtils { contentHelper.appendTextRow(ls`Decoded Body`, ls`${eventData['decodedBodyLength']} Bytes`); } break; - case recordTypes.CompileModule: + } + + case recordTypes.CompileModule: { contentHelper.appendLocationRow(ls`Module`, event.args['fileName'], 0); break; - case recordTypes.CompileScript: + } + + case recordTypes.CompileScript: { url = eventData && eventData['url']; if (url) { contentHelper.appendLocationRow(ls`Script`, url, eventData['lineNumber'], eventData['columnNumber']); @@ -940,17 +962,21 @@ export class TimelineUIUtils { contentHelper.appendTextRow(ls`Cache Rejected`, eventData['cacheRejected']); } break; - case recordTypes.EvaluateScript: + } + + case recordTypes.EvaluateScript: { url = eventData && eventData['url']; if (url) { contentHelper.appendLocationRow(ls`Script`, url, eventData['lineNumber'], eventData['columnNumber']); } break; + } + case recordTypes.WasmStreamFromResponseCallback: case recordTypes.WasmCompiledModule: case recordTypes.WasmCachedModule: case recordTypes.WasmModuleCacheHit: - case recordTypes.WasmModuleCacheInvalid: + case recordTypes.WasmModuleCacheInvalid: { if (eventData) { url = event.args['url']; if (url) { @@ -966,24 +992,29 @@ export class TimelineUIUtils { } } break; - case recordTypes.Paint: + } + + case recordTypes.Paint: { const clip = eventData['clip']; contentHelper.appendTextRow(ls`Location`, ls`(${clip[0]}, ${clip[1]})`); const clipWidth = TimelineUIUtils.quadWidth(clip); const clipHeight = TimelineUIUtils.quadHeight(clip); contentHelper.appendTextRow(ls`Dimensions`, ls`${clipWidth} × ${clipHeight}`); // Fall-through intended. + } case recordTypes.PaintSetup: case recordTypes.Rasterize: - case recordTypes.ScrollLayer: + case recordTypes.ScrollLayer: { relatedNodeLabel = ls`Layer Root`; break; + } + case recordTypes.PaintImage: case recordTypes.DecodeLazyPixelRef: case recordTypes.DecodeImage: case recordTypes.ResizeImage: - case recordTypes.DrawLazyPixelRef: + case recordTypes.DrawLazyPixelRef: { relatedNodeLabel = ls`Owner Element`; url = timelineData.url; if (url) { @@ -991,30 +1022,40 @@ export class TimelineUIUtils { ls`Image URL`, Components.Linkifier.Linkifier.linkifyURL(url, {tabStop: true})); } break; - case recordTypes.ParseAuthorStyleSheet: + } + + case recordTypes.ParseAuthorStyleSheet: { url = eventData['styleSheetUrl']; if (url) { contentHelper.appendElementRow( ls`Stylesheet URL`, Components.Linkifier.Linkifier.linkifyURL(url, {tabStop: true})); } break; + } + case recordTypes.UpdateLayoutTree: // We don't want to see default details. - case recordTypes.RecalculateStyles: + case recordTypes.RecalculateStyles: { contentHelper.appendTextRow(ls`Elements Affected`, event.args['elementCount']); break; - case recordTypes.Layout: + } + + case recordTypes.Layout: { const beginData = event.args['beginData']; contentHelper.appendTextRow( ls`Nodes That Need Layout`, ls`${beginData['dirtyObjects']} of ${beginData['totalObjects']}`); relatedNodeLabel = ls`Layout root`; break; - case recordTypes.ConsoleTime: + } + + case recordTypes.ConsoleTime: { contentHelper.appendTextRow(ls`Message`, event.name); break; + } + case recordTypes.WebSocketCreate: case recordTypes.WebSocketSendHandshakeRequest: case recordTypes.WebSocketReceiveHandshakeResponse: - case recordTypes.WebSocketDestroy: + case recordTypes.WebSocketDestroy: { const initiatorData = initiator ? initiator.args['data'] : eventData; if (typeof initiatorData['webSocketURL'] !== 'undefined') { contentHelper.appendTextRow(ls`URL`, initiatorData['webSocketURL']); @@ -1026,14 +1067,20 @@ export class TimelineUIUtils { contentHelper.appendTextRow(ls`Message`, eventData['message']); } break; - case recordTypes.EmbedderCallback: + } + + case recordTypes.EmbedderCallback: { contentHelper.appendTextRow(ls`Callback Function`, eventData['callbackName']); break; - case recordTypes.Animation: + } + + case recordTypes.Animation: { if (event.phase === SDK.TracingModel.Phase.NestableAsyncInstant) { contentHelper.appendTextRow(ls`State`, eventData['state']); } break; + } + case recordTypes.ParseHTML: { const beginData = event.args['beginData']; const startLine = beginData['startLine'] - 1; @@ -1045,32 +1092,39 @@ export class TimelineUIUtils { break; } - case recordTypes.FireIdleCallback: + case recordTypes.FireIdleCallback: { contentHelper.appendTextRow(ls`Allotted Time`, Number.millisToString(eventData['allottedMilliseconds'])); contentHelper.appendTextRow(ls`Invoked by Timeout`, eventData['timedOut']); // Fall-through intended. + } case recordTypes.RequestIdleCallback: - case recordTypes.CancelIdleCallback: + case recordTypes.CancelIdleCallback: { contentHelper.appendTextRow(ls`Callback ID`, eventData['id']); break; - case recordTypes.EventDispatch: + } + + case recordTypes.EventDispatch: { contentHelper.appendTextRow(ls`Type`, eventData['type']); break; + } - case recordTypes.MarkLCPCandidate: + case recordTypes.MarkLCPCandidate: { contentHelper.appendTextRow(ls`Type`, String(eventData['type'])); contentHelper.appendTextRow(ls`Size`, String(eventData['size'])); // Fall-through intended. + } + case recordTypes.MarkFirstPaint: case recordTypes.MarkFCP: case recordTypes.MarkFMP: case recordTypes.MarkLoad: - case recordTypes.MarkDOMContent: + case recordTypes.MarkDOMContent: { contentHelper.appendTextRow( ls`Timestamp`, Number.preciseMillisToString(event.startTime - model.minimumRecordTime(), 1)); contentHelper.appendElementRow(ls`Details`, TimelineUIUtils.buildDetailsNodeForPerformanceEvent(event)); break; + } default: { const detailsNode = await TimelineUIUtils.buildDetailsNodeForTraceEvent(event, model.targetByEvent(event), linkifier); @@ -2018,36 +2072,49 @@ export class TimelineUIUtils { switch (warning) { case warnings.ForcedStyle: - case warnings.ForcedLayout: + case warnings.ForcedLayout: { const forcedReflowLink = UI.UIUtils.createDocumentationLink( '../../fundamentals/performance/rendering/avoid-large-complex-layouts-and-layout-thrashing#avoid-forced-synchronous-layouts', ls`Forced reflow`); span.appendChild(UI.UIUtils.formatLocalized('%s is a likely performance bottleneck.', [forcedReflowLink])); break; - case warnings.IdleDeadlineExceeded: + } + + case warnings.IdleDeadlineExceeded: { const exceededMs = Number.millisToString(event.duration - eventData['allottedMilliseconds'], true); span.textContent = ls`Idle callback execution extended beyond deadline by ${exceededMs}`; break; - case warnings.LongHandler: + } + + case warnings.LongHandler: { span.textContent = Common.UIString.UIString('Handler took %s', Number.millisToString(event.duration, true)); break; - case warnings.LongRecurringHandler: + } + + case warnings.LongRecurringHandler: { span.textContent = Common.UIString.UIString('Recurring handler took %s', Number.millisToString(event.duration, true)); break; - case warnings.LongTask: + } + + case warnings.LongTask: { const longTaskLink = UI.UIUtils.createDocumentationLink( '../../fundamentals/performance/rail#goals-and-guidelines', ls`Long task`); span.appendChild( UI.UIUtils.formatLocalized('%s took %s.', [longTaskLink, Number.millisToString(event.duration, true)])); break; - case warnings.V8Deopt: + } + + case warnings.V8Deopt: { span.appendChild(UI.XLink.XLink.create( 'https://github.com/GoogleChrome/devtools-docs/issues/53', Common.UIString.UIString('Not optimized'))); span.createTextChild(Common.UIString.UIString(': %s', eventData['deoptReason'])); break; - default: + } + + default: { console.assert(false, 'Unhandled TimelineModel.WarningType'); + } } return span; } diff --git a/front_end/timeline_model/TimelineModel.js b/front_end/timeline_model/TimelineModel.js index 36c07b45e9..27d2590d78 100644 --- a/front_end/timeline_model/TimelineModel.js +++ b/front_end/timeline_model/TimelineModel.js @@ -798,17 +798,19 @@ export class TimelineModelImpl { switch (event.name) { case recordTypes.ResourceSendRequest: - case recordTypes.WebSocketCreate: + case recordTypes.WebSocketCreate: { timelineData.setInitiator(eventStack.peekLast() || null); timelineData.url = eventData['url']; break; + } - case recordTypes.ScheduleStyleRecalculation: + case recordTypes.ScheduleStyleRecalculation: { this._lastScheduleStyleRecalculation[eventData['frame']] = event; break; + } case recordTypes.UpdateLayoutTree: - case recordTypes.RecalculateStyles: + case recordTypes.RecalculateStyles: { this._invalidationTracker.didRecalcStyle(event); if (event.args['beginData']) { timelineData.setInitiator(this._lastScheduleStyleRecalculation[event.args['beginData']['frame']]); @@ -818,13 +820,15 @@ export class TimelineModelImpl { this._currentTaskLayoutAndRecalcEvents.push(event); } break; + } case recordTypes.ScheduleStyleInvalidationTracking: case recordTypes.StyleRecalcInvalidationTracking: case recordTypes.StyleInvalidatorInvalidationTracking: - case recordTypes.LayoutInvalidationTracking: + case recordTypes.LayoutInvalidationTracking: { this._invalidationTracker.addInvalidation(new InvalidationTrackingEvent(event)); break; + } case recordTypes.InvalidateLayout: { // Consider style recalculation as a reason for layout invalidation, @@ -854,26 +858,29 @@ export class TimelineModelImpl { break; } - case recordTypes.Task: + case recordTypes.Task: { if (event.duration > TimelineModelImpl.Thresholds.LongTask) { timelineData.warning = TimelineModelImpl.WarningType.LongTask; } break; + } - case recordTypes.EventDispatch: + case recordTypes.EventDispatch: { if (event.duration > TimelineModelImpl.Thresholds.RecurringHandler) { timelineData.warning = TimelineModelImpl.WarningType.LongHandler; } break; + } case recordTypes.TimerFire: - case recordTypes.FireAnimationFrame: + case recordTypes.FireAnimationFrame: { if (event.duration > TimelineModelImpl.Thresholds.RecurringHandler) { timelineData.warning = TimelineModelImpl.WarningType.LongRecurringHandler; } break; + } - case recordTypes.FunctionCall: + case recordTypes.FunctionCall: { // Compatibility with old format. if (typeof eventData['scriptName'] === 'string') { eventData['url'] = eventData['scriptName']; @@ -881,29 +888,30 @@ export class TimelineModelImpl { if (typeof eventData['scriptLine'] === 'number') { eventData['lineNumber'] = eventData['scriptLine']; } - - // Fallthrough. + // Fallthrough intended. + } case recordTypes.EvaluateScript: - case recordTypes.CompileScript: + case recordTypes.CompileScript: { if (typeof eventData['lineNumber'] === 'number') { --eventData['lineNumber']; } if (typeof eventData['columnNumber'] === 'number') { --eventData['columnNumber']; } + // Fallthrough intended. + } - // Fallthrough intended. - - case recordTypes.RunMicrotasks: + case recordTypes.RunMicrotasks: { // Microtasks technically are not necessarily scripts, but for purpose of // forced sync style recalc or layout detection they are. if (!this._currentScriptEvent) { this._currentScriptEvent = event; } break; + } - case recordTypes.SetLayerTreeId: + case recordTypes.SetLayerTreeId: { // This is to support old traces. if (this._sessionId && eventData['sessionId'] && this._sessionId === eventData['sessionId']) { this._mainFrameLayerTreeId = eventData['layerTreeId']; @@ -918,6 +926,7 @@ export class TimelineModelImpl { } this._mainFrameLayerTreeId = eventData['layerTreeId']; break; + } case recordTypes.Paint: { this._invalidationTracker.didPaint(event); @@ -945,14 +954,16 @@ export class TimelineModelImpl { break; } - case recordTypes.ScrollLayer: + case recordTypes.ScrollLayer: { timelineData.backendNodeId = eventData['nodeId']; break; + } - case recordTypes.PaintImage: + case recordTypes.PaintImage: { timelineData.backendNodeId = eventData['nodeId']; timelineData.url = eventData['url']; break; + } case recordTypes.DecodeImage: case recordTypes.ResizeImage: { @@ -983,15 +994,17 @@ export class TimelineModelImpl { break; } - case recordTypes.FrameStartedLoading: + case recordTypes.FrameStartedLoading: { if (timelineData.frameId !== event.args['frame']) { return false; } break; + } - case recordTypes.MarkLCPCandidate: + case recordTypes.MarkLCPCandidate: { timelineData.backendNodeId = eventData['nodeId']; break; + } case recordTypes.MarkDOMContent: case recordTypes.MarkLoad: { @@ -1030,11 +1043,12 @@ export class TimelineModelImpl { break; } - case recordTypes.FireIdleCallback: + case recordTypes.FireIdleCallback: { if (event.duration > eventData['allottedMilliseconds'] + TimelineModelImpl.Thresholds.IdleCallbackAddon) { timelineData.warning = TimelineModelImpl.WarningType.IdleDeadlineExceeded; } break; + } } return true; } diff --git a/front_end/ui/ContextMenu.js b/front_end/ui/ContextMenu.js index c2d882aece..d2d8a566e6 100644 --- a/front_end/ui/ContextMenu.js +++ b/front_end/ui/ContextMenu.js @@ -88,7 +88,7 @@ export class Item { */ _buildDescriptor() { switch (this._type) { - case 'item': + case 'item': { const result = {type: 'item', id: this._id, label: this._label, enabled: !this._disabled}; if (this._customElement) { result.element = this._customElement; @@ -97,10 +97,13 @@ export class Item { result.shortcut = this._shortcut; } return result; - case 'separator': + } + case 'separator': { return {type: 'separator'}; - case 'checkbox': + } + case 'checkbox': { return {type: 'checkbox', id: this._id, label: this._label, checked: !!this._checked, enabled: !this._disabled}; + } } throw new Error('Invalid item type:' + this._type); } diff --git a/front_end/ui/UIUtils.js b/front_end/ui/UIUtils.js index 672e0eb840..c880aa5450 100644 --- a/front_end/ui/UIUtils.js +++ b/front_end/ui/UIUtils.js @@ -1975,7 +1975,7 @@ export class ThemeSupport { const alpha = hsla[3]; switch (this._themeName) { - case 'dark': + case 'dark': { const minCap = colorUsage & ThemeSupport.ColorUsage.Background ? 0.14 : 0; const maxCap = colorUsage & ThemeSupport.ColorUsage.Foreground ? 0.9 : 1; lit = 1 - lit; @@ -1984,8 +1984,8 @@ export class ThemeSupport { } else if (lit > 2 * maxCap - 1) { lit = maxCap - 1 / 2 + lit / 2; } - break; + } } hsla[0] = Platform.NumberUtilities.clamp(hue, 0, 1); hsla[1] = Platform.NumberUtilities.clamp(sat, 0, 1); diff --git a/scripts/localization/check_localizability.js b/scripts/localization/check_localizability.js index 5f30423b10..ea2c2e8ca3 100644 --- a/scripts/localization/check_localizability.js +++ b/scripts/localization/check_localizability.js @@ -195,7 +195,7 @@ function analyzeNode(parentNode, node, filePath, errors) { const code = escodegen.generate(node); switch (locCase) { case 'Common.UIString': - case 'UI.formatLocalized': + case 'UI.formatLocalized': { const firstArgType = node.arguments[0].type; if (firstArgType !== esprimaTypes.LITERAL && firstArgType !== esprimaTypes.TEMP_LITERAL && firstArgType !== esprimaTypes.IDENTIFIER && !excludeErrors.includes(code)) { @@ -212,7 +212,9 @@ function analyzeNode(parentNode, node, filePath, errors) { errors); } break; - case 'Tagged Template': + } + + case 'Tagged Template': { if (includesConditionalExpression(node.quasi.expressions)) { addError( `${localizationUtils.getRelativeFilePathFromSrc(filePath)}${ @@ -221,10 +223,13 @@ function analyzeNode(parentNode, node, filePath, errors) { errors); } break; - default: + } + + default: { // String concatenation to localization call(s) should be changed checkConcatenation(parentNode, node, filePath, errors); break; + } } for (const key of objKeys) { diff --git a/scripts/localization/utils/check_localized_strings.js b/scripts/localization/utils/check_localized_strings.js index 07f84eda46..40ae3b28e3 100644 --- a/scripts/localization/utils/check_localized_strings.js +++ b/scripts/localization/utils/check_localized_strings.js @@ -327,23 +327,28 @@ function parseLocalizableStringFromNode(node, filePath) { const locCase = localizationUtils.getLocalizationCase(node); switch (locCase) { case 'Common.UIString': - case 'Common.UIStringFormat': + case 'Common.UIStringFormat': { handleCommonUIString(node, filePath); break; - case 'UI.formatLocalized': + } + case 'UI.formatLocalized': { if (node.arguments !== undefined && node.arguments[1] !== undefined && node.arguments[1].elements !== undefined) { handleCommonUIString(node, filePath, node.arguments[1].elements); } break; - case 'Tagged Template': + } + case 'Tagged Template': { handleTemplateLiteral(node.quasi, escodegen.generate(node), filePath); break; - case null: + } + case null: { break; - default: + } + default: { throw new Error( `${filePath}${localizationUtils.getLocationMessage(node.loc)}: unexpected localization case for node: ${ escodegen.generate(node)}`); + } } for (const key of objKeys) { @@ -358,15 +363,18 @@ function handleCommonUIString(node, filePath, argumentNodes) { } const firstArgType = node.arguments[0].type; switch (firstArgType) { - case esprimaTypes.LITERAL: + case esprimaTypes.LITERAL: { const message = node.arguments[0].value; addString(message, escodegen.generate(node), filePath, node.loc, argumentNodes); break; - case esprimaTypes.TEMP_LITERAL: + } + case esprimaTypes.TEMP_LITERAL: { handleTemplateLiteral(node.arguments[0], escodegen.generate(node), filePath, argumentNodes); break; - default: + } + default: { break; + } } }