mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-09-29 16:57:00 +08:00
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 <tvanderlippe@chromium.org> Commit-Queue: Mathias Bynens <mathias@chromium.org>
This commit is contained in:
committed by
Commit Bot
parent
e07f9eed89
commit
88e8f15748
@@ -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,
|
||||
|
||||
+20
-10
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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('<!--' + node.nodeValue() + '-->');
|
||||
break;
|
||||
}
|
||||
|
||||
case Node.DOCUMENT_TYPE_NODE:
|
||||
case Node.DOCUMENT_TYPE_NODE: {
|
||||
const docTypeElement = titleDOM.createChild('span', 'webkit-html-doctype');
|
||||
docTypeElement.createTextChild('<!DOCTYPE ' + node.nodeName());
|
||||
if (node.publicId) {
|
||||
@@ -1671,19 +1673,24 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement {
|
||||
|
||||
docTypeElement.createTextChild('>');
|
||||
break;
|
||||
}
|
||||
|
||||
case Node.CDATA_SECTION_NODE:
|
||||
case Node.CDATA_SECTION_NODE: {
|
||||
const cdataElement = titleDOM.createChild('span', 'webkit-html-text-node');
|
||||
cdataElement.createTextChild('<![CDATA[' + node.nodeValue() + ']]>');
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 [];
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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')));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -178,7 +178,7 @@ export class ServerTiming {
|
||||
*/
|
||||
static getParserForParameter(paramName) {
|
||||
switch (paramName) {
|
||||
case 'dur':
|
||||
case 'dur': {
|
||||
/**
|
||||
* @param {!Object<string, *>} entry
|
||||
* @param {*} paramValue
|
||||
@@ -195,8 +195,9 @@ export class ServerTiming {
|
||||
}
|
||||
}
|
||||
return durParser;
|
||||
}
|
||||
|
||||
case 'desc':
|
||||
case 'desc': {
|
||||
/**
|
||||
* @param {!Object<string, *>} entry
|
||||
* @param {?string} paramValue
|
||||
@@ -205,9 +206,11 @@ export class ServerTiming {
|
||||
entry.desc = paramValue || '';
|
||||
}
|
||||
return descParser;
|
||||
}
|
||||
|
||||
default:
|
||||
default: {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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(['</' + tag + '>', '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([
|
||||
'<![CDATA[', 'shadow-xml-view-cdata', node.nodeValue, 'shadow-xml-view-text', ']]>', 'shadow-xml-view-cdata'
|
||||
]);
|
||||
return;
|
||||
case 7: // PROCESSING_INSTRUCTION
|
||||
}
|
||||
case 7: { // PROCESSING_INSTRUCTION
|
||||
this._setTitle(['<?' + node.nodeName + ' ' + node.nodeValue + '?>', 'shadow-xml-view-processing-instruction']);
|
||||
return;
|
||||
case 8: // COMMENT
|
||||
}
|
||||
case 8: { // COMMENT
|
||||
this._setTitle(['<!--' + node.nodeValue + '-->', 'shadow-xml-view-comment']);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user