From 0c9b3e8bf6e616fc4a497f662edef611367f325e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20O=C3=9Fwald?= Date: Tue, 22 Oct 2024 14:47:56 +0200 Subject: [PATCH] feat: Check control renderer declaration (#374) Checks the renderer declaration of a UI5 Control and reports an error if deprecated usage is detected. JIRA: CPOUI5FOUNDATION-876 --- src/linter/messages.ts | 29 +++++ src/linter/ui5Types/SourceFileLinter.ts | 109 ++++++++++++------ .../amdTranspiler/rewriteExtendCall.ts | 75 +++++++++--- .../sap.ui.core/src/sap/ui/core/FancyText.js | 1 + .../ControlRendererDeclaration.js | 25 ++++ ...endererDeclarationSingleControlExported.js | 6 + .../ControlRendererDeclaration_negative.js | 80 +++++++++++++ .../NoDeprecatedApi/Control_ManagedObject.js | 3 +- .../amd/Factory_ClassLocalVariable.js | 27 ++++- .../amdTranspiler/snapshots/transpiler.ts.md | 17 ++- .../snapshots/transpiler.ts.snap | Bin 15507 -> 15667 bytes .../rules/snapshots/NoDeprecatedApi.ts.md | 104 +++++++++++++++++ .../rules/snapshots/NoDeprecatedApi.ts.snap | Bin 15441 -> 16213 bytes 13 files changed, 418 insertions(+), 58 deletions(-) create mode 100644 test/fixtures/linter/rules/NoDeprecatedApi/ControlRendererDeclaration.js create mode 100644 test/fixtures/linter/rules/NoDeprecatedApi/ControlRendererDeclarationSingleControlExported.js create mode 100644 test/fixtures/linter/rules/NoDeprecatedApi/ControlRendererDeclaration_negative.js diff --git a/src/linter/messages.ts b/src/linter/messages.ts index ac6df731..6f22ffa9 100644 --- a/src/linter/messages.ts +++ b/src/linter/messages.ts @@ -5,6 +5,7 @@ const RULES = { "csp-unsafe-inline-script": "csp-unsafe-inline-script", "no-deprecated-api": "no-deprecated-api", "no-deprecated-component": "no-deprecated-component", + "no-deprecated-control-renderer-declaration": "no-deprecated-control-renderer-declaration", "no-deprecated-library": "no-deprecated-library", "no-deprecated-theme": "no-deprecated-theme", "no-globals": "no-globals", @@ -60,6 +61,8 @@ export enum MESSAGE { REDUNDANT_VIEW_CONFIG_PROPERTY, SPELLING_BOOTSTRAP_PARAM, SVG_IN_XML, + MISSING_CONTROL_RENDERER_DECLARATION, + CONTROL_RENDERER_DECLARATION_STRING, } export const MESSAGE_INFO = { @@ -457,4 +460,30 @@ export const MESSAGE_INFO = { details: () => `{@link topic:28fcd55b04654977b63dacbee0552712 See Best Practices for Developers}`, }, + [MESSAGE.MISSING_CONTROL_RENDERER_DECLARATION]: { + severity: LintMessageSeverity.Error, + ruleId: RULES["no-deprecated-control-renderer-declaration"], + + message: ({className}: {className: string}) => + `Control '${className}' is missing a renderer declaration`, + details: ({className}: {className: string}) => `Not defining a 'renderer' for control '${className}' ` + + `may lead to synchronous loading of the '${className}Renderer' module. ` + + `If no renderer exists, set 'renderer: null'. Otherwise, either import the renderer module ` + + `and assign it to the 'renderer' property or implement the renderer inline.`, + }, + + [MESSAGE.CONTROL_RENDERER_DECLARATION_STRING]: { + severity: LintMessageSeverity.Error, + ruleId: RULES["no-deprecated-control-renderer-declaration"], + + message: ({className, rendererName}: {className: string; rendererName: string | undefined}) => + `Deprecated declaration of renderer ${rendererName ? `'${rendererName}' ` : ""}for control '${className}'`, + details: ({className, rendererName}: {className: string; rendererName: string | undefined}) => { + const rendererModuleName = rendererName ? `'${rendererName.replace(/\./g, "/")}'` : "renderer"; + return `Defining the 'renderer' for control '${className}' by its name may lead to synchronous ` + + `loading of the ${rendererModuleName} module. ` + + `Import the ${rendererModuleName} module and assign it to the 'renderer' property.`; + }, + }, + } as const; diff --git a/src/linter/ui5Types/SourceFileLinter.ts b/src/linter/ui5Types/SourceFileLinter.ts index c1356f65..82fafb96 100644 --- a/src/linter/ui5Types/SourceFileLinter.ts +++ b/src/linter/ui5Types/SourceFileLinter.ts @@ -124,7 +124,10 @@ export default class SourceFileLinter { context: this.#context, checker: this.#checker, }); - } else if (ts.isPropertyDeclaration(node) && node.name.getText() === "metadata") { + } else if ( + ts.isPropertyDeclaration(node) && node.name.getText() === "metadata" && + this.isUi5ClassDeclaration(node.parent, "sap/ui/base/ManagedObject") + ) { const visitMetadataNodes = (childNode: ts.Node) => { if (ts.isPropertyAssignment(childNode)) { // Skip nodes out of interest this.analyzeMetadataProperty(childNode.name.getText(), childNode); @@ -132,73 +135,113 @@ export default class SourceFileLinter { ts.forEachChild(childNode, visitMetadataNodes); }; - - if (this.isUi5controlMetadataNode(node)) { - ts.forEachChild(node, visitMetadataNodes); - } + ts.forEachChild(node, visitMetadataNodes); + } else if (this.isUi5ClassDeclaration(node, "sap/ui/core/Control")) { + this.analyzeControlRendererDeclaration(node); } // Traverse the whole AST from top to bottom ts.forEachChild(node, this.#boundVisitNode); } - isUi5controlMetadataNode(node: ts.PropertyAssignment | ts.PropertyDeclaration): boolean { - // Go up the hierarchy chain to find whether the class extends from "sap/ui/base/ManagedObject" - const isObjectMetadataAncestor = (node: ts.ClassDeclaration): boolean => { + isUi5ClassDeclaration(node: ts.Node, baseClassModule: string | string[]): node is ts.ClassDeclaration { + if (!ts.isClassDeclaration(node)) { + return false; + } + const baseClassModules = Array.isArray(baseClassModule) ? baseClassModule : [baseClassModule]; + const baseClasses = baseClassModules.map((baseClassModule) => { + return {module: baseClassModule, name: baseClassModule.split("/").pop()}; + }); + + // Go up the hierarchy chain to find whether the class extends from the provided base class + const isClassUi5Subclass = (node: ts.ClassDeclaration): boolean => { return node?.heritageClauses?.flatMap((parentClasses: ts.HeritageClause) => { return parentClasses.types.flatMap((parentClass) => { const parentClassType = this.#checker.getTypeAtLocation(parentClass); return parentClassType.symbol?.declarations?.flatMap((declaration) => { - if (ts.isClassDeclaration(declaration)) { - if (declaration.name?.getText() === "ManagedObject" && + if (!ts.isClassDeclaration(declaration)) { + return false; + } + for (const baseClass of baseClasses) { + if (declaration.name?.getText() === baseClass.name && ( - // Declaration via type definitions + // Declaration via type definitions ( declaration.parent.parent && ts.isModuleDeclaration(declaration.parent.parent) && - declaration.parent.parent.name?.text === "sap/ui/base/ManagedObject" + declaration.parent.parent.name?.text === baseClass.module ) || - // Declaration via real class (within sap.ui.core project) + // Declaration via real class (e.g. within sap.ui.core project) ( ts.isSourceFile(declaration.parent) && - declaration.parent.fileName === "/resources/sap/ui/base/ManagedObject.js" + ( + declaration.parent.fileName === `/resources/${baseClass.module}.js` || + declaration.parent.fileName === `/resources/${baseClass.module}.ts` + ) ) ) ) { return true; - } else { - return isObjectMetadataAncestor(declaration); } - } else { - return false; } + return isClassUi5Subclass(declaration); }); }); // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing }).reduce((acc, cur) => cur || acc, false) ?? false; }; - const metadataFound = taskStart("isPropertyInMetadata", this.#resourcePath, true); + return isClassUi5Subclass(node); + } - if (node.name.getText() !== "metadata") { - metadataFound(); - return false; - } + analyzeControlRendererDeclaration(node: ts.ClassDeclaration) { + const className = node.name?.getText() ?? ""; + const rendererMember = node.members.find((member) => { + return (ts.isPropertyDeclaration(member) || ts.isMethodDeclaration(member)) && + member.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword) && + member.name.getText() === "renderer"; + }); - let parentNode: ts.Node = node.parent; - while (parentNode && parentNode.kind !== ts.SyntaxKind.ClassDeclaration) { - parentNode = parentNode.parent; + if (!rendererMember) { + // Special cases: Some base classes do not require sub-classes to have a renderer defined: + if (this.isUi5ClassDeclaration(node, [ + "sap/ui/core/mvc/View", + // XMLComposite is deprecated, but there still shouldn't be a false-positive about a missing renderer + "sap/ui/core/XMLComposite", + "sap/ui/core/webc/WebComponent", + "sap/uxap/BlockBase", + ])) { + return; + } + // No definition of renderer causes the runtime to load the corresponding Renderer module synchronously + this.#reporter.addMessage(MESSAGE.MISSING_CONTROL_RENDERER_DECLARATION, {className}, node); + return; } - if (!parentNode) { - metadataFound(); - return false; - } + if (ts.isPropertyDeclaration(rendererMember) && rendererMember.initializer) { + const initializerType = this.#checker.getTypeAtLocation(rendererMember.initializer); - const result = isObjectMetadataAncestor(parentNode as ts.ClassDeclaration); - metadataFound(); - return result; + if (initializerType.flags & ts.TypeFlags.Undefined || + initializerType.flags & ts.TypeFlags.Null) { + // null / undefined can be used to declare that a control does not have a renderer + return; + } + + if (initializerType.flags & ts.TypeFlags.StringLiteral) { + let rendererName; + if ( + ts.isStringLiteral(rendererMember.initializer) || + ts.isNoSubstitutionTemplateLiteral(rendererMember.initializer) + ) { + rendererName = rendererMember.initializer.text; + } + // Declaration as string requires sync loading of renderer module + this.#reporter.addMessage(MESSAGE.CONTROL_RENDERER_DECLARATION_STRING, { + className, rendererName, + }, rendererMember.initializer); + } + } } analyzeMetadataProperty(type: string, node: ts.PropertyAssignment) { diff --git a/src/linter/ui5Types/amdTranspiler/rewriteExtendCall.ts b/src/linter/ui5Types/amdTranspiler/rewriteExtendCall.ts index 1d2c8a19..3e5b2d90 100644 --- a/src/linter/ui5Types/amdTranspiler/rewriteExtendCall.ts +++ b/src/linter/ui5Types/amdTranspiler/rewriteExtendCall.ts @@ -70,42 +70,79 @@ function getClassBodyFromArguments( if (ts.isMethodDeclaration(prop)) { // Use method declarations as-is // e.g. "method() {}" + + // Special handling: + // - renderer: *static* + // This aligns it with how UI5 projects should declare those properties in TypeScript + + if ( + ts.isIdentifier(prop.name) && prop.name.text === "renderer" && + !prop.modifiers?.find((mod) => mod.kind === ts.SyntaxKind.StaticKeyword) + ) { + // Add static modifier to renderer method + const staticModifier = nodeFactory.createToken(ts.SyntaxKind.StaticKeyword); + return nodeFactory.updateMethodDeclaration(prop, + prop.modifiers ? [...prop.modifiers, staticModifier] : [staticModifier], + prop.asteriskToken, + prop.name, prop.questionToken, prop.typeParameters, prop.parameters, prop.type, prop.body); + } + return prop; } else if (ts.isPropertyAssignment(prop)) { if (ts.isFunctionExpression(prop.initializer)) { + let modifiers: ts.ModifierLike[] | undefined; + + // Special handling: + // - renderer: *static* + // This aligns it with how UI5 projects should declare those properties in TypeScript + if ( + ts.isIdentifier(prop.name) && prop.name.text === "renderer" && + !prop.initializer.modifiers?.find((mod) => mod.kind === ts.SyntaxKind.StaticKeyword) + ) { + modifiers = [nodeFactory.createToken(ts.SyntaxKind.StaticKeyword)]; + } + return nodeFactory.createMethodDeclaration( - undefined, undefined, + modifiers, undefined, prop.name, undefined, undefined, prop.initializer.parameters, undefined, prop.initializer.body); - } else if (ts.isObjectLiteralExpression(prop.initializer) && - ts.isIdentifier(prop.name) && prop.name.text === "metadata") { - // Transform to *static* property declaration? - // This would align it with how UI5 projects should declare metadata in TypeScript, - // however it's unclear whether this helps our static analysis - return nodeFactory.createPropertyDeclaration( - [nodeFactory.createToken(ts.SyntaxKind.StaticKeyword)], - prop.name, - undefined, undefined, - prop.initializer); } else { - // Assign all other properties (including arrow functions) to the class prototype - // This transformation does not reflect the runtime behavior where - // properties are set on the Class's prototype. However, tsc won't derive *any* - // type information from Object.defineProperty(Class.prototype, "prob", ...) - // So the current approach works better for the static analysis - if (prop.initializer.kind === ts.SyntaxKind.NullKeyword || - prop.initializer.kind === ts.SyntaxKind.UndefinedKeyword) { + const modifiers: ts.ModifierLike[] = []; + + // Special handling: + // - metadata: *readonly static* + // - renderer: *static* + // This aligns it with how UI5 projects should declare those properties in TypeScript + if ( + ts.isObjectLiteralExpression(prop.initializer) && + ts.isIdentifier(prop.name) && + prop.name.text === "metadata" + ) { + modifiers.push(nodeFactory.createToken(ts.SyntaxKind.ReadonlyKeyword)); + modifiers.push(nodeFactory.createToken(ts.SyntaxKind.StaticKeyword)); + } else if (ts.isIdentifier(prop.name) && prop.name.text === "renderer") { + modifiers.push(nodeFactory.createToken(ts.SyntaxKind.StaticKeyword)); + } else if (prop.initializer.kind === ts.SyntaxKind.NullKeyword || + prop.initializer.kind === ts.SyntaxKind.UndefinedKeyword + ) { // Skip property assignments that declare a null value, in the hope // that tsc can infer a more useful type based on other assignment // in one of the methods. If we would define a class property, tsc // would not attempt to infer more type information. return; } + + // Assign all properties (including arrow functions) to the class prototype + // This transformation does not reflect the runtime behavior where + // properties are set on the Class's prototype. However, tsc won't derive *any* + // type information from Object.defineProperty(Class.prototype, "prob", ...) + // So the current approach works better for the static analysis + return nodeFactory.createPropertyDeclaration( - undefined, + modifiers, prop.name, undefined, undefined, prop.initializer); diff --git a/test/fixtures/linter/projects/sap.ui.core/src/sap/ui/core/FancyText.js b/test/fixtures/linter/projects/sap.ui.core/src/sap/ui/core/FancyText.js index b2e4b9ce..c416309c 100644 --- a/test/fixtures/linter/projects/sap.ui.core/src/sap/ui/core/FancyText.js +++ b/test/fixtures/linter/projects/sap.ui.core/src/sap/ui/core/FancyText.js @@ -66,6 +66,7 @@ sap.ui.define(["sap/ui/core/Control", "sap/m/library"], }, }, }, + renderer: null // No renderer }); return FancyText; }); diff --git a/test/fixtures/linter/rules/NoDeprecatedApi/ControlRendererDeclaration.js b/test/fixtures/linter/rules/NoDeprecatedApi/ControlRendererDeclaration.js new file mode 100644 index 00000000..39be3c8b --- /dev/null +++ b/test/fixtures/linter/rules/NoDeprecatedApi/ControlRendererDeclaration.js @@ -0,0 +1,25 @@ +sap.ui.define(["sap/ui/core/Control", "sap/m/Button"], function(Control, Button) { + const Example1 = Control.extend("sap.ui.demo.linter.controls.Example1", { + metadata: {}, + // Declaration of renderer module as string (deprecated) + renderer: "sap.ui.demo.linter.controls.Example1Renderer" + }); + const Example2 = Control.extend("sap.ui.demo.linter.controls.Example2", { + metadata: {}, + // Declaration of renderer module as template literal (deprecated) + renderer: `sap.ui.demo.linter.controls.Example2Renderer` + }); + const Example3 = Control.extend("sap.ui.demo.linter.controls.Example3", { + metadata: {}, + // Declaration of renderer module as template literal with substitution (deprecated) + renderer: `sap.ui.demo.linter.controls.Example${1+2}Renderer` + }); + const Example4 = Control.extend("sap.ui.demo.linter.controls.Example4", { + metadata: {}, + // Missing renderer declaration (deprecated) + }); + const Example5 = Button.extend("sap.ui.demo.linter.controls.Example5", { + metadata: {}, + // Missing renderer declaration (deprecated) + }); +}); diff --git a/test/fixtures/linter/rules/NoDeprecatedApi/ControlRendererDeclarationSingleControlExported.js b/test/fixtures/linter/rules/NoDeprecatedApi/ControlRendererDeclarationSingleControlExported.js new file mode 100644 index 00000000..cf94d812 --- /dev/null +++ b/test/fixtures/linter/rules/NoDeprecatedApi/ControlRendererDeclarationSingleControlExported.js @@ -0,0 +1,6 @@ +sap.ui.define(["sap/ui/core/Control"], function(Control, Button) { + return Control.extend("sap.ui.demo.linter.controls.Example2", { + metadata: {}, + // Missing renderer declaration (deprecated) + }); +}); diff --git a/test/fixtures/linter/rules/NoDeprecatedApi/ControlRendererDeclaration_negative.js b/test/fixtures/linter/rules/NoDeprecatedApi/ControlRendererDeclaration_negative.js new file mode 100644 index 00000000..11b8bed9 --- /dev/null +++ b/test/fixtures/linter/rules/NoDeprecatedApi/ControlRendererDeclaration_negative.js @@ -0,0 +1,80 @@ +sap.ui.define([ + "sap/ui/core/Control", "sap/m/Button", "sap/ui/core/webc/WebComponent", + "sap/uxap/BlockBase", "./NegativeExample1Renderer", "sap/ui/core/mvc/View", + "sap/ui/core/XMLComposite" +], function(Control, Button, WebComponent, BlockBase, NegativeExample1Renderer, View, XMLComposite) { + + const NegativeExample1 = Control.extend("sap.ui.demo.linter.controls.NegativeExample1", { + metadata: {}, + renderer: NegativeExample1Renderer + }); + + const NegativeExample2 = Control.extend("sap.ui.demo.linter.controls.NegativeExample2", { + metadata: {}, + renderer: null + }); + + const NegativeExample3 = Button.extend("sap.ui.demo.linter.controls.NegativeExample3", { + metadata: {}, + renderer: undefined + }); + + const NegativeExample4 = Control.extend("sap.ui.demo.linter.controls.NegativeExample4", { + metadata: {}, + renderer: function(oRm, oControl) { + } + }); + + const NegativeExample5 = Control.extend("sap.ui.demo.linter.controls.NegativeExample5", { + metadata: {}, + renderer: (oRm, oControl) => { + } + }); + + const NegativeExample6 = Control.extend("sap.ui.demo.linter.controls.NegativeExample6", { + metadata: {}, + renderer(oRm, oControl) { + } + }); + + const NegativeExample7 = Button.extend("sap.ui.demo.linter.controls.NegativeExample7", { + metadata: {}, + renderer: { + apiVersion: 2, + render: function(oRm, oControl) { + } + } + }); + + const NegativeExample8 = Button.extend("sap.ui.demo.linter.controls.NegativeExample8", { + metadata: {}, + renderer: { + apiVersion: 4, + render: function(oRm, oControl) { + } + } + }); + + // Special cases: + + const NegativeExample9 = View.extend("sap.ui.demo.linter.controls.NegativeExample9", { + // No deprecation: sap.ui.core.mvc.View inherits from Control, but no renderer must be specified + }); + + const NegativeExample10 = WebComponent.extend("sap.ui.demo.linter.controls.NegativeExample10", { + metadata: {}, + // No deprecation: Uses sap.ui.core.webc.WebComponentRenderer if no renderer is specified + }); + + const NegativeExample11 = BlockBase.extend("sap.ui.demo.linter.controls.NegativeExample11", { + metadata: {}, + // No deprecation: Uses sap.uxap.BlockBaseRenderer if no renderer is specified + }); + + const NegativeExample12 = XMLComposite.extend("sap.ui.demo.linter.controls.NegativeExample12", { + metadata: {}, + // No deprecation: Uses inline renderer of XMLComposite if no renderer is specified + // Note: XMLComposite itself is deprecated, but there should not be a finding for a missing renderer + }); + +}); diff --git a/test/fixtures/linter/rules/NoDeprecatedApi/Control_ManagedObject.js b/test/fixtures/linter/rules/NoDeprecatedApi/Control_ManagedObject.js index cd6ff800..4e712a37 100644 --- a/test/fixtures/linter/rules/NoDeprecatedApi/Control_ManagedObject.js +++ b/test/fixtures/linter/rules/NoDeprecatedApi/Control_ManagedObject.js @@ -1,4 +1,4 @@ -sap.ui.define(["sap/ui/core/Control", "sap/m/library", "mycustom/lib/FancyMultiPage"], +sap.ui.define(["sap/ui/core/Control", "sap/m/library", "mycustom/lib/FancyMultiPage"], function (Control, library, FancyMultiPage) { var DateTimeInputType = library.DateTimeInputType; var FrameType = library.FrameType; @@ -66,6 +66,7 @@ sap.ui.define(["sap/ui/core/Control", "sap/m/library", "mycustom/lib/FancyMultiP }, }, }, + renderer: null // No renderer }); return FancyText; diff --git a/test/fixtures/transpiler/amd/Factory_ClassLocalVariable.js b/test/fixtures/transpiler/amd/Factory_ClassLocalVariable.js index 8978156a..321d5299 100644 --- a/test/fixtures/transpiler/amd/Factory_ClassLocalVariable.js +++ b/test/fixtures/transpiler/amd/Factory_ClassLocalVariable.js @@ -1,7 +1,14 @@ sap.ui.define(["sap/ui/core/Control"], function(Control) { /* This comment should be above the "class" statement of ExampleControl1 after transpiling */ - const ExampleControl1 = Control.extend("test.ExampleControl1", {}); + const ExampleControl1 = Control.extend("test.ExampleControl1", { + metadata: {}, + renderer: { + apiVersion: 2, + render: function(oRm, oControl) { + } + } + }); /* This comment should be below the "class" statement of ExampleControl1 after transpiling */ const a = 1, ExampleControl2 = Control.extend("test.ExampleControl2", {}); @@ -14,7 +21,11 @@ sap.ui.define(["sap/ui/core/Control"], function(Control) { /** * JSDoc comments should be removed, as it might have negative impact on the type detection */ - Control.extend("test.ExampleControl5", {}); + Control.extend("test.ExampleControl5", { + metadata: {}, + renderer: (oRm, oControl) => { + } + }); /* This comment should be below the "class" statement of ExampleControl5 after transpiling */ (function() { @@ -26,10 +37,18 @@ sap.ui.define(["sap/ui/core/Control"], function(Control) { e = 5, ExampleControl7 = Control.extend("test.ExampleControl7", {}); // This comment should be above the "class" statement of ExampleControl8 after transpiling - Control.extend("test.ExampleControl8", {}); + Control.extend("test.ExampleControl8", { + metadata: {}, + renderer: function(oRm, oControl) { + } + }); })(); // This comment should be above the "class" statement of ExampleControl9 after transpiling - return Control.extend("test.ExampleControl9", {}); + return Control.extend("test.ExampleControl9", { + metadata: {}, + renderer(oRm, oControl) { + } + }); // This comment should be below the "class" statement of ExampleControl9 after transpiling }); diff --git a/test/lib/linter/amdTranspiler/snapshots/transpiler.ts.md b/test/lib/linter/amdTranspiler/snapshots/transpiler.ts.md index 0b66a3cc..ba775d2b 100644 --- a/test/lib/linter/amdTranspiler/snapshots/transpiler.ts.md +++ b/test/lib/linter/amdTranspiler/snapshots/transpiler.ts.md @@ -263,6 +263,12 @@ Generated by [AVA](https://avajs.dev). `import Control from "sap/ui/core/Control";␊ /* This comment should be above the "class" statement of ExampleControl1 after transpiling */␊ class ExampleControl1 extends Control {␊ + static metadata = {};␊ + static renderer = {␊ + apiVersion: 2,␊ + render: function (oRm, oControl) {␊ + }␊ + };␊ }␊ /* This comment should be below the "class" statement of ExampleControl1 after transpiling */␊ const a = 1;␊ @@ -275,6 +281,9 @@ Generated by [AVA](https://avajs.dev). class ExampleControl4 extends Control {␊ }␊ class ExampleControl5_1 extends Control {␊ + static metadata = {};␊ + static renderer = (oRm, oControl) => {␊ + };␊ }␊ /* This comment should be below the "class" statement of ExampleControl5 after transpiling */␊ (function () {␊ @@ -285,10 +294,16 @@ Generated by [AVA](https://avajs.dev). }␊ // This comment should be above the "class" statement of ExampleControl8 after transpiling␊ class ExampleControl8_1 extends Control {␊ + static metadata = {};␊ + static renderer(oRm, oControl) {␊ + }␊ }␊ })();␊ // This comment should be above the "class" statement of ExampleControl9 after transpiling␊ export default class ExampleControl9_1 extends Control {␊ + static metadata = {};␊ + static renderer(oRm, oControl) {␊ + }␊ } // This comment should be below the "class" statement of ExampleControl9 after transpiling␊ //# sourceMappingURL=Factory_ClassLocalVariable.js.map` @@ -296,7 +311,7 @@ Generated by [AVA](https://avajs.dev). { file: 'Factory_ClassLocalVariable.js', - mappings: 'OAAgD,OAAO,MAAxC,qBAAqB;;8BAGX,OAAO;;AAC/B,6FAA6F;AAE7F,MAAM,CAAC,GAAG,CAA+D,CAAC;8BAA3C,OAAO;;AAEtC,MAAM,CAAC,GAAG,CAAC,EAGV,CAAC,GAAG,CAA+D,CAAC;;8BADlD,OAAO;;8BACA,OAAO;;gCAGjC,OAAO;;AACP,6FAA6F;AAE7F,CAAC;IACA,MAAM,CAAC,GAAG,CAAC,EAGV,CAAC,GAAG,CAA+D,CAAC;kCADlD,OAAO;;kCACA,OAAO;;;oCAGjC,OAAO;;CACP,CAAC,EAAE,CAAC;;+CAGE,OAAO', + mappings: 'OAAgD,OAAO,MAAxC,qBAAqB;;8BAGX,OAAO;WAC9B,QAAQ,GAAE,EAAE;WACZ,QAAQ,GAAE;QACT,UAAU,EAAE,CAAC;QACb,MAAM,EAAE,UAAS,GAAG,EAAE,QAAQ;QAC9B,CAAC;KACD;;AAEF,6FAA6F;AAE7F,MAAM,CAAC,GAAG,CAA+D,CAAC;8BAA3C,OAAO;;AAEtC,MAAM,CAAC,GAAG,CAAC,EAGV,CAAC,GAAG,CAA+D,CAAC;;8BADlD,OAAO;;8BACA,OAAO;;gCAGjC,OAAO;WACN,QAAQ,GAAE,EAAE;WACZ,QAAQ,GAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;IAC5B,CAAC;;AAEF,6FAA6F;AAE7F,CAAC;IACA,MAAM,CAAC,GAAG,CAAC,EAGV,CAAC,GAAG,CAA+D,CAAC;kCADlD,OAAO;;kCACA,OAAO;;;oCAGjC,OAAO;eACN,QAAQ,GAAE,EAAE;eACZ,QAAQ,CAAW,GAAG,EAAE,QAAQ;QAChC,CAAC;;CAEF,CAAC,EAAE,CAAC;;+CAGE,OAAO;WACb,QAAQ,GAAE,EAAE;IACZ,OAAA,QAAQ,CAAC,GAAG,EAAE,QAAQ;IACtB,CAAC', names: [], sourceRoot: '', sources: [ diff --git a/test/lib/linter/amdTranspiler/snapshots/transpiler.ts.snap b/test/lib/linter/amdTranspiler/snapshots/transpiler.ts.snap index a007dcf4cd536c7bf0914276d40ca43e73407992..5a50f86b103e400f856b2245d2d1ba0ad797ce11 100644 GIT binary patch literal 15667 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 Vr$^05n7Y^Y{{eWcNvMrF0RX)j9LE3v diff --git a/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.md b/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.md index 70f76ad0..4504e3a2 100644 --- a/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.md +++ b/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.md @@ -448,6 +448,110 @@ Generated by [AVA](https://avajs.dev). }, ] +## General: ControlRendererDeclaration.js + +> Snapshot 1 + + [ + { + coverageInfo: [], + errorCount: 5, + fatalErrorCount: 0, + filePath: 'ControlRendererDeclaration.js', + messages: [ + { + column: 13, + line: 5, + message: 'Deprecated declaration of renderer \'sap.ui.demo.linter.controls.Example1Renderer\' for control \'Example1\'', + messageDetails: 'Defining the \'renderer\' for control \'Example1\' by its name may lead to synchronous loading of the \'sap/ui/demo/linter/controls/Example1Renderer\' module. Import the \'sap/ui/demo/linter/controls/Example1Renderer\' module and assign it to the \'renderer\' property.', + ruleId: 'no-deprecated-control-renderer-declaration', + severity: 2, + }, + { + column: 13, + line: 10, + message: 'Deprecated declaration of renderer \'sap.ui.demo.linter.controls.Example2Renderer\' for control \'Example2\'', + messageDetails: 'Defining the \'renderer\' for control \'Example2\' by its name may lead to synchronous loading of the \'sap/ui/demo/linter/controls/Example2Renderer\' module. Import the \'sap/ui/demo/linter/controls/Example2Renderer\' module and assign it to the \'renderer\' property.', + ruleId: 'no-deprecated-control-renderer-declaration', + severity: 2, + }, + { + column: 13, + line: 15, + message: 'Deprecated declaration of renderer for control \'Example3\'', + messageDetails: 'Defining the \'renderer\' for control \'Example3\' by its name may lead to synchronous loading of the renderer module. Import the renderer module and assign it to the \'renderer\' property.', + ruleId: 'no-deprecated-control-renderer-declaration', + severity: 2, + }, + { + column: 19, + line: 17, + message: 'Control \'Example4\' is missing a renderer declaration', + messageDetails: 'Not defining a \'renderer\' for control \'Example4\' may lead to synchronous loading of the \'Example4Renderer\' module. If no renderer exists, set \'renderer: null\'. Otherwise, either import the renderer module and assign it to the \'renderer\' property or implement the renderer inline.', + ruleId: 'no-deprecated-control-renderer-declaration', + severity: 2, + }, + { + column: 19, + line: 21, + message: 'Control \'Example5\' is missing a renderer declaration', + messageDetails: 'Not defining a \'renderer\' for control \'Example5\' may lead to synchronous loading of the \'Example5Renderer\' module. If no renderer exists, set \'renderer: null\'. Otherwise, either import the renderer module and assign it to the \'renderer\' property or implement the renderer inline.', + ruleId: 'no-deprecated-control-renderer-declaration', + severity: 2, + }, + ], + warningCount: 0, + }, + ] + +## General: ControlRendererDeclarationSingleControlExported.js + +> Snapshot 1 + + [ + { + coverageInfo: [], + errorCount: 1, + fatalErrorCount: 0, + filePath: 'ControlRendererDeclarationSingleControlExported.js', + messages: [ + { + column: 9, + line: 2, + message: 'Control \'Example2_1\' is missing a renderer declaration', + messageDetails: 'Not defining a \'renderer\' for control \'Example2_1\' may lead to synchronous loading of the \'Example2_1Renderer\' module. If no renderer exists, set \'renderer: null\'. Otherwise, either import the renderer module and assign it to the \'renderer\' property or implement the renderer inline.', + ruleId: 'no-deprecated-control-renderer-declaration', + severity: 2, + }, + ], + warningCount: 0, + }, + ] + +## General: ControlRendererDeclaration_negative.js + +> Snapshot 1 + + [ + { + coverageInfo: [], + errorCount: 1, + fatalErrorCount: 0, + filePath: 'ControlRendererDeclaration_negative.js', + messages: [ + { + column: 2, + line: 4, + message: 'Import of deprecated module \'sap/ui/core/XMLComposite\'', + messageDetails: 'Deprecated test message', + ruleId: 'no-deprecated-api', + severity: 2, + }, + ], + warningCount: 0, + }, + ] + ## General: Control_ManagedObject.js > Snapshot 1 diff --git a/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.snap b/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.snap index cafe5083f3f4d27fef97ff3b61e50b7517eb0d62..1f8f2d3b8e2f4981573dd3e88ca1a7ed6db16d31 100644 GIT binary patch literal 16213 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 RMTvh@x-4ZWEk`gP{vWUPeMSHP literal 15441 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

?p^-%$HcP6oo-Er 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