From 4de7e91986f73465030dedd389408d6968e8c55c Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Thu, 9 Jan 2025 11:29:38 +0200 Subject: [PATCH 01/25] feat: Add new message type --- src/linter/messages.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/linter/messages.ts b/src/linter/messages.ts index 048c9c5b6..c61de50f7 100644 --- a/src/linter/messages.ts +++ b/src/linter/messages.ts @@ -9,6 +9,7 @@ const RULES = { "no-deprecated-library": "no-deprecated-library", "no-deprecated-theme": "no-deprecated-theme", "no-globals": "no-globals", + "no-implicit-globals": "no-implicit-globals", "no-pseudo-modules": "no-pseudo-modules", "parsing-error": "parsing-error", "ui5-class-declaration": "ui5-class-declaration", @@ -53,6 +54,7 @@ export enum MESSAGE { NO_DEPRECATED_RENDERER, NO_DIRECT_DATATYPE_ACCESS, NO_DIRECT_ENUM_ACCESS, + NO_EXPORTED_VALUES_BY_LIB, NO_GLOBALS, NO_ICON_POOL_RENDERER, NOT_STATIC_CONTROL_RENDERER, @@ -570,4 +572,12 @@ export const MESSAGE_INFO = { details: ({messageDetails}: {messageDetails: string}) => messageDetails, }, + [MESSAGE.NO_EXPORTED_VALUES_BY_LIB]: { + severity: LintMessageSeverity.Error, + ruleId: RULES["no-implicit-globals"], + + message: () => "Access of a module not exported by a library", + details: () => "Please import the module itself because it is no longer exported by the library", + }, + } as const; From 595e0d355f3644a86ee68bdf4f5b68ac17239830 Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Thu, 9 Jan 2025 11:30:02 +0200 Subject: [PATCH 02/25] feat: Detect exported values by library --- src/linter/ui5Types/SourceFileLinter.ts | 36 +++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/linter/ui5Types/SourceFileLinter.ts b/src/linter/ui5Types/SourceFileLinter.ts index d19cf6907..3436fbedd 100644 --- a/src/linter/ui5Types/SourceFileLinter.ts +++ b/src/linter/ui5Types/SourceFileLinter.ts @@ -124,6 +124,7 @@ export default class SourceFileLinter { node as (ts.PropertyAccessExpression | ts.ElementAccessExpression)); // Check for global this.analyzePropertyAccessExpressionForDeprecation( node as (ts.PropertyAccessExpression | ts.ElementAccessExpression)); // Check for deprecation + this.analyzeExportedValuesByLib(node as ts.PropertyAccessExpression); } else if (node.kind === ts.SyntaxKind.ObjectBindingPattern && node.parent?.kind === ts.SyntaxKind.VariableDeclaration) { // e.g. `const { Button } = sap.m;` @@ -1185,8 +1186,43 @@ export default class SourceFileLinter { ].includes(nodeType); } + analyzeExportedValuesByLib(node: ts.PropertyAccessExpression) { + if (node.name.kind !== ts.SyntaxKind.Identifier) { + return; + } + + const exprNode = node.expression; + const exprType = this.checker.getTypeAtLocation(exprNode); + const potentialLibImport = exprType.symbol?.name.replaceAll("\"", "") ?? ""; + + // Checks if the left hand side is a library import. + // It's sufficient just to check for "/library" as the end of the string by convention + if (!potentialLibImport.endsWith("/library")) { + return; + } + + const namespace = potentialLibImport.replace("/library", ""); + const moduleName = `${namespace}/${node.name.text}`; + + // Check if the module is registered within ambient modules + const ambientModules = this.checker.getAmbientModules(); + const isRegisteredAsUi5Module = ambientModules.some((module) => + module.name === `"${moduleName}"`); + + // Check if it has been imported as UI5 module + const hasAmbientModuleExplicitImport = + this.sourceFile.statements.filter(ts.isImportDeclaration) + .some((importNode) => + ts.isStringLiteral(importNode.moduleSpecifier) && importNode.moduleSpecifier.text === moduleName); + + if (isRegisteredAsUi5Module && !hasAmbientModuleExplicitImport) { + this.#reporter.addMessage(MESSAGE.NO_EXPORTED_VALUES_BY_LIB, node.name); + } + } + analyzePropertyAccessExpression(node: ts.AccessExpression | ts.CallExpression) { const exprNode = node.expression; + if (ts.isIdentifier(exprNode)) { // The expression being an identifier indicates that this is the first access // in a possible chain. E.g. the "sap" in "sap.ui.getCore()" From 5f1e58a7efc8a1af039625aa516903202c2b0c64 Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Thu, 9 Jan 2025 11:45:10 +0200 Subject: [PATCH 03/25] refactor: Use getter for the name --- src/linter/ui5Types/SourceFileLinter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/linter/ui5Types/SourceFileLinter.ts b/src/linter/ui5Types/SourceFileLinter.ts index 3436fbedd..9c4cde6ba 100644 --- a/src/linter/ui5Types/SourceFileLinter.ts +++ b/src/linter/ui5Types/SourceFileLinter.ts @@ -1193,7 +1193,7 @@ export default class SourceFileLinter { const exprNode = node.expression; const exprType = this.checker.getTypeAtLocation(exprNode); - const potentialLibImport = exprType.symbol?.name.replaceAll("\"", "") ?? ""; + const potentialLibImport = exprType.symbol?.getName().replaceAll("\"", "") ?? ""; // Checks if the left hand side is a library import. // It's sufficient just to check for "/library" as the end of the string by convention From 57b79562fc1160cfffd9dbd302d3a727b3175036 Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Thu, 9 Jan 2025 11:49:38 +0200 Subject: [PATCH 04/25] test: Add test cases --- .../rules/NoGlobals/NoExportedLibValues.js | 8 +++ .../NoGlobals/NoExportedLibValues_Negative.js | 14 ++++ .../linter/rules/snapshots/NoGlobals.ts.md | 64 ++++++++++++++++++ .../linter/rules/snapshots/NoGlobals.ts.snap | Bin 2012 -> 2491 bytes 4 files changed, 86 insertions(+) create mode 100644 test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js create mode 100644 test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js diff --git a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js new file mode 100644 index 000000000..4bd236648 --- /dev/null +++ b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js @@ -0,0 +1,8 @@ +sap.ui.define(["sap/ui/unified/library"], + function (unifiedLibrary) { + "use strict"; + + var CalendarDayType = unifiedLibrary.CalendarDayType, + DateRange = unifiedLibrary.DateRange, + DateTypeRange = unifiedLibrary.DateTypeRange; +}); diff --git a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js new file mode 100644 index 000000000..9706ae09f --- /dev/null +++ b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js @@ -0,0 +1,14 @@ +sap.ui.define([ + "sap/ui/unified/library", + "sap/ui/unified/CalendarDayType", + "sap/ui/unified/DateRange", + "sap/ui/unified/DateTypeRange", + +], + function (unifiedLibrary, CalendarDayType, DateRange, DateTypeRange) { + "use strict"; + + var CalendarDayTypeLib = unifiedLibrary.CalendarDayType, + DateRangeLib = unifiedLibrary.DateRange, + DateTypeRangeLib = unifiedLibrary.DateTypeRange; +}); diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.md b/test/lib/linter/rules/snapshots/NoGlobals.ts.md index 989970e8d..8a764e839 100644 --- a/test/lib/linter/rules/snapshots/NoGlobals.ts.md +++ b/test/lib/linter/rules/snapshots/NoGlobals.ts.md @@ -4,6 +4,70 @@ The actual snapshot is saved in `NoGlobals.ts.snap`. Generated by [AVA](https://avajs.dev). +## General: NoExportedLibValues.js + +> Snapshot 1 + + [ + { + coverageInfo: [], + errorCount: 3, + fatalErrorCount: 0, + filePath: 'NoExportedLibValues.js', + messages: [ + { + column: 39, + line: 5, + message: 'Access of a module not exported by a library', + messageDetails: 'Please import the module itself because it is no longer exported by the library', + ruleId: 'no-implicit-globals', + severity: 2, + }, + { + column: 30, + line: 6, + message: 'Access of a module not exported by a library', + messageDetails: 'Please import the module itself because it is no longer exported by the library', + ruleId: 'no-implicit-globals', + severity: 2, + }, + { + column: 34, + line: 7, + message: 'Access of a module not exported by a library', + messageDetails: 'Please import the module itself because it is no longer exported by the library', + ruleId: 'no-implicit-globals', + severity: 2, + }, + ], + warningCount: 0, + }, + ] + +## General: NoExportedLibValues_Negative.js + +> Snapshot 1 + + [ + { + coverageInfo: [], + errorCount: 1, + fatalErrorCount: 0, + filePath: 'NoExportedLibValues_Negative.js', + messages: [ + { + column: 2, + line: 3, + message: 'Deprecated access of enum pseudo module \'sap/ui/unified/CalendarDayType\'', + messageDetails: 'Migrating Access to Pseudo Modules (https://ui5.sap.com/#/topic/00737d6c1b864dc3ab72ef56611491c4)', + ruleId: 'no-pseudo-modules', + severity: 2, + }, + ], + warningCount: 0, + }, + ] + ## General: NoGlobals.js > Snapshot 1 diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.snap b/test/lib/linter/rules/snapshots/NoGlobals.ts.snap index 05ff848c43fa415bcdb91e66cd0141d683c6530f..a7c04daf6eefd08e5f0ef9e728dfae7992413e98 100644 GIT binary patch literal 2491 zcmV;s2}JfmRzVI4+6N9Uj!<4r?pmv>Hdw;cz?$ z*fi&J?H`K>00000000B+nrmzvR~5&9chhLT4q2}$cd zLR%r)&hFl|CyZydGqXuuk(O31P)Y+T^y1S-QGw$omIwl%}*b z;~MoQ>xTQ&mhH;qF+Ki%&B#b6cGA%uQ%gGwmg_uxKAF^9?XHLuq8jf{M1`^wm;%~F zq(y`e*tWJLM8RrmYC_Z^1foue>k6Ri)4&A$~xyPb1u3l9Y>p&j<3V|)0%DS=KRWcMpw`nT0vt} zRDDUnR|R}S!1u&T&a3>Khq9diL}WRy6GA8yh44%zr-TA$6ga2A^9qDQuoQylLOvzJ zE0u_f>K8-s>kzyWg1RcWqY8de1#egRppg>jKo~~Ca3~D-gyFd`3`XF#h!0x5n*J+@ zj3g{0vuNhk9rd+V8M-O+ZDC(qbzYjn=bZ-<3F$bhl~Ofz(Mo0vshXCn%Dm2Md`Z<* zLyy~1w*+6u!QB&XAfTRejOxLUk8pp<~^3q>)nNGNEO>2V7NmRMS!o z%bb_?ig$Xb)!!PiGlo2pEPQM;tzG(J+RziayKCOC;+o-~c2P&3lD6(HzLb{! zgmsAk)sE})w&v>Qyqb@G*HY(lFFKxmk)w_+xNh3HW?~|v&%_)p9ZOh?6T=g(mDUpz zlasT1W|MmpyW>~yolYk9Xz|%8nVQ+VclYk;eY+FW+slV+i)ro3jcZqKTx$*3%(8gB zF&FBq2Ir2RbqUU90pn{8&f}LIob{Cn&idsXWnH>(`H?7^-xS$0k2(c96&TD1(5wOn z6*#WIoeCrrFcnx*;86uWrNHMD%7${oR}^?ofp07DLj_(`;CBkVq`=Dx{7V5P1PvkR z4#99}WruBkIh(R_#zKX9RSOmC)u%(bdbLi7pL%AlwEeedR%Ojy-iX6l^Ip%4WX;cb zW_7L%&iy!f<{O?_lQnmS$-cTy2(Jniby@Q%&#cdyKlaRqtogcUHfA5swe5%$JWWN4 zo}P~sJ^e$Z=xJAV(bHS2i=IANUG(&4)kRN3(W0mCiWWUxiWWWnRy5~nRD@rN!fR3J zsDV8-aC41srdRnZ@9-Nn@OBLh)WZH+xT`j(&JVv{3vbmze;r&`2Y1#5)%W30J=E00 z_IkLn9uoEC>-wk&M;f5M0d_XP(FRC0_#n{|NLwTHG{U|{xT6uAMjxc61k%?8!%c9g z3A83S)8vEHmOyqi!|rCdr5UVdc%s<{sVjj@wZPRaaAymgYJsO(e31GQ$aSr7uodF1 z@R3&de5()APy#vJ21ncAWE*_E4W4Q9K^jXS$J*i6cCg#w)9vuJb|0jv1ah(&YsmfGaHt!! zZaC8oFLuM(9(caT2W>Bb{=NtP*aL6&K-U(ydkYNq!qHwIw4(%ivKP|5aJCmN^uk-c z@T0Bpx2-;CX9={n51RWR)(1!X;Hf@1(GL&y`=DJV&@cAGGyU*FKm4g5_6@*)24F<> zLAy(!H>mJF6?7FIQ{k^FJUa-#8uUSXN}zuqgnte~`w&bH!Q(@4Y#1`bKIoPb=x2xF z+%SB17=Akpv8&)8SHYGMAGEgwdd&#Ddj#$tfd@w5g%Nmc8+?7654yDk`pa$bn{Dvw zHfS7$yGLPg433WZpnavfjzM}1&W^!_F?ekZzOx-(+U|q)mq5ihRFA{RI2;&ho51?owKMC9a;7rt6imwmM|X`!c#MZ(A}GL#l47LtYPF>3MxD zqhB9e);zX-Xh=<186%lps>Y?7l&-WFbyFtSnTg4OO8%h=5RsHA-IS|wkZW1z;rr3c zhhGyg5k66giLfAzw6x!oF%zzCnK>R38OMzodOWtW@d{GW7(m4%>k<>*N-U%QAA_MB z1x*1Id~#hVIIWvW>+}aaDuzC|amZ-CBEOM2GGZHQTC@Z(@#MNNk=y#aJ^y>TaoA`L zVB@3flRK^S#-gF^iiAg6v!&^7EGF6mnE2TGBo1k$HWm+^SA++5LEB*SVIZKSe6Vsf zM70Evt#zocShAQFEkfp2Q#i~ znf}?b`k9V$j>A@VBpxlkZnNh*`E#WcM`rSeNsemS>VdfO%uIZ8dhg8izS-IM-aSbz5tnjuW@c)3_f)`fP_1cI z@G#t8Xe?KzEM4{H~F9QoDaso62e9zYp)%X2;sK*_5SnvIK3) zj-PO{n@-7#7k3ZL9Vtk%d~bD)cXGRyT>*AIg7c4+C&ar+d(nkmT3Qd{rEvAVzw|0? z`3vvj$%@{o{XXz#pj*JyTJO}JxZFFn{>!qLd8M{vRj#tG-M2os+%I{#{l9eVT9|t` F002Up-2wmr literal 2012 zcmV<22P61FRzVUG1q_JjTO?VkCa`M&@E%+5K-=UOhEH!~l$pZ&6QbSE#1C#4}R zEq_pb&^(zp(^}q6&DpwbXa#%LbnJ`QvRTd19^2I$B7*xTqC(jXOakp9+$!piT9&pb z#8MQG#}SPPfoKxq&=M3m4_pAQ0^bMz2qXlIi*iTdhthL0;|Qe^CK3rmGa`&=5#j*> z9U_FNZxykOxgafVMxHWqCL&I|P?p*nrDd7cakFSR-dA-Z=DQ-E(;O{-pYJk!S4DGr zUY^#R*~(3qYviSLeOXG;d1>3)jI@2-#LjD$p&K(R?-Uh@Hv|X;niS|#U`T=83hYAus&58`gQ@9=GCpFZ_@j zhQ07JZW!^xAA6E`;SD!z@WS2oc(-m6;&C@@^1>@_81up(xnZ*xzV3!C-sPpXUE!rn zbKy#+*TR)de;cl3+8wE6`beab>7_^|)1O8vnTDd3Oy3o)WV#rwWctl$DbuK^|7#Rp zi$Z4u+|>XNHTXt)-O7<374~4nXX2>=BkZ1sDZ-L$xIM4#`Zvnf-hcpC`{y2=p z;dmUhI9!PPkj4PAD*<;V;Nb+A33xH#Lz)7}WGmd$3TInkp%t#Q`jA)vIn)Nn+92Hq zA8CUxwE2+c0CJ)orrTkz9X{R;FSYxSmH={p2RzaNRtJ2#1HRtjL*fBsx)V-!LZK5b zcf$2fACd?lhr8f-7i7BNVi$a|%ZIcEkbAq~Xg6rx@Ju&c?e-yUek5|Z2aflE)&m!M z;FTV@+za3C^`RXB^f$fmyIy#s7rM8>xot4i2h)8%v@?Lt^+BNzF89IpK6tYaez+a} zyxoU(1<=NRNc2OhAEx`^N%S`1>8OZPbVM1<-?|@a|DKHwsUU!po!Z+z$B04j;Nbfc|_3{Bj5UV+XX1!MQOQ zO2Tx~hxP}3O+q0Fmy>Wk39lvLJ3Hakoj!CRfQoU5jKk2E81>@RGr0wRLz{KXQkojIbB-nuqB@;>Xv+T(Z~#| zx}grcJ)~@{a3odKkEE70CwC4Hs~NMH&#H#$sA;KYr6a9*-H_RJR$}k!N{DA_AVgN? zbVJ@sgHp>nm+z;Sm)}rjAbg@017TL?3(|T|(a1QuX_R!x6m2J!*VCz$jTABEcuuMS}CXku}eMz?EY7gPTW;#D@Gvmc&SHs$tPuMTtx6 zqQs21)_q_3_j2>7(N;x`=hx@mX%;q@4DB28coZ~C8qVfYqN9ouA6uUnhs@_TmkwPU zqJuN5ZL;w&SY=B2bnRp)Nig?tQCf?h2<7iLu=8H2rjc?#Z(zwg z-vPr{tRYJ8f=#l77_ai!U#!Jrzr6gL?|`?ZKzP*(qpMWtZ}a<`I-1Ey+jes1c_`0<{ElW2&b81SR zH?u|eThmgHo<3!#)JLUMk4f86Pg`2X(KFIkbEc)9kP9+z7NljX$yvuK*as&jiu#oI z%aJkXCq^b5v!G`tChy5*vQty(z5DK-+IL|8{`B2CV!qQ`X>&f1CI81VTI^esB`aU% zTmIC}pDJs7k*w-ZX^Fb!N$otTveh8&U85(rmf4$xY&uW+t9Y_^6;Dc=MPq8RylbS* zX-{r>Q#)@4s(7<&?cQwJQaf9!ZOV?HvAs>FtSng4-5blg0xemxd~bDZO|FRU6E}Nu zT!G7%tu9EbVeYw^!XB-lSJS0@lJ?1g;8EJgACxniqc6x?o~ad=YI>&jd%z!n9s!eU uJyUz;cF)xM56j->k=o8%YUQQ&#Oinh9CZT|yNb6PGNEdT&kiRQ%s From c51cb0254747cdeeb3c1c2fd35d6dea49c723ace Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Thu, 9 Jan 2025 11:49:54 +0200 Subject: [PATCH 05/25] fix: Breaking check --- src/linter/ui5Types/SourceFileLinter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/linter/ui5Types/SourceFileLinter.ts b/src/linter/ui5Types/SourceFileLinter.ts index 9c4cde6ba..9b966a24b 100644 --- a/src/linter/ui5Types/SourceFileLinter.ts +++ b/src/linter/ui5Types/SourceFileLinter.ts @@ -1187,7 +1187,7 @@ export default class SourceFileLinter { } analyzeExportedValuesByLib(node: ts.PropertyAccessExpression) { - if (node.name.kind !== ts.SyntaxKind.Identifier) { + if (node.name?.kind !== ts.SyntaxKind.Identifier) { return; } From 5b5f3dbc5e6736a31bbbf64d56d0d5878c52d4bd Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Thu, 9 Jan 2025 13:41:09 +0200 Subject: [PATCH 06/25] test: Add more test cases --- .../fixtures/linter/rules/NoGlobals/NoExportedLibValues.js | 7 ++++--- .../linter/rules/NoGlobals/NoExportedLibValues_Negative.js | 6 ++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js index 4bd236648..3945c63ab 100644 --- a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js +++ b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js @@ -1,8 +1,9 @@ -sap.ui.define(["sap/ui/unified/library"], - function (unifiedLibrary) { +sap.ui.define(["sap/ui/unified/library", "sap/ui/mdc/library"], + function (unifiedLibrary, mdcLibrary) { "use strict"; var CalendarDayType = unifiedLibrary.CalendarDayType, DateRange = unifiedLibrary.DateRange, - DateTypeRange = unifiedLibrary.DateTypeRange; + DateTypeRange = unifiedLibrary.DateTypeRange, + FilterItemLayout = mdcLibrary.filterbar.aligned.FilterItemLayout; }); diff --git a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js index 9706ae09f..a420ebc62 100644 --- a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js +++ b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js @@ -1,14 +1,16 @@ sap.ui.define([ "sap/ui/unified/library", + "sap/ui/mdc/library", "sap/ui/unified/CalendarDayType", "sap/ui/unified/DateRange", "sap/ui/unified/DateTypeRange", ], - function (unifiedLibrary, CalendarDayType, DateRange, DateTypeRange) { + function (unifiedLibrary, mdcLibrary, CalendarDayType, DateRange, DateTypeRange) { "use strict"; var CalendarDayTypeLib = unifiedLibrary.CalendarDayType, DateRangeLib = unifiedLibrary.DateRange, - DateTypeRangeLib = unifiedLibrary.DateTypeRange; + DateTypeRangeLib = unifiedLibrary.DateTypeRange, + FilterItemLayout = mdcLibrary.filterbar.aligned.FilterItemLayout; }); From c11d7a82490523a452aa7a3c5606beaa3b487a79 Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Thu, 9 Jan 2025 14:01:30 +0200 Subject: [PATCH 07/25] refactor: Add support for PropertyAccessExpression-s --- src/linter/ui5Types/SourceFileLinter.ts | 14 +++++++++++--- .../linter/rules/snapshots/NoGlobals.ts.md | 2 +- .../linter/rules/snapshots/NoGlobals.ts.snap | Bin 2491 -> 2490 bytes 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/linter/ui5Types/SourceFileLinter.ts b/src/linter/ui5Types/SourceFileLinter.ts index 9b966a24b..68fde9679 100644 --- a/src/linter/ui5Types/SourceFileLinter.ts +++ b/src/linter/ui5Types/SourceFileLinter.ts @@ -1191,7 +1191,12 @@ export default class SourceFileLinter { return; } - const exprNode = node.expression; + let exprNode = node.expression; + const namespace: string[] = []; + while (ts.isPropertyAccessExpression(exprNode)) { + namespace.unshift(exprNode.name.text); + exprNode = exprNode.expression; + } const exprType = this.checker.getTypeAtLocation(exprNode); const potentialLibImport = exprType.symbol?.getName().replaceAll("\"", "") ?? ""; @@ -1201,8 +1206,11 @@ export default class SourceFileLinter { return; } - const namespace = potentialLibImport.replace("/library", ""); - const moduleName = `${namespace}/${node.name.text}`; + const moduleName = [ + potentialLibImport.replace("/library", ""), + ...namespace, + node.name.text, + ].join("/"); // Check if the module is registered within ambient modules const ambientModules = this.checker.getAmbientModules(); diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.md b/test/lib/linter/rules/snapshots/NoGlobals.ts.md index 8a764e839..f243da050 100644 --- a/test/lib/linter/rules/snapshots/NoGlobals.ts.md +++ b/test/lib/linter/rules/snapshots/NoGlobals.ts.md @@ -57,7 +57,7 @@ Generated by [AVA](https://avajs.dev). messages: [ { column: 2, - line: 3, + line: 4, message: 'Deprecated access of enum pseudo module \'sap/ui/unified/CalendarDayType\'', messageDetails: 'Migrating Access to Pseudo Modules (https://ui5.sap.com/#/topic/00737d6c1b864dc3ab72ef56611491c4)', ruleId: 'no-pseudo-modules', diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.snap b/test/lib/linter/rules/snapshots/NoGlobals.ts.snap index a7c04daf6eefd08e5f0ef9e728dfae7992413e98..4535f26d1e86755f53887e2d7815ac94ffb6ee30 100644 GIT binary patch delta 1795 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 From 3cb4e5ec3bdd48e242fb8dba67a03ec01efeca7c Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Thu, 9 Jan 2025 14:16:33 +0200 Subject: [PATCH 08/25] test: Update snapshots --- .../linter/rules/snapshots/Directives.ts.md | 68 +++++++++++++++++- .../linter/rules/snapshots/Directives.ts.snap | Bin 1158 -> 1435 bytes .../rules/snapshots/NoDeprecatedApi.ts.md | 67 +++++++++++++++-- .../rules/snapshots/NoDeprecatedApi.ts.snap | Bin 18026 -> 18325 bytes test/lib/linter/snapshots/linter.ts.md | 18 ++++- 5 files changed, 145 insertions(+), 8 deletions(-) diff --git a/test/lib/linter/rules/snapshots/Directives.ts.md b/test/lib/linter/rules/snapshots/Directives.ts.md index 60652c68a..c4864b17e 100644 --- a/test/lib/linter/rules/snapshots/Directives.ts.md +++ b/test/lib/linter/rules/snapshots/Directives.ts.md @@ -11,7 +11,7 @@ Generated by [AVA](https://avajs.dev). [ { coverageInfo: [], - errorCount: 9, + errorCount: 13, fatalErrorCount: 0, filePath: 'Directives.js', messages: [ @@ -47,6 +47,14 @@ Generated by [AVA](https://avajs.dev). ruleId: 'no-deprecated-api', severity: 2, }, + { + column: 10, + line: 65, + message: 'Access of a module not exported by a library', + messageDetails: 'Please import the module itself because it is no longer exported by the library', + ruleId: 'no-implicit-globals', + severity: 2, + }, { column: 2, line: 68, @@ -55,6 +63,14 @@ Generated by [AVA](https://avajs.dev). ruleId: 'no-deprecated-api', severity: 2, }, + { + column: 10, + line: 68, + message: 'Access of a module not exported by a library', + messageDetails: 'Please import the module itself because it is no longer exported by the library', + ruleId: 'no-implicit-globals', + severity: 2, + }, { column: 2, line: 72, @@ -63,6 +79,22 @@ Generated by [AVA](https://avajs.dev). ruleId: 'no-deprecated-api', severity: 2, }, + { + column: 10, + line: 72, + message: 'Access of a module not exported by a library', + messageDetails: 'Please import the module itself because it is no longer exported by the library', + ruleId: 'no-implicit-globals', + severity: 2, + }, + { + column: 12, + line: 93, + message: 'Access of a module not exported by a library', + messageDetails: 'Please import the module itself because it is no longer exported by the library', + ruleId: 'no-implicit-globals', + severity: 2, + }, { column: 6, line: 108, @@ -99,7 +131,7 @@ Generated by [AVA](https://avajs.dev). [ { coverageInfo: [], - errorCount: 9, + errorCount: 13, fatalErrorCount: 0, filePath: 'Directives.ts', messages: [ @@ -135,6 +167,14 @@ Generated by [AVA](https://avajs.dev). ruleId: 'no-deprecated-api', severity: 2, }, + { + column: 9, + line: 73, + message: 'Access of a module not exported by a library', + messageDetails: 'Please import the module itself because it is no longer exported by the library', + ruleId: 'no-implicit-globals', + severity: 2, + }, { column: 1, line: 76, @@ -143,6 +183,14 @@ Generated by [AVA](https://avajs.dev). ruleId: 'no-deprecated-api', severity: 2, }, + { + column: 9, + line: 76, + message: 'Access of a module not exported by a library', + messageDetails: 'Please import the module itself because it is no longer exported by the library', + ruleId: 'no-implicit-globals', + severity: 2, + }, { column: 1, line: 80, @@ -151,6 +199,22 @@ Generated by [AVA](https://avajs.dev). ruleId: 'no-deprecated-api', severity: 2, }, + { + column: 9, + line: 80, + message: 'Access of a module not exported by a library', + messageDetails: 'Please import the module itself because it is no longer exported by the library', + ruleId: 'no-implicit-globals', + severity: 2, + }, + { + column: 11, + line: 101, + message: 'Access of a module not exported by a library', + messageDetails: 'Please import the module itself because it is no longer exported by the library', + ruleId: 'no-implicit-globals', + severity: 2, + }, { column: 5, line: 115, diff --git a/test/lib/linter/rules/snapshots/Directives.ts.snap b/test/lib/linter/rules/snapshots/Directives.ts.snap index fa260af46b48e0b61a869bebfcc4615884411383..fa51206a050b933fe25e085fba410e4b52449846 100644 GIT binary patch literal 1435 zcmV;M1!Vd`RzV?4Wgm+O00000000B+SWSo=MHqe6yVLXk=j<9JA_WmAA=#N^&Fq@Q5H`DF7L8fl z1k53anx2~3jy>H&SIw*=NKo;pfwQ)AzDM=f-&(zDImXN4jgPrBrNukXa+|x%+DjKqmmAXTa8Wub zOkuN@SaGCyeXUkwk{zEsJ%%W}ABhod2Y_h+1)}FkWX^S2mykZnX0sp(5CW1U$vky+m`;&xEEqzMz+o*vz}3=L75e+n-*VUa-~0z9uUdj)5+`h z6l-!JSc3~CPHL68wrMv8mx>LjH#VSNjAXtczBCJCfTVm|ychvqiU6Gm@LmM?Edp%Qf#bSj zi^!lYVkFwtfm1s0kq&%y75}XR`=dZJs!;VI>f2YRoQ?u#qrinIusH_&5(A=fg&G~A z7URHF9C$7cG~&SLap2cD@JK?T#)hbS62O53a3TS86TtZdurCQTlL|FHyy2@;PA7r0 zN#H^fm`nl7Dd5eNLQM=&KS=?frGRf!z{M0$P6MB&fgjQeH9186BMtnO1~zAa*$i+h z1DwkMmoo}AHAGEkfkGD8l?4uGfe*7lHV4e*6l!{i%5p#>2fUR7)^fn*9AM;u_wx!h zGerF|4}6^me#`^E=Yjc$0KEW|3ko$mL_Jafjuik=0NyPCmkPj^31E3bq2`9DVgl$+ z03S>MUrYdzNnm~w5R(cuztPn;a9QYvW3`)h@8VLQj$5Y9d(R$Lo<)1tPyhd(d1hHu zI<&@HE;pFuHCk`mhBO_U7MYaHSUJjCMe5Y4VKE_S@nBm@$1W;?GrhnITr$%V{ozdu z*WyYpB<)R859GEjzF6!3&D+k@wGB8br1`7_g z9ZB1Qt6_zg0Jgs9vBe5)I<>Yp>bP`nX;GBuGUxQ5C+L#P3~3r%(7NN&1>WJ7)8ek6 zTUVrPiM{1=+pLtl?HNw9yrnFimT8oypQ;SG)#GiT(&Sm)2%@+JG?&kXt%}hFQ<)CC3M=& zJMB>Dv|CUmblS$6rUEoQ5o&td>qIN86YpZ3I2Mo@dqietg6>tn2gqyp!MrvPB z)o40MBY6*e83#3SW!S_W-Ncn)6E|$)hE3eCiTl4caU%imsK>%4ZeJ!6Ak)kP+QbdA z&TLqm-^JoQ$gT4aWD_?YpvYqQaemuf_WT3eS_^X8C{;qI-MrJ5LZ{t=DxuRh)-)NQ pshZL78cXP27GRzV@p!} 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 Ia!)G)0CNDxyZ`_I literal 18026 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 N|36ztGT`zb0st}PB(MMg diff --git a/test/lib/linter/snapshots/linter.ts.md b/test/lib/linter/snapshots/linter.ts.md index 74a6f7a0c..3048533e3 100644 --- a/test/lib/linter/snapshots/linter.ts.md +++ b/test/lib/linter/snapshots/linter.ts.md @@ -2362,7 +2362,7 @@ Generated by [AVA](https://avajs.dev). }, { coverageInfo: [], - errorCount: 18, + errorCount: 20, fatalErrorCount: 0, filePath: 'src/sap/ui/core/FancyText.js', messages: [ @@ -2374,6 +2374,22 @@ Generated by [AVA](https://avajs.dev). ruleId: 'no-deprecated-api', severity: 2, }, + { + column: 34, + line: 3, + message: 'Access of a module not exported by a library', + messageDetails: 'Please import the module itself because it is no longer exported by the library', + ruleId: 'no-implicit-globals', + severity: 2, + }, + { + column: 26, + line: 4, + message: 'Access of a module not exported by a library', + messageDetails: 'Please import the module itself because it is no longer exported by the library', + ruleId: 'no-implicit-globals', + severity: 2, + }, { column: 17, line: 8, From 68ee498f47da4876e27101d81ef2368956b10166 Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Thu, 9 Jan 2025 14:43:55 +0200 Subject: [PATCH 09/25] test: Fix test cases --- .../rules/NoGlobals/NoExportedLibValues.js | 6 +++--- .../NoGlobals/NoExportedLibValues_Negative.js | 8 +++---- .../linter/rules/snapshots/NoGlobals.ts.md | 20 ++++++++++++++++-- .../linter/rules/snapshots/NoGlobals.ts.snap | Bin 2490 -> 2605 bytes 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js index 3945c63ab..baa800da1 100644 --- a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js +++ b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js @@ -1,9 +1,9 @@ -sap.ui.define(["sap/ui/unified/library", "sap/ui/mdc/library"], - function (unifiedLibrary, mdcLibrary) { +sap.ui.define(["sap/ui/unified/library", "sap/ui/core/library"], + function (unifiedLibrary, coreLibrary) { "use strict"; var CalendarDayType = unifiedLibrary.CalendarDayType, DateRange = unifiedLibrary.DateRange, DateTypeRange = unifiedLibrary.DateTypeRange, - FilterItemLayout = mdcLibrary.filterbar.aligned.FilterItemLayout; + FilterItemLayout = coreLibrary.tmpl.DOMAttribute; }); diff --git a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js index a420ebc62..eb59c5eee 100644 --- a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js +++ b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js @@ -1,16 +1,16 @@ sap.ui.define([ "sap/ui/unified/library", - "sap/ui/mdc/library", + "sap/ui/core/library", "sap/ui/unified/CalendarDayType", "sap/ui/unified/DateRange", "sap/ui/unified/DateTypeRange", - + "sap/ui/core/tmpl/DOMAttribute", ], - function (unifiedLibrary, mdcLibrary, CalendarDayType, DateRange, DateTypeRange) { + function (unifiedLibrary, coreLibrary, CalendarDayType, DateRange, DateTypeRange, DOMAttribute) { "use strict"; var CalendarDayTypeLib = unifiedLibrary.CalendarDayType, DateRangeLib = unifiedLibrary.DateRange, DateTypeRangeLib = unifiedLibrary.DateTypeRange, - FilterItemLayout = mdcLibrary.filterbar.aligned.FilterItemLayout; + DOMAttribute = coreLibrary.tmpl.DOMAttribute; }); diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.md b/test/lib/linter/rules/snapshots/NoGlobals.ts.md index f243da050..5b36c0b7a 100644 --- a/test/lib/linter/rules/snapshots/NoGlobals.ts.md +++ b/test/lib/linter/rules/snapshots/NoGlobals.ts.md @@ -11,7 +11,7 @@ Generated by [AVA](https://avajs.dev). [ { coverageInfo: [], - errorCount: 3, + errorCount: 4, fatalErrorCount: 0, filePath: 'NoExportedLibValues.js', messages: [ @@ -39,6 +39,14 @@ Generated by [AVA](https://avajs.dev). ruleId: 'no-implicit-globals', severity: 2, }, + { + column: 39, + line: 8, + message: 'Access of a module not exported by a library', + messageDetails: 'Please import the module itself because it is no longer exported by the library', + ruleId: 'no-implicit-globals', + severity: 2, + }, ], warningCount: 0, }, @@ -51,7 +59,7 @@ Generated by [AVA](https://avajs.dev). [ { coverageInfo: [], - errorCount: 1, + errorCount: 2, fatalErrorCount: 0, filePath: 'NoExportedLibValues_Negative.js', messages: [ @@ -63,6 +71,14 @@ Generated by [AVA](https://avajs.dev). ruleId: 'no-pseudo-modules', severity: 2, }, + { + column: 2, + line: 7, + message: 'Import of deprecated module \'sap/ui/core/tmpl/DOMAttribute\'', + messageDetails: 'Deprecated test message', + ruleId: 'no-deprecated-api', + severity: 2, + }, ], warningCount: 0, }, diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.snap b/test/lib/linter/rules/snapshots/NoGlobals.ts.snap index 4535f26d1e86755f53887e2d7815ac94ffb6ee30..623da68698abb162493cf8bcfcc56dc1b21386c7 100644 GIT binary patch literal 2605 zcmV+|3expKRzV=1?F*xeZrS(j@Ub(^Dwm(+D($?# zgxD#kS09TA00000000B+n|p8_RUOAaXYVubq)ApvXv=oZi2Vx4P;D_WxFzcjh_67X5^%kIO6Dzsb!rh%XRKOola}6c1yf1L=5jw#D%f}*aEbR zXq$-awry=jh?3RP(t@Z*2ts-_xx($?%5UtP_`y7oy|(+#Ke_~0Q! zYK~O(X|D>^osy-Bb=Q$bMor3;mh)b4RozidOEoNWQrdIA>7nNTYShjdaw1*&x81Zh z>eE?6PwDQ)NyAENhJOIZ9eGsRx;sb)72)44N>ni<;PQn=6}O*vRH4)+s#q03TfUW_SfubG z^tga01UwZKRusa9=gMKl+oBLw#6@ho0=pFWr~*e7cvXQ+2)+^=Kzug@Plw>wA$TJM z*M;HXFgzQs9zX<6XTLbJr?WpC^iSsx?~_?urZjIBY2}$M&D^w_b!0AWm8RlaN6U`o z^s$_&XLOk!+p8JUOl$T&ZRWZ!3!n|5s7k=~x#oV;ZFwsdN%mfW#LX2!Q~-@JL- z&dsT9>#9%wHq+Wz=-0+VziQ!5tMMPSL|ryfaC%loO`lW3$9c-K<(NC2HOBTGJh0n! zZ9SQD7fN~eEQMX^xN7mWV4}`7Xrq?Z7w98%vs~m=1@AhqKV09tDE_eZ-4tSUq5kl| zdHci0+W5o9*&OAYbmsh>pJ>hdDFqr7=u%*{0vi6wL;Z==`aNZ!2NGoyL)i=G+Fn?EY72cG$sXV&G-4H5F6 zZV=)&&uqw>k9cNd-u$6wHs#GXJ+nFgdZBE6wA9i}wA|9u(Q-?F6D_y2J63M#^|5kG zPsGYC{c)_^(onqI(htPTEuD#%Tl!?Y(9*bw{51||@@74}Qx5|Tu&V)XZV1Y7BcVp9YlL-;a8)Cu8iO+1NVEwWn_xo| z>~DfhQ}v8CE+XyC(Ax|V@C-!rQ&jy%KI+39I{Hf1eN9SphxL2iZP2*#~F(;GI5r{v!DEMLuX(1+=~&TKgf< z5BvM!k$yNl0QU^|pxqVFuMfau1MtECygC3oSHZtl!LaIs_EbQxRN-nBbQSJb;g2eO zb2a>YwGY}`0sY%*cw;qm48o>CcyJJ|8G_u954y4f`sE=wH3UBxf>(whaWTApF{~W+ zLHjD8mkz@RhvC*?xN8_*7>4`Tz<1X8pchp@f3^mGu?GIW2AbExt!rWR2<#v6LHjFp z9f9l!oE(8OBXD*EzP}D$TjzrgR6xZj#71Fw6n2loL!*3Df9dQ%bF6xxsXWMGQ%f4s3%E5?GiL6Rsyn4S>a=vHthAca45OTAd&#sr zla*drs;8ytdNIGP4%+h0oNmh-X3W%}s+;PdSA!R$Uy;b^S0rW?kE|OUR8v;YNauG4 zl2T1eSK8CMDbtJ0#HN6d`;#>wA}uqzDd*#$P_oF~_oHWbzb;@Pe6AJ)VM-cVX@4kZ zrd-`J3p}K9j+-#_WMXdN1*D=mfQnBq%AD|0)|~!-oD9_{XbGU;^NT{kG2KjC$3Es! zG5GPNLq_Wb@sR~G5=&}Wv;{D6Vo{hV?6%%m^p{JAjTHfGJg_)xr54M~ko8 z{6Sdp0PgU_c<}_tQ7v2DeQ3f-s5eNd?(vRq4%u4D)llm3Xv|ioAwZe63sYuU zlJ_Uc|ByzDZ3~iQ?qa^IPwn&x$nnKUpgx5Zby<_zX%ev2ATC>=CiBF>%QDqYrht7A zaYdj^RrfTOrK+7&0XezY8N3S3pI-aTm3f%;zUjF)IJUT9_SIUWubR!51;RyTK{F)^Sn~qIWJfFrro(XKP-69 P-xB;62``7Qj5+`S^(`Hz literal 2490 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 E0Qht9g8%>k From 0c2b2545d3b5ad02528f45d313f2c0ba9eee8906 Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Thu, 9 Jan 2025 15:08:39 +0200 Subject: [PATCH 10/25] refactor: Improve messaging --- src/linter/messages.ts | 5 +-- src/linter/ui5Types/SourceFileLinter.ts | 9 ++++- .../linter/rules/snapshots/Directives.ts.md | 32 +++++++++--------- .../linter/rules/snapshots/Directives.ts.snap | Bin 1435 -> 1490 bytes .../rules/snapshots/NoDeprecatedApi.ts.md | 28 +++++++-------- .../rules/snapshots/NoDeprecatedApi.ts.snap | Bin 18325 -> 18386 bytes .../linter/rules/snapshots/NoGlobals.ts.md | 16 ++++----- .../linter/rules/snapshots/NoGlobals.ts.snap | Bin 2605 -> 2675 bytes test/lib/linter/snapshots/linter.ts.md | 8 ++--- 9 files changed, 53 insertions(+), 45 deletions(-) diff --git a/src/linter/messages.ts b/src/linter/messages.ts index c61de50f7..bc63bd68e 100644 --- a/src/linter/messages.ts +++ b/src/linter/messages.ts @@ -576,8 +576,9 @@ export const MESSAGE_INFO = { severity: LintMessageSeverity.Error, ruleId: RULES["no-implicit-globals"], - message: () => "Access of a module not exported by a library", - details: () => "Please import the module itself because it is no longer exported by the library", + message: ({module}: {module: string}) => `Access of a module (${module}) not exported by a library`, + details: ({namespace}: {namespace: string}) => + `Please import the module itself (${namespace}) because it is no longer exported by the library`, }, } as const; diff --git a/src/linter/ui5Types/SourceFileLinter.ts b/src/linter/ui5Types/SourceFileLinter.ts index 68fde9679..678e7b001 100644 --- a/src/linter/ui5Types/SourceFileLinter.ts +++ b/src/linter/ui5Types/SourceFileLinter.ts @@ -1224,7 +1224,14 @@ export default class SourceFileLinter { ts.isStringLiteral(importNode.moduleSpecifier) && importNode.moduleSpecifier.text === moduleName); if (isRegisteredAsUi5Module && !hasAmbientModuleExplicitImport) { - this.#reporter.addMessage(MESSAGE.NO_EXPORTED_VALUES_BY_LIB, node.name); + this.#reporter.addMessage(MESSAGE.NO_EXPORTED_VALUES_BY_LIB, { + module: [ + exprNode?.getText(), + ...namespace, + node.name.text, + ].join("/"), + namespace: moduleName, + }, node.name); } } diff --git a/test/lib/linter/rules/snapshots/Directives.ts.md b/test/lib/linter/rules/snapshots/Directives.ts.md index c4864b17e..91203da01 100644 --- a/test/lib/linter/rules/snapshots/Directives.ts.md +++ b/test/lib/linter/rules/snapshots/Directives.ts.md @@ -50,8 +50,8 @@ Generated by [AVA](https://avajs.dev). { column: 10, line: 65, - message: 'Access of a module not exported by a library', - messageDetails: 'Please import the module itself because it is no longer exported by the library', + message: 'Access of a module (coreLib/MessageType) not exported by a library', + messageDetails: 'Please import the module itself (sap/ui/core/MessageType) because it is no longer exported by the library', ruleId: 'no-implicit-globals', severity: 2, }, @@ -66,8 +66,8 @@ Generated by [AVA](https://avajs.dev). { column: 10, line: 68, - message: 'Access of a module not exported by a library', - messageDetails: 'Please import the module itself because it is no longer exported by the library', + message: 'Access of a module (coreLib/MessageType) not exported by a library', + messageDetails: 'Please import the module itself (sap/ui/core/MessageType) because it is no longer exported by the library', ruleId: 'no-implicit-globals', severity: 2, }, @@ -82,16 +82,16 @@ Generated by [AVA](https://avajs.dev). { column: 10, line: 72, - message: 'Access of a module not exported by a library', - messageDetails: 'Please import the module itself because it is no longer exported by the library', + message: 'Access of a module (coreLib/MessageType) not exported by a library', + messageDetails: 'Please import the module itself (sap/ui/core/MessageType) because it is no longer exported by the library', ruleId: 'no-implicit-globals', severity: 2, }, { column: 12, line: 93, - message: 'Access of a module not exported by a library', - messageDetails: 'Please import the module itself because it is no longer exported by the library', + message: 'Access of a module (mobileLib/InputType) not exported by a library', + messageDetails: 'Please import the module itself (sap/m/InputType) because it is no longer exported by the library', ruleId: 'no-implicit-globals', severity: 2, }, @@ -170,8 +170,8 @@ Generated by [AVA](https://avajs.dev). { column: 9, line: 73, - message: 'Access of a module not exported by a library', - messageDetails: 'Please import the module itself because it is no longer exported by the library', + message: 'Access of a module (coreLib/MessageType) not exported by a library', + messageDetails: 'Please import the module itself (sap/ui/core/MessageType) because it is no longer exported by the library', ruleId: 'no-implicit-globals', severity: 2, }, @@ -186,8 +186,8 @@ Generated by [AVA](https://avajs.dev). { column: 9, line: 76, - message: 'Access of a module not exported by a library', - messageDetails: 'Please import the module itself because it is no longer exported by the library', + message: 'Access of a module (coreLib/MessageType) not exported by a library', + messageDetails: 'Please import the module itself (sap/ui/core/MessageType) because it is no longer exported by the library', ruleId: 'no-implicit-globals', severity: 2, }, @@ -202,16 +202,16 @@ Generated by [AVA](https://avajs.dev). { column: 9, line: 80, - message: 'Access of a module not exported by a library', - messageDetails: 'Please import the module itself because it is no longer exported by the library', + message: 'Access of a module (coreLib/MessageType) not exported by a library', + messageDetails: 'Please import the module itself (sap/ui/core/MessageType) because it is no longer exported by the library', ruleId: 'no-implicit-globals', severity: 2, }, { column: 11, line: 101, - message: 'Access of a module not exported by a library', - messageDetails: 'Please import the module itself because it is no longer exported by the library', + message: 'Access of a module (mobileLib/InputType) not exported by a library', + messageDetails: 'Please import the module itself (sap/m/InputType) because it is no longer exported by the library', ruleId: 'no-implicit-globals', severity: 2, }, diff --git a/test/lib/linter/rules/snapshots/Directives.ts.snap b/test/lib/linter/rules/snapshots/Directives.ts.snap index fa51206a050b933fe25e085fba410e4b52449846..80677a9472e891bb2994f9d98c58fd96b1f97640 100644 GIT binary patch literal 1490 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 N{|^_rcaw)K0s!^()MEeu literal 18325 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 Ia!)G)0CNDxyZ`_I diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.md b/test/lib/linter/rules/snapshots/NoGlobals.ts.md index 5b36c0b7a..5aa5c71cd 100644 --- a/test/lib/linter/rules/snapshots/NoGlobals.ts.md +++ b/test/lib/linter/rules/snapshots/NoGlobals.ts.md @@ -18,32 +18,32 @@ Generated by [AVA](https://avajs.dev). { column: 39, line: 5, - message: 'Access of a module not exported by a library', - messageDetails: 'Please import the module itself because it is no longer exported by the library', + message: 'Access of a module (unifiedLibrary/CalendarDayType) not exported by a library', + messageDetails: 'Please import the module itself (sap/ui/unified/CalendarDayType) because it is no longer exported by the library', ruleId: 'no-implicit-globals', severity: 2, }, { column: 30, line: 6, - message: 'Access of a module not exported by a library', - messageDetails: 'Please import the module itself because it is no longer exported by the library', + message: 'Access of a module (unifiedLibrary/DateRange) not exported by a library', + messageDetails: 'Please import the module itself (sap/ui/unified/DateRange) because it is no longer exported by the library', ruleId: 'no-implicit-globals', severity: 2, }, { column: 34, line: 7, - message: 'Access of a module not exported by a library', - messageDetails: 'Please import the module itself because it is no longer exported by the library', + message: 'Access of a module (unifiedLibrary/DateTypeRange) not exported by a library', + messageDetails: 'Please import the module itself (sap/ui/unified/DateTypeRange) because it is no longer exported by the library', ruleId: 'no-implicit-globals', severity: 2, }, { column: 39, line: 8, - message: 'Access of a module not exported by a library', - messageDetails: 'Please import the module itself because it is no longer exported by the library', + message: 'Access of a module (coreLibrary/tmpl/DOMAttribute) not exported by a library', + messageDetails: 'Please import the module itself (sap/ui/core/tmpl/DOMAttribute) because it is no longer exported by the library', ruleId: 'no-implicit-globals', severity: 2, }, diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.snap b/test/lib/linter/rules/snapshots/NoGlobals.ts.snap index 623da68698abb162493cf8bcfcc56dc1b21386c7..526211f18bfff050b0aac42f778365a0646bd090 100644 GIT binary patch literal 2675 zcmV-(3XJtZRzVeZGsN9aGhlw5BY6pz zxQDJli64sy00000000B+n`>+w)fLBoGyC-0j^8o1$2LwJCt2s^m_SmR#57GvAUsl_ z6_457yY{5(nPp}+iD`jS0WAeWMIT5_TZsx(DOCMZ=tH97A+@wcs`{a{Qq@w?hmfjD zeMnF!6)m%`*mup26V{E9>@PmMGyl2g{{Q!$d(OSHkEY^jEAesX?r#X!aMR*M|2|;~ zTTfrCU142zB4gRENFFreAJNlU;lz$QhGXg(XWDX|yB$8edw3?clP-;;WlsZM(Sp-Fn1GfXGfFA;X1Xe4sO({Gmd}aKoNVtkx zGMk&5Q5sOfD2~wk>br&1%9T?=RGL%9?bFnl9J=SPEndwieg;unQG3w*E0h-VV+ar z1r`3B{|Ykzp&(2IC1FDIg^4PW>w<7&5IzxvM}qKn5FQG_b0G;DE`z=jf>%Qj3d2Ac z9`OE0;F^d8jg +T&{kqCSz0{u~VDhjVgC1`Y^ku*<|aKcJwXUxJlSu0%)rVUdR zu7#v)k%Gv@&xdv=62fsbE2Zh$jFrr$g*K8kjg*laEw*mYj_uXc!c6M+q&|D?Y(}ip zOv}|oVMuB5Sxwi{`CFyN8Vik03RgGMPVwu^;k3{lp&2vYBQ$qf6k9f2N2F8Qh@)r5 zvc_1!k8%g%BB5u!C%Bs7Xr`s5EptlP^PKV?yRchfJDV2!lf{p%rnS+S$)t^h;clEt zTX8)tPl2c-jtSdvXA7*Vi%_Mnf+{jnR%PEJRGHLWakXwvy>~s1o~<5pntnehF<3!~ zh>sGNFH#9_TvkU7^IX)J)BO8EkxCIO>Z8cPg%n9xwkXQs&ScVKlUE+v?Yg!R&${nj z5^J%Ncy27z{(0A=m_m(IN}+DPLQLtdaZD_jO9g+wB)Qa(0=pKQOWktLxs+O+T&mxP zww#xrT%x2Z@VEj`DDaeDGL=u3o-HL)Zz=g?Dyl@btFTjrkE(D?g_l)G1>nm8-?Ztw z0eCt9zX`zW0l3Obn}YC+oNDVTs$_GHO6C(o{1%_ znX#cU*UA`)u}zyMwoW9sCpO0~+P*EB*s8}TwusdD_U)TDZ`-jsv29)D$=_mH8}t3z znD19L!f_@3{T9ee_UD75mC}-Dl#n=II4&-d^3FL5yTWm`!fpOUopETRo-q~~BeQct zsTe&Q9#`QB6`oSzSruMX;a4iWqQYNQ_?HT5 z02%_&6@a0@{0FwmayI4Uj0K8ORu7a))-MK1CF=`;e92m;DF61%e4)G1>v1S&-r||z zocRUMjO5H8=hp+zeA6>)a^{8*xu)wB*W_`~5k!LpK%r`u7(J2r@sxCJnf8>JiR(n^7O$-$b! zuSKD~2Da9~l{L~x56Y`f=*=4VZw>U+AgL`cR-A zYU*KKJ?yK8M7>`<9||`>eFJQ0fCCMXYN%YtN0m@(BXl>yjz+ky5u8Q|Qd0)$ZGxdD z*xLkp6Wrb;L2An&>ziS7GhEdSRx{k+EJ5nZAX{4Cq87Nm1&+1A!z~h|z6`Q+73^6B z@m27tRq)kS5~QIFGT90TTH$Cbe6|%HYn334WsrkyaCIBlZSeUv_*R<)X)1#pXoth? zkZFgL?QptXf;5*wc6Gqs4oGysT^;bX4hhmy2DzjYc6Wl_33qnFsZI&9sw{un)dhRI zK<|RvyWqtxIN1%~>z1HxWzb)D!|%G`t#0UC4L7ZZfgU)}BSG8CphtTk(*q}a;B*hX z-2=~E0Drkaf_9WaYkQ%&7h=6|pcfwQg(H1%N1p`kEQ5Z%4<74-=lkI0KG@L@|LKQe zO@elnK`+zbat#a(?$O{+8hmpAelZ|HyUU<|AAr{fpluK~4Z?kcaBv8+LlSg#8T3m- zaB2vCFa$3RLF_{K$Az$ZSc3MHK`$PL4-Ugk!*JU$JUzh z=_tH8Dna|p@(wv2k9z6Vlw}vQD5YYeDPNtNXpU7*G}Ze!V(Rg<@Dgs_)YG%K3C*20 z9BoFp(^gVT=;?H+(DsUHcQzxuwA4rn)Ae$GTN|{+ty#ks*UXxULCr9=LGKA(j(%w@ zYg`(eb9rRl;GmYUvgu@Q_aH8`q;Q2jW0)ej#7u1RNxAQ=0uf1(GEA`$2l*>Y+JSqlnTs~wppO+Y!CnL73hDD1H6Avy46ZzfNYYXvm`LMCd zhmCueX6>{x%ZrBA^D;d$x-Cq1c`?!E!^CHnX5kR&)biq?doSSXAD3wT#kH=1?F*xeZrS(j@Ub(^Dwm(+D($?# zgxD#kS09TA00000000B+n|p8_RUOAaXYVubq)ApvXv=oZi2Vx4P;D_WxFzcjh_67X5^%kIO6Dzsb!rh%XRKOola}6c1yf1L=5jw#D%f}*aEbR zXq$-awry=jh?3RP(t@Z*2ts-_xx($?%5UtP_`y7oy|(+#Ke_~0Q! zYK~O(X|D>^osy-Bb=Q$bMor3;mh)b4RozidOEoNWQrdIA>7nNTYShjdaw1*&x81Zh z>eE?6PwDQ)NyAENhJOIZ9eGsRx;sb)72)44N>ni<;PQn=6}O*vRH4)+s#q03TfUW_SfubG z^tga01UwZKRusa9=gMKl+oBLw#6@ho0=pFWr~*e7cvXQ+2)+^=Kzug@Plw>wA$TJM z*M;HXFgzQs9zX<6XTLbJr?WpC^iSsx?~_?urZjIBY2}$M&D^w_b!0AWm8RlaN6U`o z^s$_&XLOk!+p8JUOl$T&ZRWZ!3!n|5s7k=~x#oV;ZFwsdN%mfW#LX2!Q~-@JL- z&dsT9>#9%wHq+Wz=-0+VziQ!5tMMPSL|ryfaC%loO`lW3$9c-K<(NC2HOBTGJh0n! zZ9SQD7fN~eEQMX^xN7mWV4}`7Xrq?Z7w98%vs~m=1@AhqKV09tDE_eZ-4tSUq5kl| zdHci0+W5o9*&OAYbmsh>pJ>hdDFqr7=u%*{0vi6wL;Z==`aNZ!2NGoyL)i=G+Fn?EY72cG$sXV&G-4H5F6 zZV=)&&uqw>k9cNd-u$6wHs#GXJ+nFgdZBE6wA9i}wA|9u(Q-?F6D_y2J63M#^|5kG zPsGYC{c)_^(onqI(htPTEuD#%Tl!?Y(9*bw{51||@@74}Qx5|Tu&V)XZV1Y7BcVp9YlL-;a8)Cu8iO+1NVEwWn_xo| z>~DfhQ}v8CE+XyC(Ax|V@C-!rQ&jy%KI+39I{Hf1eN9SphxL2iZP2*#~F(;GI5r{v!DEMLuX(1+=~&TKgf< z5BvM!k$yNl0QU^|pxqVFuMfau1MtECygC3oSHZtl!LaIs_EbQxRN-nBbQSJb;g2eO zb2a>YwGY}`0sY%*cw;qm48o>CcyJJ|8G_u954y4f`sE=wH3UBxf>(whaWTApF{~W+ zLHjD8mkz@RhvC*?xN8_*7>4`Tz<1X8pchp@f3^mGu?GIW2AbExt!rWR2<#v6LHjFp z9f9l!oE(8OBXD*EzP}D$TjzrgR6xZj#71Fw6n2loL!*3Df9dQ%bF6xxsXWMGQ%f4s3%E5?GiL6Rsyn4S>a=vHthAca45OTAd&#sr zla*drs;8ytdNIGP4%+h0oNmh-X3W%}s+;PdSA!R$Uy;b^S0rW?kE|OUR8v;YNauG4 zl2T1eSK8CMDbtJ0#HN6d`;#>wA}uqzDd*#$P_oF~_oHWbzb;@Pe6AJ)VM-cVX@4kZ zrd-`J3p}K9j+-#_WMXdN1*D=mfQnBq%AD|0)|~!-oD9_{XbGU;^NT{kG2KjC$3Es! zG5GPNLq_Wb@sR~G5=&}Wv;{D6Vo{hV?6%%m^p{JAjTHfGJg_)xr54M~ko8 z{6Sdp0PgU_c<}_tQ7v2DeQ3f-s5eNd?(vRq4%u4D)llm3Xv|ioAwZe63sYuU zlJ_Uc|ByzDZ3~iQ?qa^IPwn&x$nnKUpgx5Zby<_zX%ev2ATC>=CiBF>%QDqYrht7A zaYdj^RrfTOrK+7&0XezY8N3S3pI-aTm3f%;zUjF)IJUT9_SIUWubR!51;RyTK{F)^Sn~qIWJfFrro(XKP-69 P-xB;62``7Qj5+`S^(`Hz diff --git a/test/lib/linter/snapshots/linter.ts.md b/test/lib/linter/snapshots/linter.ts.md index 3048533e3..992cdfa44 100644 --- a/test/lib/linter/snapshots/linter.ts.md +++ b/test/lib/linter/snapshots/linter.ts.md @@ -2377,16 +2377,16 @@ Generated by [AVA](https://avajs.dev). { column: 34, line: 3, - message: 'Access of a module not exported by a library', - messageDetails: 'Please import the module itself because it is no longer exported by the library', + message: 'Access of a module (library/DateTimeInputType) not exported by a library', + messageDetails: 'Please import the module itself (sap/m/DateTimeInputType) because it is no longer exported by the library', ruleId: 'no-implicit-globals', severity: 2, }, { column: 26, line: 4, - message: 'Access of a module not exported by a library', - messageDetails: 'Please import the module itself because it is no longer exported by the library', + message: 'Access of a module (library/FrameType) not exported by a library', + messageDetails: 'Please import the module itself (sap/m/FrameType) because it is no longer exported by the library', ruleId: 'no-implicit-globals', severity: 2, }, From 5207d2618d0907666a16ff6892961dc67aeb2f49 Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Fri, 10 Jan 2025 09:27:31 +0200 Subject: [PATCH 11/25] fix: Allow ElementAccessExpressions --- src/linter/ui5Types/SourceFileLinter.ts | 29 +++++++++++++------ .../rules/NoGlobals/NoExportedLibValues.js | 2 +- .../NoGlobals/NoExportedLibValues_Negative.js | 2 +- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/linter/ui5Types/SourceFileLinter.ts b/src/linter/ui5Types/SourceFileLinter.ts index 678e7b001..ef9b39e89 100644 --- a/src/linter/ui5Types/SourceFileLinter.ts +++ b/src/linter/ui5Types/SourceFileLinter.ts @@ -124,7 +124,7 @@ export default class SourceFileLinter { node as (ts.PropertyAccessExpression | ts.ElementAccessExpression)); // Check for global this.analyzePropertyAccessExpressionForDeprecation( node as (ts.PropertyAccessExpression | ts.ElementAccessExpression)); // Check for deprecation - this.analyzeExportedValuesByLib(node as ts.PropertyAccessExpression); + this.analyzeExportedValuesByLib(node as (ts.PropertyAccessExpression | ts.ElementAccessExpression)); } else if (node.kind === ts.SyntaxKind.ObjectBindingPattern && node.parent?.kind === ts.SyntaxKind.VariableDeclaration) { // e.g. `const { Button } = sap.m;` @@ -1186,22 +1186,32 @@ export default class SourceFileLinter { ].includes(nodeType); } - analyzeExportedValuesByLib(node: ts.PropertyAccessExpression) { - if (node.name?.kind !== ts.SyntaxKind.Identifier) { + analyzeExportedValuesByLib(node: ts.PropertyAccessExpression | ts.ElementAccessExpression) { + if (!ts.isElementAccessExpression(node) && + node.name?.kind !== ts.SyntaxKind.Identifier) { return; } + const extractVarName = (node: ts.PropertyAccessExpression | ts.ElementAccessExpression) => { + const nodeName = ts.isPropertyAccessExpression(node) ? + node.name.getText() : + node.argumentExpression.getText(); + + return nodeName.replaceAll("\"", ""); + }; + let exprNode = node.expression; const namespace: string[] = []; - while (ts.isPropertyAccessExpression(exprNode)) { - namespace.unshift(exprNode.name.text); + while (ts.isPropertyAccessExpression(exprNode) || + ts.isElementAccessExpression(exprNode)) { + namespace.unshift(extractVarName(exprNode)); exprNode = exprNode.expression; } const exprType = this.checker.getTypeAtLocation(exprNode); const potentialLibImport = exprType.symbol?.getName().replaceAll("\"", "") ?? ""; // Checks if the left hand side is a library import. - // It's sufficient just to check for "/library" as the end of the string by convention + // It's sufficient just to check for "/library" at the end of the string by convention if (!potentialLibImport.endsWith("/library")) { return; } @@ -1209,7 +1219,7 @@ export default class SourceFileLinter { const moduleName = [ potentialLibImport.replace("/library", ""), ...namespace, - node.name.text, + extractVarName(node), ].join("/"); // Check if the module is registered within ambient modules @@ -1228,10 +1238,11 @@ export default class SourceFileLinter { module: [ exprNode?.getText(), ...namespace, - node.name.text, + extractVarName(node), ].join("/"), namespace: moduleName, - }, node.name); + }, + (ts.isPropertyAccessExpression(node) ? node.name : node.argumentExpression)); } } diff --git a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js index baa800da1..614412896 100644 --- a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js +++ b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js @@ -3,7 +3,7 @@ sap.ui.define(["sap/ui/unified/library", "sap/ui/core/library"], "use strict"; var CalendarDayType = unifiedLibrary.CalendarDayType, - DateRange = unifiedLibrary.DateRange, + DateRange = unifiedLibrary["DateRange"], DateTypeRange = unifiedLibrary.DateTypeRange, FilterItemLayout = coreLibrary.tmpl.DOMAttribute; }); diff --git a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js index eb59c5eee..8551fbf1d 100644 --- a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js +++ b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js @@ -10,7 +10,7 @@ sap.ui.define([ "use strict"; var CalendarDayTypeLib = unifiedLibrary.CalendarDayType, - DateRangeLib = unifiedLibrary.DateRange, + DateRange = unifiedLibrary["DateRange"], DateTypeRangeLib = unifiedLibrary.DateTypeRange, DOMAttribute = coreLibrary.tmpl.DOMAttribute; }); From ff8910e463111227a2e7f0d62e4cdd0a5b752dee Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Fri, 10 Jan 2025 09:27:39 +0200 Subject: [PATCH 12/25] test: Add more test cases --- test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js | 5 ++++- .../linter/rules/NoGlobals/NoExportedLibValues_Negative.js | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js index 614412896..09c6bcb98 100644 --- a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js +++ b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js @@ -5,5 +5,8 @@ sap.ui.define(["sap/ui/unified/library", "sap/ui/core/library"], var CalendarDayType = unifiedLibrary.CalendarDayType, DateRange = unifiedLibrary["DateRange"], DateTypeRange = unifiedLibrary.DateTypeRange, - FilterItemLayout = coreLibrary.tmpl.DOMAttribute; + DOMAttribute = coreLibrary.tmpl.DOMAttribute, + DOMAttribute2 = coreLibrary["tmpl"].DOMAttribute, + DOMAttribute3 = coreLibrary["tmpl"]["DOMAttribute"], + DOMAttribute4 = coreLibrary.tmpl["DOMAttribute"]; }); diff --git a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js index 8551fbf1d..beddd1901 100644 --- a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js +++ b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js @@ -12,5 +12,8 @@ sap.ui.define([ var CalendarDayTypeLib = unifiedLibrary.CalendarDayType, DateRange = unifiedLibrary["DateRange"], DateTypeRangeLib = unifiedLibrary.DateTypeRange, - DOMAttribute = coreLibrary.tmpl.DOMAttribute; + DOMAttribute = coreLibrary.tmpl.DOMAttribute, + DOMAttribute2 = coreLibrary["tmpl"].DOMAttribute, + DOMAttribute3 = coreLibrary["tmpl"]["DOMAttribute"], + DOMAttribute4 = coreLibrary.tmpl["DOMAttribute"] }); From 3a5a6683a35e24ef0ec5e54d46dbc1482e64b6fd Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Fri, 10 Jan 2025 10:03:57 +0200 Subject: [PATCH 13/25] docs: Update comments --- src/linter/ui5Types/SourceFileLinter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/linter/ui5Types/SourceFileLinter.ts b/src/linter/ui5Types/SourceFileLinter.ts index ef9b39e89..4fbcb6cf8 100644 --- a/src/linter/ui5Types/SourceFileLinter.ts +++ b/src/linter/ui5Types/SourceFileLinter.ts @@ -1227,7 +1227,7 @@ export default class SourceFileLinter { const isRegisteredAsUi5Module = ambientModules.some((module) => module.name === `"${moduleName}"`); - // Check if it has been imported as UI5 module + // Check if it has been imported as a module explicitly const hasAmbientModuleExplicitImport = this.sourceFile.statements.filter(ts.isImportDeclaration) .some((importNode) => From 8bb9d55913af706503f8ffa367f3271494472d70 Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Fri, 10 Jan 2025 10:31:25 +0200 Subject: [PATCH 14/25] fix: Merge conflicts --- .../linter/rules/snapshots/NoGlobals.ts.md | 28 ++++++++++++++++-- .../linter/rules/snapshots/NoGlobals.ts.snap | Bin 2675 -> 2798 bytes test/lib/linter/snapshots/linter.ts.snap | Bin 22921 -> 23115 bytes 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.md b/test/lib/linter/rules/snapshots/NoGlobals.ts.md index 5aa5c71cd..060228b32 100644 --- a/test/lib/linter/rules/snapshots/NoGlobals.ts.md +++ b/test/lib/linter/rules/snapshots/NoGlobals.ts.md @@ -11,7 +11,7 @@ Generated by [AVA](https://avajs.dev). [ { coverageInfo: [], - errorCount: 4, + errorCount: 7, fatalErrorCount: 0, filePath: 'NoExportedLibValues.js', messages: [ @@ -40,13 +40,37 @@ Generated by [AVA](https://avajs.dev). severity: 2, }, { - column: 39, + column: 35, line: 8, message: 'Access of a module (coreLibrary/tmpl/DOMAttribute) not exported by a library', messageDetails: 'Please import the module itself (sap/ui/core/tmpl/DOMAttribute) because it is no longer exported by the library', ruleId: 'no-implicit-globals', severity: 2, }, + { + column: 39, + line: 9, + message: 'Access of a module (coreLibrary/tmpl/DOMAttribute) not exported by a library', + messageDetails: 'Please import the module itself (sap/ui/core/tmpl/DOMAttribute) because it is no longer exported by the library', + ruleId: 'no-implicit-globals', + severity: 2, + }, + { + column: 39, + line: 10, + message: 'Access of a module (coreLibrary/tmpl/DOMAttribute) not exported by a library', + messageDetails: 'Please import the module itself (sap/ui/core/tmpl/DOMAttribute) because it is no longer exported by the library', + ruleId: 'no-implicit-globals', + severity: 2, + }, + { + column: 36, + line: 11, + message: 'Access of a module (coreLibrary/tmpl/DOMAttribute) not exported by a library', + messageDetails: 'Please import the module itself (sap/ui/core/tmpl/DOMAttribute) because it is no longer exported by the library', + ruleId: 'no-implicit-globals', + severity: 2, + }, ], warningCount: 0, }, diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.snap b/test/lib/linter/rules/snapshots/NoGlobals.ts.snap index 526211f18bfff050b0aac42f778365a0646bd090..da3da339f503901538135ba90da490412f71c236 100644 GIT binary patch literal 2798 zcmV}rY zZGj5a5xBd1Ho0+g?{e?mwqZo911cg#K>c7vrVflV#c`ZbP(~aO2VaI6#}A4#4#FV% zMe%ipH&M{LZ%xjI-L!0Mn8|*6cJKY)^PKM3X3a-9>W<8j^9kJO*`QH}Ref{MBZ zSPwKSfhNVj!?yJ)Maf$Y4Gk!@C<;nQQMTnl)yIHafK$K^ftP@#3T#wz4+^9*qrkHYyr{s-3cRMw)Syb%pgN<0s%A6@Dav-0yfDW-Q_Yy) z@l0RF{HteHWz1DRQ2ZG)?wNs%iVyhUAs_tM2QTI4D7@i=c;saBUFMLAWOf|M?%} zz8ZMCMuG;5pnt4^Ki5D_E%epGJ+;suf+HabT2lm_3c;-*xIYAsg`lqveozO0sgt0! zMbK~QXFI}xl8m7oy^GnyNbFXmz z`~DrVm~b4;N@%(^X~ok?p$()>BVlC5g00(AL%Z~(Fyp#Cs!v@rl@hBo({eSD8!%dQ zO4GGu_ExE}`dnk9!qttWlm9t&Fe!9LXvU=X2+bWA`IZgW5y^x$;OMELv@w+Pqu7C{ zi0NtX39e>1nrUfC%N!H-45z%u&hA#gPAA2lc>Zg%X{|LTQ%NIcxNFCfR#Z>Q13c)6 zqrx`asT`~798~Epp^A)@RoOiURYrAJT&0_1?_Q6IbJb&7)9(c(dP*oE&mgiASIkif z@4c*y8s_<^F|GOcf+D>o6bY75WZ!Ix#4KCnxgA&UuN4jS39TH6HFi?|4{OnRr+?ouiCP zXU;$PDUF#pr9w!BHWgN=uttT=D(qBYzY5o>5L3ZaVM>MDRJdD(uc(xap5cd7cvyu; zRCrQ_XHxV=Ag-+{6cBH$$`%kqigKT4X6uqa$<7C!`G#lKWXv^wGEIjR`MPJ;XKv44TOG)Ing|p;Jsl```dpykX?u0S)2pfrp59em@bqWZ1y6m!f~W5b z7CfB_7CilKFzabh@&7FduLPmB1~$~d0lCmvCC@tkH)`PR8dzQn+iT%SZMlic|9UOF zRSVrA*cO88!GtA zw$#J5_29^5%c5ebe^~?cHo&e1&>P^EhH^zx|LR5jirmDLB+qm2`*`Z z>zd$b6WrS*LF$Si+m^u2B@kT#pIic8T_QokMUc^E*xL*f&G6Y~c(7T5)E7bawZK&^ zV7I^*THu>45~QIBvbPluwnC~EPPW3CRteHr1lisOyV@Yu1}EC!{x%8HR0P@D4m;XG zZ--mk;Z(Z>SyHrq+TH=XIzaD$TRPyG4mjBf-|Lj1Ek)4Zbi(gC;muBHUkcYRg%w?} zw@ZSy7C|SvAk_sYyWmV0ywwFix(NPskpyikg4QmB#$^y$278ymz02TmH+-U7g0>ey zzt#;8cEeNM@O(FHSq}eR4t<&g?I?m?uE7-=7#iHJ!5=jE#tQi53JKa-1pWI8cy$G| z^uW3vxT6R5^+LK=f-WtBeyJBu^}=Jl@atZPTnzuX7?$=)(5@orrG4=JKDfRQZtjDp z`r!7J@U4{+^r9l@FIK{@R>D75LVZ76-w!JWVDEqgT~@5?0Hg-sWu^ zRT8wj2&xQ1^&s>O!j3_>a}a($2yYBZ(B(zz4tY5q^p;m+mYrWkDJ2)0^3~}J&7sl@ zP4x~An|d@Uyal&z>dC2_h31YMjy5UWaVxIH^klM-XnV=DJCzdNvebwR)AiQ;w$@{d zo6?3YuAVYuJ(^)^J>C<%HTq?dv~gKv+U0>&Jv~~?N+;u)>OoX!ap4Mk(lAAQo|#xz zX32eP1&D}?gkg%=ILKa^=kCksb10OmpR2@+FfNiQVSgZP#$3ZPvpmGojvGlD(a6k; z7m$kjGE{tOUdDu%vZjsy<6tO7K|>h|K0hxM95c+gb?hS^6+ItaIAk5M6+%+#uWUH;$^4Ot2%4yA=Xl_4Sb`vvU1d{jd2y;FhSJ8n9f8wG}G znGx^%1?;lCjW8dA&&VONbHM^hAqL9~`xBKI_S3t6b`Cfv21;+s$ftPD<%Cb<>@InB z(V`vIZ6niXZ&Ri}vt=EbjOM2I8Oiw&oq{n79!g3pMhxd%+c7Pns zvb7xt_c#&lY9X|p-uBHwTaUR$OgLJ?vb9lhR3xpGu*>Y5t-mA@i;s*%*KOQ1vT@7i z&CyL8;(9D9#JZ7@^_z#+m)SR~HLVJsUyv6X=W>3be{RYwN^)+Jyo)qi**GUjW=`gd z`czJzGC967P*$I8in^#tWL*hOvc;l)Z6H@Q(kJxe zi`rC98~JZ^vNo&duFaw>m6N4hQFidKBcyY+I}Yy2OESH-x-d`D9`7zbN?ZCr2FhI( zJyZKQ@Oz*`f%S7eQ+xP)&(z9?WzX|SZR@ODWn8;ye*ReSj{hb2FBstH4;(=N07$xO A761SM literal 2675 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⪙h+N_bq zpkp(c5Mq^!u`7B`K5X0JCzUZMe_F)eJlMWT=w@P@^M)04+-Q==8&s7g*$+bjLGy^6 zjY3x3iwXDe0LVT^(YFnidQ-sjnRzTkc^|moZ9E;} zGRM)k24#@=+4dTk`Wg3Vu>2al@&rlyWMBiBW&)hTXsba9!8^G_`}IHt{P-rSMNohx zCPg;M63P|UQ2#|(>yt7r^6V1AaXt$8PAo$hO}89axd6(uhOBZzcP>D^O>sWHagJu8 zyDylGxINCgJ?^?e`$R!MFPuOI+`Mf0C+UK@B%L(AZW>UEcA?EWVgorOAur?&xPwKe zpKu4chG7smso->pb28}at8ezrYC^kFF9qsb znu`~}g3YU?PL4p2s;&_-=^S-Bf^wn1EwFNJM4x!IUS41W@(DaJT*vSQ>~Tv3b@xgV zGH|J;4<5oo0_wGp_yu60M`rWcOhtq}O#581FuLT>>8jC&-d)d!rgM|&8;cZ0Bu$S9 zBe%$X{U}f`n)rT}-PfpB5+89@-69TzR8d&Rv}XTN+JH?~*x01C_mAQ!fD@nQ640Xn zE+&$irU-L*$Qk9D$we2X`1m;-823zExZZ{p?WGfkFb9U@w4<++RtWP_C zyVzBi5Y-AC<3YQHA>b)p_Z6xX)dU) zS|-*)jcBU8RPKg%>U?}Kkw_&n^8B%A-!Pe={q9ByB9Z)k$~b%#QgDb^3Ic7r(~tQ1UTrl(Jmx?jxO`6DMZ(@)fBP#Qi7D z+4MzCWtq;#O``cj?Ym#a;&90rxt@QYXYe%Wt#k)cBQ78=Ji3 zVkzJ0%`q?q=rb=;S!>x7ljk7_HAt6hLw_ta1_TTLGR|pK^$W5vdR{s@FOULtK8N4F_%MqIFe)Z*3sz;@Vc{oL?cmHti(@=o*8yOHOT2PE=mLM!~+m!%KdF zTz-uNBwr01l>H!;HjfTmuL@qXEJ}qt>VsEd5y42EoC%=qcen?1>UN$C(DoX6y-|HQ zPc>OF0c6LzJ(2)pbG71Xk5S8e9$LUbctPGP9f5kq(BL$A?R%(vvjH z{U-wxJNXrnw!_qn{#>Bypb#;R6|_KAPm8V!DOb_?j{ubqfnC6DL{>(Ks-peSciFy! zs@Sbg+3vg000#S@0EXSH7Sr$N%Q`4-@#QRxvqE|A-J%a(y6q|tUZ*-0zJgmFth;|x zu)7{^!WwbPmrj@*Y8Ldm3z+AN&>wd?@j%MrfGQtiC*2iJFWr(90$?LANJ4fYo|o{QAVKd{S{0=+{n|NgH1{_xn@ z@XtMq{R{70{yDDZ9}kb~>v(@3=TEu{*p|yb>=$2dSEPEBQL=7@#}xVf6Z8Bl=)&KA zB*!u7m;7vF#ApwED#8OXM7#BqMnJh{yNm8e7)-JC7h0I)303Yq&&<|ZWw^`7TqUkt z+C~aJ&*8lN7O|c)66n!5KDuAV1D$FTLuxgN6PC+h$saUZ(TwW=wesM&Qpl*P*QNbvpQKC>^mV2=B+MKV zVh&j`PiWHzU=i>?LR`H3_`2JPwsq0FH2d!uK#kZiZk^E2yU1SN@MblkQK?S%a*x+? zUgo7xOzff@0%Y}=rvfJ8G=43ZhR30=8Za%BQ1;sJwbjNe^q*>iX*7e}xms#*3OG<_ zF*OIRtHI|>5a1Fdera|dUM?Lf*BW3r53l78r0D_?8nF7J<#Zy{8B&N&pv`{hz<#a? zvRvuES`l5*ZFgc4Y|sQuvy1k%;RJN!7#g93of%*8w_6gwdgVgp+5_HQiMxNJkFSWo z__R9+`B@6RdiFr&QiyRJ+5yJV8hl{S*PuRDp_T~YwQHeU9VqP9KD}@cm=hKnW4bwD z7^9%FdSl)?1j};+bF&M6a(Hp0G=w3nVrPSAE!sUf1RL@1?SjPh;Iwn0?=zVoVN8%W zCP+Dx)0*bvye9OrG2qRL;nkF(yAfNi6_~pL>e_(QE{48e=YAaFrd>ym-2g{kK+7)PTvU<(*ep*vjw9xebh9{qt5+Sw*$lj}$~9%4sI zy!JGkZJ0P$!987YR$b6O2h8mrxSMS#d7JQcTMZ{(yf0qR>n4D055Y}uLB9*H$F;vs ze~~~!UxnR@pbYE)0e2E!=Mr9E39lQ8Rd0;fW6Fj+M$vRUIJ3Jkl|XhoKK%P!)bz-N z0|c21I*=fIYc9-Nc|Ugfrvxs9(enk9_mf$7ez$z|qg-auWrA<%S3$P-{r}G!H<`7f{xcrOJSuEfXGt&T;wF;=mjkDrg9iE^9)KChW6+-xyX1mz7sDc<==V# z_#twR(r*t9?Gp@+HA3nyhV~MMa_oM4M6(=NnZYuqAu#Ua$28=_tofdS8|oVZi7tQ= z7@M8@fCFN{(80-zLAJispbv^_1M=(u+j!v{1CRsO*KeqIunmq-4uoF{$_WdM@Bz|@ zpeJarpHOuhpVMGxT|@zwY@(i|05$Y}5On)rsMkxVMUv2DbmZB83kMhi=?#H^Lm&qs z34EV+NJ9HQBde^jx<*Y0XIcW2nn5Ma#vn%MU2f6w=^(zN{wP;ai>on&2)YO_{m8rF zP*7z$BzihzV+Qk^5W;Bg(ICxq#D}MFx7+(h_B{%mOno96F7Smp__G0=QRk;teN>|^ zJi{(+fDhViuzbNjhE)e#To+tjFC05dSZX@*Y=F4*OgokjbC^6!Sl4#AAh{R}!st>u z@Gcz)n+|MF2VSvYezPQKTT36@OCO9*AJj`9M63hEFciMYK@+eu7GTzgF4Tv*)`e!* zhlW>!VyfX*I}lc%w1A~rKm#oxg%z*;@8%8i z`~rXcf;zivTkuM7+>YR309$VeTTT*ei;kppc|=IOe<+0sD|q!;_2~ih4E?$@_zXS+Kc9hn&&VziwB2Fh9KSTA z6Ev>uK=JHA8FfSVdcvyvK^Zvv8Oa^N8KVHtb13wm!vgfBNY8n!|&%Y8$g^ z&jY;7{^o{B)QObWg)}bmDO-frxSq$fhcpy~2wwj@@ZtAml4o!{o6M;h&;!K#^{o>t zPS{+h=@o7$jQq*-?xv(Ee$V{aR>t!EuJclo2{zhEOKItG2AX1 zSdvdruHRkN*0qb`N!Ob|BUs^$Ax$p7^k-49djtJ3rGVsIMePg^KZVoYdH2)Z6OuL= z`;Qz1hCT98^K^M6>%z(?#{whd&=lx4qtk~j#O^3=x}3LZjV4^3s-<|NJ?OlhSgvzfO4gBy{)HN5a;YJ`;K)+KvnrdKcy9W&gyDH}&ej^-`IWXjEb@()8 z=PKkH3Yut-o7>t0&av?5gIjD-4V739YIK`_A{Cp4MR;o!% z--J}#c1Y2~LR>_VN56L%ZCx;@RV{@o-jVUCh=3|TOL>ldzZ*NHYV?WOigNpQj1+;L zPZ=R4wJ7~-NizhkJ)1Ee($9%#z#Q2&$+Wt*`jdI`GAC#kGt$n@Zm z)eqxirjQ*O!X`$n5i#UuRZ?}bmq8T)2014agiCCHrSA8Fr0r3bNKpWSbV;W`${@w16A1Ud0ubCop$ciKCsG^Ge`DCub!%AIXSIW;#?71a0HYVyOB0?Fpnx+oUEs5Ui z5arL{CEooNI$R3Kh7apE?`3)qY!t=i5fbw?qZEJ?331@C(N(m$Nh;}lQT;sToahaD zxLl~7N+)TPWbN##wt`S~d8y{+T+7dW9?Ac-?;k5*#2DGJKvx;$+H0uThd&>%K;q%$ z5q@CoH37Or6W6>f96G97b*z5tB~iXIC8Oz7zSP2z$Bq~?F=R_25@JXq_mAAhuN_Pb zsOWKj^#3;@mqb9ZTVkLc`e{l0a_k(4krMbP0x&@B`*qdw{?q~Fo}VZ7VFFkK3VjLki5&F26Fd5 zmlgB}`^YCUw+p)!lKlst>8DMY6k?QocKrm)1o0J$uOE4r{Y@}x{m;NtFX4I!pW_Vz z=qRtW{yoM>H5{y=`(4LkX$b)c%gE|mg;lm%y|kvi{kq&vPoboZ3sFj^M*gy>ibt3b zGnG0GJh{}gZ~ofIm^qPow(n6w_mbi%&R5 zx!voeM5Q%CS^DiG1ErNu0*N;~KSm9j60H?+-ij49E2(YBg?Qo^w zsg$3BVrwr~;W%wlyn)a#Nf{DfQG!0>QwnTS8D>Q#@sli5#B16o*MAGiAa9hfeq_&8 zx;wyQJmd%31ya>*EKyu_sY5Kx7-{3VCjyLa8w2W9hOxb75nsaordh8q`=Myd=tvz9 zFz(>~b|-)_9iBjrXyCsA6U8#{JZnlvM5GcIR@rQyEUYY;=#8N?WnwV~xc{L|WGPgcD&?RTb^Q97R#gVcR!FlvbW!LFK~1t)z+JfVkG{!(lSybQ z-U=a%gpeqfnxxWqDnytFdmlYf2j|f&lL7FKR`HaEVl&onh*dx^^sv@fE)l#kF`Hzj zb*~g>=_OS8GG<{DB1XGC_Ca+a<6M58P1v`$5chcm>-y6{Z_)cODjko*Q#Xn zTe|O(>)$%ejMQZ$(;i!y(5-!EcbGhVe|KQ2FOsE~I!M;0(h?^i{$`3~v^Qw3b6pAF zTama2aOt&4A~r6wxx_C$#CrrIrb0w#X*%BOpqC_$XDzOkhN~+Ki*gMe6~j6o)-Vjz zexuj#o}oR+PNXp<6U12=l7I&Yz1{8Z;ys*+p1Skqg@~dp+awNyawsV{I8N0CK`3KF zQTu-@wdwYeeWWIO_lm81OLC)ZMK3y9wyy5l5inhwq^(o*wzgcPT|?$Km**C?4s{nV zY;1KF7v>hX7BA%n##FUvRY*@<{Yz%Z0^ET93s8hu^f>iLt`#oza9UEiqVTm8UIPlI6`mcf6=m~Rc;%p z4k#)<6qT*T!i!mzD9s`ZSfn=WBNmeLl&;ouuyWzz;&FHLC^_Aa}D&m2OmH1@VruBA9*EJgLvX33Psjb3Beua8R@6$Ea=}0NorB4hjn+MelFh@ zk3L5*w=dK>oGCX6|7-Nn44JiP;)Jr1985)JNwvW^3zmw)bs*R5hNzkjqtwR3e0=so zYRD?shO^89(I=}|4B9cKngq{egM6tUvym(^z-}BwoG2>Qg~8$_-=6FbWtnA!S#%Qw zZCW7o-)o0nXY=EF$ZE@t*yB5%pHZaA8mspcn$|_nv*|Fi+tIs9=V4HoW=-+^nLHY| zJIzbsmvxQ1W@QdXli#uA?dFXfzcQ?!w#h6+d$*PXn>cx?(9lbO@$>yzc{Lf9QtteV z<%4Bz$BGfs^WYhB#zClw8Ne>8)imG&AMzLV(Igydg1z5x2EfB%9FDD9>okgN)J)Ax znx(Gg%85ORmoJ7Lc_KuQtkI2`x1Vez1kK z$#6QNg3sTB7eyb*)1Ay)`ZW!U9=TS#_e7ogBm=9tYBR^iV~r-3wtueA zAyR#8nmcp5NkVvm+8WZ!*)D))C<_}++ZU@>P~}!39}#;3Qj9oT07p>YHmk=DzE|*~#mt)ty=CNO zM!7eqs!p~QN`dFG03J1g5Op9@I5lJ8LTfNBYfwG3gmt6g%4UOYP2l)7&}0xA-`IGw z?u+ZU6xfx6epo)p9uaM$c(DPXjx)`uWsuGTuVv8Q!)pCv00y)^6=TKM+3 zTKT3?wHReqB4hU>MLT|`mZ-+F!$0eD(DLt(GO65Ww52gy+8q6Bb++Xv@zl4R*DW20)EdTP>ZjF11eLh<+zvJ@svANaVJvLzTPtv;RF1eMGen`Qp zj3wQwRx9(!k>Y7JUXnqvOvhNqy+>?8OTvkDW#w;pD3P*xq~~1zH*e`KXGa&FumP&k7XqEMf<&dluQwFK5XHhE4I~0>ilkdRw$}zcL)!2i z?7=g!pSGBstvYs->M+X~w6sCj7!}O;+pB4Cu@_jfw)8n(mXV?EaE2p31GD6O0JPd zilkvGmaDu=0vbJ90V!^5!^fq#P6O6DS^hYh!QFjT#u>Fnk zgW#vB5b+yOskaKJNagoNb798J&oomJK~IoLKQH-Eb3)^029p4)nySzR2C#f8WJ3-* z%@Uwf-ERnwQf+L2z4-%vMiZ&Q5B7XU1LA|NP#+#{)80xzQi)>>kFbie1j)9MsfMmZ zK(GZRbHUWiLirXU^s2!IRs>DzCfI^Ib)mVZpkC~l{3>w*R8Z=d2EyT4+eHD2JpB$j zP;D%L2%LUp9MJ`_V?)~hDAWcN+<^lW@E!`dG0e$@SYL;xe;lLX~*zz04uuKf{25c>$IY-_;VHguq~XfNhz4kQEfeHY94072UXHicW% z7WUi2|rYyV~@lSO@F*wkg_JG_SnDo|u115+J z3Ra7lWi?baTmQc1v3;1lE_hl~dlSL;ABtTI?O{%+zk%@Z8<=eW#U>*DH%i05H@NZ- z(e`+>7trPh?W4Chi36B8r^nFS`(X1<09pc|fni9$DfA&{e{UOJKsTPD5o(w`=$Q(# zit!(?yr&(`&=3Y+zR;9TupP_LfWDsqt)a#|p%0a4!g!DUvCllARUg2GZ+w$J7<|y+ zz~{yi5m*&i|6iy)mcjT18Bz;i(CUw7C~zu;vgPQ{(iD4<;|-vK(+aM|#PLLK@PIwv zSK=+koIVTH69CWTeyhbWCPr8t*J$v-Zr1`nRfE7SD_g6&|EbK=a-xYY#u|N zJ=3A|900Y)!CVHQ)8GepV2A-E>yw@d0J|nAiEFkAAx;mr&j8lk7Jk(Rw&o{OjW$Yo zZ5Z&kN&`Co3Q~jnpSxCcpA{h08ED$Q!AU5m$q-P>(?4za8Mh{4V`WflafGM;6b;5M z1p06tDi6)+1fks(w#6Q9Mhd!h4ywzPf@uBIgF`3{_rRv2(k^cJD<;t@9FIfr zj6<+{wuw_S)P}`tuYLFi&!BiVm?j(80e^4z)p!G~;lVygzO{d(wST2mbX(JEhrU0K zqhDzgx!f_#wRK=h5A3ODa>xzcx&fuvgvQ?n%(Hj8=k{_TeANrhH3LkoqR)G1_Yx~@ zqdz!C;I^VPB$szLmi^b_m>g?_y<|Xr;5aWb;b_A@>GjHnZe# zm`&2s8-{;4%uPXgQ$hzTY4||VJp0#Xc3PkSGK*Sze4q|PiKgW zlS+Lm$&_wFXj2h5MUoIdV#}xqtKokDE)%T(1-Q1INqgtM&?@bF!K~1bIXSgGr_1cB zu-D8M%q-#Fz6e^L4EvG$`t-42p`%ym=-r)T=?eLjYsPPP^sVu!C-v%9&0R93RsHU| zd&#b**(=HW^+OMnW89A~d8qRFjike{XS-6dN!CQ49J-NW4Aqu{x$roMm7at%n3$j= zj#r7u{AlPw^G8eMgxsSNu4MMPH;0CeUDcvC`!vxDKK4##O{26pxZYDNkLabeYdiCa z^(m}nJ93RRv$Ww)2D78wajbt*pEx$+AFh)?)2O(&mUA`P`5mT_M9-Vn>tmTD;lKH# zl`LbcZ8KNuK9I3(VNyb*UYfv{*Xfdtyz`4237W~g{)?Lu%j^J}KMoi-lFF?NHv-9j zy*IC!>S7P{VoK~t`eLT6*PQ8arrbr`zL^FnF6H+2}4N2sX;AQmDB?SOjIs!`4?4jAZU=iupq)45^J2N%oO5_PM=e z1VJWxB?E4uJj3FOG5bhNu9J&?7h|CYOkSbP)krv??=54kXCWd`B%TCLgd(d{W6I4s zSWSV|DtKc%O*%dcq=8uy`Lq-3tyVpy;ux-IaUA&amvFLx+QnZnlz@D*c7cg?5at4h zcMax959Ev@NW)Ag-rlK!jkU~Kp%CJ3J)4j4xdhm@fH9JH7JRF0ot$$uQl^ytoiFQ_ zTEKtO+n-=QK2>?}un|+h2@6BO<#PJ$kJ5Qavf}x%tLHnbxeaFE-PDI-#BGd((JL5D zd)Qvw5CO})pQ!MwUa*wQkQ9!Ys5k;64nZT0Rf(vbnIeMSIABYRB8=jSWM&jEFKa&p zpRMs-Av|H6dW)dz_agl!@=2Sp`BK~WzLo*U+60G?4sOUQXwdZ8YLEMvjL>fjp|1rP zXy>F$-EE{m{Evj)%0|kc2)(ixAZ0hP$2rGckRrs)+Dw5b9S=rq21V$oq@$Hb(G|PK zo)9&G2khD@2z#^8B>5Vo6mabotcv#gdx_e~5ih5MKK4a>GU(Sc7|f!HJ=Vbr0^K|4 zENg`_3YbD~pFG1&54R}zT$d@G!*9oh9|Dw*YsOr{a@OxiqPw;$3yzODt}+XbD`h5r z($2Gc(AGv1$qDpq7gm}7n7dF>EZ`E*-q;3MTBPihDC((4Uj2e1>pc` z<-GJ9~IE+l-kov={oSmL5sM$`1iPs~q9X87R#z5j-ihH!psTG+Z5^F9a0|v!b!9$@lu&c_?SDCgrm#wU4a}u0SS1 z%90=+9lwq*(_uHEh=dq!)jEC)*d7127sg(yPc^G1hiRLu9Y<^WZ<{}-qH}!RB(JW! zGm3bwA2OeJ5*HRe_J?)7g_RvkS&c-5YR6WTl@V|578c6?<6NJfPbv#UMTFe3C6tt( zeLrIjZ4+9b2L-SCeyFgfGGLdEq+FJSD)sD{_U{tba1b;U|PYVfSDBh z;jMcsk@Z7}`1Bvpa55`EOp<}#mzk$-pZf!jPqLxl(=rawT@n&Y4s9_x_@?^xweAyp zbYT*C zZ&U~}b3_?@h-s5S$%p;@M9``>fD}1az2F0k9D3k)Ivt8(RwIpc)J?F3j-(~n^jK%-*L3r-azuld z8*tQ<(}SPaPhmIpVChL{$I&+Xo+1o%je(w2hy+!N25_eOn}Ncy!)S+nZB2OCQbQp@ zij7x0!FEkJKU<}5s)>$6T@W$Xmx`cj+k$qSao^ISrn(F>)9T34=W1vX2QI9# z|LABM_Y7dxC0u_B+A}2U9Ajkh2g|9b;a2kfSRxsD$H|>@Ew1&D+;sRUl0LNNzNA)< zi8`Tb`$Y2-lWkl+Btz9aq%++Reje4LK2ncsi`5%2PfVH?eTMM_aVN0ix&KYvP) zlZLIyQZIDu^&>KE0?$56t$v|e`})FlB8N}-_ve@RL-9Q}6wc%#Vc3>F8~SHN9^cM3 z#8i?QV8ygmPkGzS*~tZpmI8^$AvJiU^y-@kbp~2wXo!_1w}gLevYqyx>*r)tTfa*r zL)6F$oF4xn;K!;LYJfH$FD2TNh>c+Eg|6JC!6_+ruAcIGv+Y!57rjksnCh@;rI;@5 zFcRuT;drC_I%pchst$3WR&qotURNGTDm7`kd%%&P zU%M~-nVF~uscEi%FY^kbf zsp)$rO_p^&Y|su)?!AP--|4bw)KuRXgA?rvRj0m)*kH=H#gUYD6)!RIaCT&6W%GA- z5gw3eDcepIS$OJYSJ(bDo!5=A-^iBP$*@C@PmZEZYT#|U)42bq3={uwju~G}#{81b z7-v3arD`-pVO-k!Y|Pwn17xBuho}Byr7ERj@!Ci_Fcg$|HU^|W)&cU& z$QYI4I1Yh9-zLbH5fTGGzhE5q-=uab!r4Lr4H|R26#47-*hE~4FEJ)?DD&TAiFXKM zCEDqT^OPcXqGojv7959SSsC^!+-vK{@tTwOr`0QcNA%C$e$rf5r9?o8oof36&u`z1 zn@$L0ZQoGOGEVeOgrW@2lw~t}Dc^h2^}qxSn|5LGIuU_5f2R5#gc#~u$chns&5@V9@~iJTnqVd5nREB|C2k>e+*!L z<-$e2E)Zs^)H=cRhU5x9ij$Zf4(9niItdHr<}X&?etv>z-8I5kF#?$2Wqag|SO7dI z1>Ik8a0mW|{fj?zKYh@LHd)Vdqj@OFpK91-qGv7?dhpj|qchLFtQ>1(X}~>6&Z@xa zMH|;2KiS^Wm*TNU6;|POMuAc1&i)PH?}Nih>HmXq%n%eUS#MOVW$jM4m_CrEx~heo z9=Y8sRj;}<*j9$Roc>)IU!T_Jg`h`n!lFM1zrhY6hZDA!8}^+8_EZwruvqIPEwjOu zI)@K)TLd$J1M@I`fBfGK(b5NX4xC*1{CbI+EP&5CPAYCETt2DWf+)i5D82kB0fHzt z7K2w7gKl%mS`hl&YZ*a7Z#9z0|JNci75?Aw|6WJR=3mR?T+76~3mqi#{*OJ8M6#iD z-$0%|$nj5>nD1qTJB*Ov&C*R<`ji7Xrr#Y5kZRytVauU}`ZN3a#_S+pncmDh(cT-$ z2wwxk?I0K8+>f&=>wPap)*p7%XAIPj$w=oGP8lZY_=_chq{fv(JrhBG-o*1?5^(|C z?e?g`FPMYgrxc-sKTAyw$H*$GJPpOAck7MsLpW}@xqF;wm@pBJBjSHS1lnXpRfAwDc zN0f=Z?cI;*aW^dUdcP{`$7hc6ze3A;(A;IotYx*M&L2pHs@9RG|CW6H5d9Hp;U2$1S0 zRUV~Bo%4{)Irgyar_W}UUa3w`Mx{>3e&jQHeM9L@hYy?%CTb)KnnV6@SU^$=jhG=N9d^g6Tla9RVy2>5AFC8ndS91Ii}bphtuuF^Xo8~QRcAsyZYWnZ$h zKaWJV28Kj#`B(@OjYbgOfSaEnQo?Rn0O?z3){OO9Ev)`RnD#cPJX!#Ln3E})KJzmS zp2Fp_FEY4S?9qd)TmO^60x0|h;yTxFWV$+_kW<7f3l;Pf_jfkLTR*@^0&{m~?n>pO zs#0YTeX;uAPm1W%qfl={7I$}%(lwe_kNf;uQtOsc%^O{=0C%n|xrR!UN~yoppbhIY z-y%O4nZY4qvGlfrt1mSKx_;yU$rq8!Foy|Ia4zH5u61co)N{?Um;dt#3()f+49E{XeI>efwuo@m4lbaWV3($p34;E z-zF8QiB06&IkvL1ahi4=hmPm)DbRX3#Y4!&^|l?Y^e|=r1A;8&#Fp-rFAwe0rzMS5 zz{`f%`{d-l95fIK-lrr*K9WDj{_?XXl5}2Y=BqiszGWcv3xXEM+n<{u`Ed|PStu=E zT<%us^Bbpu-OZssZIQ)~(@iDLXp^~~Xc6W`syw@f+y1Va%F0);S4M5Av9*dzsQ3&b zbexVzRZrfvlq+pDdvuEO?EfB=uzxpkY1Lg$&x|@s{ER{ldy&9>DGpXO>^YqJJ zDemJHQ?VMgsY{f1MM0Gu3p80EWP$f5FQ{_A1-@v3|Fgi~Eif|;PECXTqW;vVdc7qL zZcl@U(%`u?NK1#6>2R{BKQ*de&rOGm(&5f@cq|=WPKSyNSSspIjjGo@8K7jqMHz5c z20WPoYDv90qW;uSZO*#N3hS-VV};ACaIY0qRh3z+iel8-Rz}_ZH`rjG4X(4nGd6fx zgc{Fi*_oia+dDI1dnWA9gwJNeQ({3CV?xtEX2Rbxp)d=Yv*6?`xGD?o77MC44x=mn z)+Co4kz#td0gtm=4k^wxYFzL3pnt!|J*0*E_1J5xkZQS#i6S(zJ9b9~B}QoZ*y~ob zPcor14TLITS(TqL8h4GI#=s=gSSHdqd=#%9JB9a5GKDkZDAbOhf|=v-v6J}1(MDpl zo?DE>H^)w5Y09NXrjHMe~#p?&Xi(?lEc;N0DGJDQdODQah}* z!*O;v)egOO2-@LXJ6vvu8|?5AJABd(pSQ!;?C_)=eqe_e?C?7~ylw|mF60OmONtY8 zrY^y~`ULl!0ui>7XbqX_TxiOLWpUM9PES~aB@0!cWt&VMy@bkLLnTz6&(%*lGxGG4 z&h9+@q;qYae$sg=Pe18oPz_%n^CsO^cVFqTf3}RtDod( zmwg41HLixj7HEvs>Z=rJt5LlyQ)`~&YnQv!%L484ka}6DT|TK^PSf5J=}Ed?`DEoZ zoxroF=>&dpnoi(r({uvsrt1W%l~7ayZ6@nSr^7wd;hWRp#p#ilM_&Klut?A$fk!MvGRJ6>li-j9_e$`@+t+z>;m}<8nplv;7{vMfTzF|NSSnyn z1t@R-|561Mi3LfFL7Xk~V97i6Su99mEK!e>3%_3gWI(WPeUZ?|SJ$$(yUa1$LH3n#=1M(bD?|=;sxW)nBcEForm62KlwA=|5PFU%L zQ{TS+s1sgrLcUlo#8806+Ry;44X~>L0uAtR16R`9k8 z&}O3>U@KhT3ir3dw_9Om8$8zr)^-8fVt`h+Lw!4JYKPu-_;Nd((*bvPBreEeGg-gU z0Z(V`9(_gvJ-TQ<7WL?kM5Wz_*%x*V2980$@QN|; zX8n-QvmDc!*F=vZP6KahHS@l5FlxK)9+YHhcGUS}VDsV5v#ygizW zwP^K;ygBB?;0de751(K1`hC5cxnQU_YI`I1M;M1`K7YNc@K+6=iBJ91#=t&OUk6Le!;m zqis>Gv^(meq_)-{-`eQ>IEF!LC66x@R%CY)%iTL}^iAfw(U6G8{f<;WSHYoq*W_rg zl{Q4UQ>O)`xD~f2@~WjSzgt;8^s4P1*FGh<)T#Zfnp2(r;IN0(z6^gTYWxgM2IIvf zBk_zEC;k-U$C2@y$H4emhhx0Thf#8Qv(DwFCPzbxT#m)RP6GeLOe6996Se9h|0)j0 zzg-9XyZSsqw;?O`VVIbwGqJf{W#T08AyFh~X%aqE8Tk+m_l*BMjgl89CH*oT*+*$o zzekBSN8*-simRjL>Y4;xO_uGdCGk#bgV#HtW`hqa?ky4EPS07Rm4$;klRMf)CXd|k zXqi4TdQt~LOp*{k2sKkvdjd2H3#Pc5B3H$&e>_(kl5llVVu8^$=#%?BuI+NKvP*Rz z>d#HPdkJr-|H; zxX{08in-9YnROTXpjmgJzt^n0(5qD$qb~IGEV>K*=@#9E{uT?|Zh?m^@DmGEr@^ag z;IbHjYz$srlnx!~a6&qS(&5o`xHtpu6(f)hRiUg;XTbL};I#~}TVb~qN^Q_7#sV8E zLs``tUcENB#0GcT;1wJEPbU08j0HA^O#eL-)SOpkSJZ6VWa^XHPtyT6Bx~WbbjE~l@pw|DNrZB=(3|Hyjy?ZhOJ$y>1#+es|R?`IOnFJdR;0Rc)& z3zem7qhRZ*(zQbxX0kxbBW)?m((M4dTbNz8khI%Crn~KQTS~W0A7M( zvTW0RFl=d;oh(;Zx|Yv%?o}j%6XJg|j?VoZ>HE9qoO|x?ob&nV;Hu9}fvbK(Dj9En zu?@;?;D6^$aE}cpZSbrOUa)w5F0kdRi2~kKFUy1GJor!^Jdy{;#bg1-H@BDa;FUc1 zV;-!qL$4hku)|X#?5f~AFYPDo7Y{-waT7(N#c%966D{nHxz)JJpz*pu{I(H9ld!)E^z2i)U;2OZPLk|J>|(ZV{9 zIZ|WEOAc);DX`_2JE6h}El#+`34fbRrLou=1J~?=P8Zzh0wpbtMw5tvE1AW>gji^iIE!*-q3@_D5fZsWw(g~Zy_^xq+af=hABxUkRC!BP`0vD_o zhZf@m<7yXN>w>5Y9&*9gT=2FF+~Uw;9F;oqp*tTwk`IUS;mLe>Js%umX!r^vOP~O} z1+b$4#tPt}0yt3s|00?iIVbi)C@h4ULKrNBNFf|6gdd4fWg~IqY$3d%0xFB3u?TJ~ zf(MG=DUmQ~WPiMnmRq5`7}|;v_QReo9-*qMWr|GsoK2B(>ctjj2H* z|G?hXK6Nv^Py0Y$Y0q8h{d25zNm6Mz5|VEB2160wt;+bAhW^Y>ojO<4<-Ih=^2*cY zO-cLjS&&w>INQ-i%=eI`w#7+pp6?BJK90X0Wq ze0pfCa7lJu(w3&VbIIJ^(kqjaC&SYI#GFq3!*_df(77Qyh3PjnmaRZTYPD=h_vs4z zrTA@%98FAdrYU_OccsU(Rys=)*QM!7jS^qXT4L6bTwC5-N#d(XNY`dBa6_3Ju5?eo zut2=9$_?w?&?H=F$SS$T4gGG|C0uAmUS1?_9{iviZgE4{4T>8Mx#6%IKIewVg^CxO zRJ_upY?Vow$E0kHNm-Sc9`mRho^iuB+;GATr-UEB)}*oxVr8$m;fx!8>xSREA+KV3 zWgAT@YY-}Pm8!-Su(Cpf0XJ2^7NNpMu}uwCz;5B94wG-~GAY|^QntmUY^&&&4_3e} z6%eifr2-BKKd{H7vTY`1gC=F$Mb8|rfCq&y-eFR~F0tP{S^f_I*_A1WYG3~Am8rTstMs~VTBXdSK@o`1u-eR$A`n zT~`SkD`6-}dHz-crow%=8Xm2NuT{g(s=-?Wx7EO7A{5$~q3Ihn z@O%yYvIhRQ2Cl1xhic(FwU()H&(y+ewcuJ0mFwZ)dieT!_&1R!ZA^t*xB(Vy0PhAE z+5k^)fZuF@3Xvymgt)hDgv}e_rj4+FBm86|l-0o&ktc10xZhj{p*py$4*seR{-+L_ zy$}+4(ng5;C%kaj3r~6ByIxq~gAe)Ou*j1(Lfnt|;Fu47?1R^R(C3Fc{qT(63gYfM z<%iRLc+(H%_3(5(yewj<4YY38AL`*;J*;eijt2Or26#h6P#Z|yu0@Tov=Q1GVQ(Y+ zdlEryPU&`aH9=1k+|mRGo1nZIdPMZJfza&=G{a~!e6ksyXoij!2)77kbq2HhTi~-T z@Z}cxVGHbSg}X&swbx+w*RAk$D}28dUTuYgZE&>BJRMkp&2_R3PPM^*v_Ww@JkbuP zM8LJ*VD?|_@cVXH(g6(}aIgcuBEqeWH0~EW;O8CiMh7hDgpYQ@ZlRqm4ZFH6Y21-+P`crvZuq-yaBhYB zx5C%An$x)7nW((H6@IxD&TWO2Jd^ug&q80v?E{eo$q!Su0yc%mPk>xWIyQcPc1t6lG#*{C+RT;*oKInjv*#CO_m zj)1F&__`nIOFP;0PZxV^PG6l_xSFH0jWt*s3W%^eNF<_z*LYkIuNeXFyuJ4d8{ zru)6f!tWh@Y8zAJ^u0MF6Oo`Awe!>j6eSS6^*VJkue#esV*~Y0D2kk^!{5_QOu6-B zvtv-z7CrglS?b9<)sV1t-%VUrTN!R>k5pRq+1#9BcG^X30-{qMm?fuNE5+rBSWxPn zh=j%@%{y|!1wKP*jzgHZOp`9R(4s4~nh}kL#}WyOFO7a=?j!N3mhL05xxBB38*?{_ zXTj#(G^3luUwk20wads&W++9s)!fR|O{0?1n;M*IRh62Hd{duic4+5f@|Ia9kEQdC zDsmoIq`PUgg`3(<-K0MF(mizjP)jl!@1^IZDibe>i2yENFPY^R5eJa>b(a&Tkkj2H z&c@T-B#!Z-n{MAdp@b45;!$aAOnr%!M?Ax_tf=Jqs3#gw6H_TttkYAY9x?F715xip z*c(gEkYnnVHC-v@@UZ0B9}6pr6!8S&Gh28ylUeqYEk{3znJ`2@?aR_nawHrHD;YUR zj(8K-USytG@-DTYpgbN8C^ty4cvy~PfAj7MfcSigmrW=I*3!YBx-DlL>P znXYW+=|PalMBzuOM8mYN15sjTtFIJ28 z#XWkxYMRrjU*Pj3Q>LmB+?X^vF&2oa#Zn|BMS@}V^0~{5Aa<&BXAfF9`@r=n@#*eP z^)gRQ{6HjlYfO%WKc3j%tOldCw-Y%MS7H-EMULsmzqQTYvf9o3lg<9!{Q)JAh+fxt zY7=Fho|;6dce1%ALqN*65${?YdM9SrH zbx;Ut1QoTSo;^dJm^32ABsHHyCJ7o$^;V^MCxdme_q0LmvRKQwk2z`)-pO#ltNy(= z(E;Zh$h+7;%pN}1T8tQNrnyum!oGxRUqZDn?T%+QNPon%lFV|aoY(x_admF%j^fNQ z{Z@!KQS7UC&c?cXRi{7sl#Sajs&Hsl9`WpOfxm#bJEl} zEHws)8>NO&b3;Q*V5G6Wy|uBmt!Y>a1w+FY{dZ9`F+_XSJL!#UUzpKMJ^N)~t2@(b zwIY>htU5q0`N5^P4keCp7viJ(O!0ab~q0=F8CW4 zyy=2F^Whnhqh?GyaVj59=fj)%P+kB>R3KU*d`Bdj84+w}3gNXva1}vi5u7Z7zS_VX_@yvPfAycO3TIE&C|}+i^_)w4IXAx^T+tBP1%BbWcweEur$$a|5E%M-QxTCppn{G zX}ulCK=YGOtbz3nj_hWuq>_j#{6%pAe@wb?ufwWYXQu@h;c&MZ3vDW>uI0B!7tdDQL%;9&;-ICY)$dbzk&`L|~kXd$Y&Yj{I8*dF&~1Yv-0&{P@P9s4oK zv3(-2XY84`W$c+Xt!h`v70QDCGERe0=zR*arDAW|G1O59jl;jR=af(ZmJ(ChmPfFVvn#{|E<+Z* zU{hUyFSNLO6OqIQje_Vtwx}O+VVlK~+m9tpv5eE;Dd#>?`M@8o7;mJZ-%Le49uE9!$cAQjpC>ApZu(io&Ma1C2AVV{Re1f1ujpy?Gpx%@{Q!%&KNtWV!(_gJBb` zTH~P;uU=XE+xsW+d-)7IZ2@B9bOG};J1sH{fp@OAF&kHDJ-u;w4@%8y4_J96@(_TU z{JGXpUr5JMY9F9V$$j#b`aYT_3K=f$=q6LtWt8y2D=@uKd$A;vu8c;U%iAZsN1{fBFXJstVyL-O%9fyVmr%F5%X2ZD8Zu;>fk?7NWJd=J>{Z3- zOr;YWMfZ3AZo1d@LmrQ3WuZCrIyhpH#xqO~# zRf}Fq_bZ^`y>NV;)}EAwX{E-U?ZaKqvq{`1rKY4Gcx9FfLFmNzCG_Pq{e75k5mT^q z`W0d#8+;jkOHxT|nRr-J{puYO8x@_a>$-W@Zh~{^nF@R-id)uEUJJO_39hRrS)bqD z3YAj+9sx_Ah6Z7)wkcNtG(Edg?ROPlR zy)mqd7(OAsP}7w*SL;0l;F~5DxAkkGK1G<*oub67gj6?RJ-7LGzYG>0peX?cl&}I{ z#M|8OAMF@c`+#p)S^I=&N=2uolz3v(k@p8)ii#5#zoIU73zCID-HZQJ?*ts?DP3#z zvI~`BNOcZL-4vXn0cck3mMuH|OB6w;7Xsam4vrUN(7r(9zUBrwg@?c2IqR#u{dPVh z%dUk_4CHKWNtwI<{U~`M3MliWDqLA9=o-?%WpD~t?36f7JC1{!I`s5^-c_s|;{<3x z1*gk4QI9muak}mRSu2n8Ad{xV0?u1`*7m3{BCDzTx zkGjJ*T!YUD3c%4#-PD91Lvv z)h!_%cfA_yPVKsO?Y?RWvWMsDC|%Ezx_XVF=5f-vSL1G*#??j~v~jF<8ot4hhUP`` z=N8aO1LdV^9~t!PEkkL6u^1$5(BONz+yjCrv;0uWXf>;b1ctlvd14%Kl_6G)wVrDQ z+4noAxVW-p_Dml?>m=9ZdUHgrEsil6PIA&^pj2CSvDp;aQSw?*fjf?ht`6(2dHAz3 zG}h{Xsdzi|3!&OO=a~&Kx{?^=(p*Il_G%;O6rGeU#RpT{EXmnb+Pw(ZVE}F+@SB4} zuLCy?T`7FZ*tL2N$M3g@GS!Fd>uwYv-Ka*$$t(k}7^CvoyfLq~ZD5mtDhEPf#=Ekc zPyBRCj|>|7y<+0oi>_g&?*y0W*jNKnSL9hYlE+3vE^qP!@D~gL5jhl)#5Lk|KW8`;Rp@D6|TVu zQ?-req8$~)H<4}pQ&;wDB43>3WHi+Y74m!9{T?uHIxThu*fp8P5msq46m#hfnXOMT zmi{h_0m9E3QC;{4cWH5zDOVAfZ;%kvtfHBDYPp6tZJuh0-&~^qOd>9mpgT27HXyRM zfjC$>htYD!wK(aFytKk6tHbvd!p}g3W+W(#J;qXMRF^2&40$hyGbcIQ1Ez~ z+0|e5GUdqu4aYbHO9Z_G^NTn3?vW91Z|n^?zaN>fgg$WAmv7f68L2EcAi5x2!->DF zO$7-4MSLfKih=#X*5Dh^dvRQ{1+M&JLtqW6uyW(iI*7z3f(iX8&mc9fu|@br@qTw? zO`CD9(&O2FmnoLR*9vUmxEl&Dyn&DfjTeQMYsLccQ^viI-gxue*>f!)JZ0YV0#+u%k_ar+3$szaNY zvxgDQX_scUmSG2x37^gltjBH0iI1O3B#HOIPhw66_)Ke10Y)b)e8B{8-|CYmS4Wxc zXCHdjiAc8W4>OVTHbXqwaJ=&{uSWDQBDjhrF1LZr;C|Mp=2LM~3*Z|wI$$Qe)v0nS znr+j~oPQ^UO_C1&Zqeza$<9IVgT<=}pBTWrdW@#})j+IhxKI z6mg?Zl4=5yp@s+?c!QzwW~yAZY|)N!kcd&Z)@hhmT`o}*j8N9-JRE&(I0#N>{TE;W z#zKq|_?8YjjPqoRI>Q{rqX?0#g1ILy^i3ZUD}(;je6nUL%@}OwK4rr#G>5;-;qENL z5Z6GOPakx&ZY(BKWg{#^#$33af*g2sR*>}@VsT_dSPDCRXP2DklI&Zi79_9#frYIW zL#Y;%%~R+-re67n24iE{2DHfo4kvbd#CRGrT7S=nwdO&*%#giY%3k2YeVB=iw;77D z9a7>M6jcHNEJt+b!lPQu4p}z@&|SVGs?CM($8HS6>F!Hy*;WLM;6F-Lb=OsHN5FQ? z*Ld5$U26L#MI;JVY4XYj9@ryiunT=~tABVzd=cln{B)ek6R^du=-)afPtC=lm^Xcc zj{NVigX86c0GBu@VL1|FcQ+E^i-Xgnh{aTcIr8RsH!_!>#@tk_A|YdOLK?fv92hi= zan&qTQvQ&qT}6J#SAB;#1Yb>S|E=9fR&9G2S9yDf(YY^9pb$ZNuC2$Ac5o$y(jr}4 zEI`pT+e|UOBt0O=<)?bz^p)pbbjf~-7Zct2%5ttMAeXo42!A9^Kz^&9i|T4gTY=}4 zQ?s;=QPJqf<*gSB^*!m?qrFKF1K;n1lb_i1e&8v~kw3d}>s8TjlMpC)DlqsCFLNee zA5AG*z4En&!O<>9#Nl_l3a9_7#&2!!mgPfq7BML{=wg@DuYlLwmshDD+#gCF;Y%tW zS*n&qbaSCmax@#1$s!r*f=3(sH@A_{%`>3wB)<5~CgH|ubw z{QR#=r@+iv($^OgepidL+Sm#$I#tnFtfHrt6~@FLL$7JsVDFH3^>9}ru|e!oMW}vo zJToR<%{#_3egMrVv2$$6<9+%Wc}c@UZ|R*Za);O3>H5vsA6$|A>EaOzC?j&)eKkN3 zOJ=-9gb(eo;)bpYM^JZJFRsEZ0cVTw0l9Vl{Da~Ru~^x@a`qCJW>UtumcyrC0!(S& zH#8>mv{09safO&Lok5x40u!eoUAh@ul6gFnvU3)54LVj_iWvgR9d*=gW(Xc+FzA<* z9-SXE^(Rq5HmQB3DA`Lw?V+*^Hxs%Y0P3U85CbzLMe!+m!Ob8%`h>nyF9p2!g7CbQ$;iF!Af9mW|^mD&P)N!-NH`YV!&>IZafyOfX zm7?`)AkJ$K&R2sUb)XLTy;aTC0d{ihpZp+m2#>-tYxug-27KDu(!qSKdczJ7>mFQQ zzi7e6?dqZylDTRmHNMEGu{k{0o9gK4YKR-(js_+r9!x!g>y3(=YeQ!aWp(tt?y%($ z`a>+XxB=$B@_Z!n>jB>1V7?a(KgREcO0THbfwR#sMq-{zyG#5__dHMITjWo z*{oq)z4*(y%mi^+IIi-ko5DNuHC7|FV>!;a3h3@4vSErxd2!q+Ur4@&Ca*@4qSs z-#_3X@lI-RPWYI_k>4LrVj285sAR8VfbTrmaG~^3!DZ^C=pIg=jqcXp zN@YTwHEI^-$?Ld4ZFRz6qdH;GRyjP)qi#E&!K1_gXM6-{bOU&&S zr0Ahk$l!;43}ySUcFMF83lKHwOY>p)`I&%o5 z+3C#`0~=Sd}-x1ajybmR}M4Z#~on5BOGd{MP#LIh_ysh-$TP+YWX{Y?2kEg$xbRJbJ@j zHITJc==|zJGg3MqoL4k#z$Qtj4Q7xPW{@T33;^A>Hp+1wZ6O=!bbNhi*b$Q51|4r} zv>`X{#i9T(NZJw?&eugyHbktiNkIZOdMK_Z^bgCJ~B5P_cs`sF5COb1${F#IL15roGG5@-bBFoMK6 zL%W>eY6oGS7x|w?`TZXH+W|87>)QM=2xn2SCPI~kqkaVpE?geCU4-qGuTfyBJUxMv+eQ83y|p2K7|Kf8--%6=3XXf$Oyp zPI2Jxlqx`aYGH(`VFGGlCKW?Ts)*b6a9&kXlDa>T?kfh@md*C<-J(zoT!1SDSaZwf z&u0t1!p7d+Fb0mm8FBREABc`~;q@)x@D_v#VfdpdF}Ga`KR4_kTkPIeIbf{-+H(tp z$95QdE_xsz)4v&J(+v2cAAMr|)PTX$Q`n~jbmEodHcmc)t3Yq>1|8y1l3+G%fC!I6MSX7DfTv4ekGJHf-sp8 z3m)pgYc5G&%E)ExA&^w(AF3A!)e1$p7B=ca3+6(YG_+nCx+e{dl1}D=*(U~uVxXvR za(c$ihY_EEmOQ~Lo`vsZum}8-Q}Yo*Cxdaf;F()9uqbRXQPv4!;{%*JJ5Y%o*u(LG zY8Ppuk8mi4Bl6vs`sI44ga3*UHJO5zls(M%-!ftX_oD})9e`%qg$L-<1_od*gijaV zaocrasPP;8gQbY7Z4WivdBT%)AWUiZJu7|{>hlHd)tfk?j*$Jr` zApkzh6#mf!KFI_=w?4|V9^Z_RNH}1;&27F7`qL3ovHp3v2aWi!0iyZPuG0|rL0+^2oyF?%7nxD*qdx$9ph~Ip91YJKit`j$HyN2y{NS+c12BC|F zqR;f=x9>2Ux$;`{b$o{EcE0I8J=K}@W9sf9g>55Ts*Fh@ES9+)F-@ob%&O#yb`2CW zkrEQ5(up|&4zoP(Ad41xj>ub4XLkD8vAVa$evC3nGQGCpvNFP;e?2Aod7#s`i*M?e zaDeVV1fRp;{;65pS$TH2=e1A`^?VSEuPqTGrLauEkf{FS2N0hIchtU-n?2mvrz<^~ zAgB82?{lf7{F(1_nfO4@evMt)(B_FTUC+Zk!t1N}BMIHn8L@p~ckgP6zt*3C(!>d) zp%8nyBSfP%!pPE`JvYG*h6i5N8XV_%UVonRZu87TL5Cjvysc~wo*msJJzGY(yY(_2 zdPZqWyGvVJ8ymfyi>t=DqDNw%)q*1_7PoQ~ZD6>5dW!CkHq*GS&%jtVrjA}#{&K2S zY);+hk!A6(IWNx*x^hTb)%GLV4#q#sbuh-;|E2t~0yvR=G4_>7BtsrQP3Kj-Lm<=5 z*fMO`%{QIKi8*Rp8?A%OV!4)yKOs`ZA}NXfeqQ9OibcR}3FAi#!|Y@gF-1QeWx>@- zZCU*zq8F2$W#tf;*gwe!T{_}?RY7uQGNQT1pUkxaKl4{n_WNO7?QJx#)!;vgymh8m zHka~_mYwqO;JPW`QMq2wW$EjrGE(|B;}FEOKgR5md@KSU+*ilwhjy&|e2kHX6p|&w zd8l7&`SvK4I`Elm1_{c_)bFW(#j2SHIE1WAIO*y3KE=n5999|SM0SsTIUhywXPf(8h#~Yy@>O)` zSpRH6nQbwHnopQOK+eJXu?D-Q<01M}pUEU{+(nr57DVSL`EM-^Vn#to1DUofi+IO@ zr~k@$a8V;o4>_(I%|}8V(H4PE<`1B2qF=u*6YIFEgn7Z9_eihe^FoGp{ng(R^Hf)s zwgyAmWF1B{S8rnJ!O)uN8UMn~uHXc+Ouj4cHtmvKBN`n?-wSMBy(Hyzix3R=6%tZX zGR%}P(th8FzQ@Qij0WXS@3{~N_{dTOEiRSOul9H(P znbI2Zhp?O54T1+D6el$E76?y^Zd6VbV#vHKj-Mt~RYvP4<`yZ{gSKuBQ|TtJQu^Ks z;<}}*O=bh;VMp~C@^@<9wl`~@EEHz)RTVJvZtv~>&L%(PJ~R%uu&^Qz8zK9+lC^qZ z(~J9#h8SHvdItt%q6jSpd;DnrQZ4uy>o#ui=rlV8?@Z}_&W=3sPWq~D_~znLXXV2m za*w0~=p_nsk-BX|vl7L^*91l~#{&|SsC2LyY5s8QN5~et%-N+*tL&N`Mvc&4fYUyq z|GVscds9Y=k9Dp@UZp@yU)<#dHU|H}nf6iPcIZNfcOmTu^&iUVRv~#>w+y%C0sgF+ zubgRI%`XgQ^{PY_X^h3Qlq9&S*aJf}JK{O`Lgr42#gAP368yLxe$+USWetUVR7-7~ z`{+MKT={Cl6H`ZN4*IYn<`}qQf4@YF2}biccDjCUp5%M+wHn&sqebmur^NNa{6jG2 zF8?C0x>4`ugTp^VUSU!+eUSvWceXuL#b$gEl`~>u;eak+lc#!|E7BIVe7&lCrJR^( zj$YwIFE`A-c+FMiOJB9kk%m7J9O#esNtcGGp$ne62r4-aL!!6a3Zl3 z9XP`z&Peza^^pSN&$lN}oZY?|#FfIyiR5<^V<5! z;iKE1h&WGq^uv-g3JJ<2CN-qxucG3KzNX*5IPUvc-S$H=2Zu|RIiil>$< zntJi9?sRSVyaV)mWPE4O^ZSYFIu)a{9)Wgwl|*UHtn+0Ol&Sj0@v_MCQppj&1`dTnaiezVNVC_h7A3Zw7 zUWD^!l#b`w#DXM(c13Cv7jS|-CIgTQts<^|k9|FH=SX1=IMk-_9u_aBH`>osx5k?s zuP?AjT8JdmkY`T`n)W?}c#YqLXQm zP5QRs<2Z)?F5obcUFs#qRJ8=Rh^vXF_~Yn|E0-J4$QsAD9OMI2!#H2^_q1KblAZJGR6+p(##!h1o}Mk^_-aHy z8GN)AxxdDgXP&Q(!4w7gxF`J2O-+qs6D}RX);cBHUn1qEUPfPyahH&Os_WOSd}2#y zPSlrj&Px-aJIMIHtah}@!0=U1f%ymhPyK^Y=IGur&o9OkS{7bTqju-AF;*6LSJolQ z`D&9hNv^hs$_Lo)%{wkvMq)+DQ%UCE-Fc6@Xlv*CS4pOpfBvfeaat*)uE~OkM9Z&H zWs^+V7Q23P;8N!3USs59=fTG(z;=D^kltgmTgMikv+L|!-#$7n-t6GuDQqB65vwe& z;G?7!-SpAj-r-F(-JErELYa6h_112RlizSy|DZ|13r;B$%V}|}A1FaY5T1CrY~@&> zV>pCH~?t^R|jIz~4sXPnX#$C^bo^WfY$rS9ofaRc{(Ifma)tRISF zpEaPCvVyZwB!3)bK5L_y@Hh7UF-B(=xMe@dG^*&i9`IRQ=)?Jaj5Oiyg>J`v#a4*@ zV6<+;f=e?mjDyT@1_oP(1I|UbY#gBry>2hm!(tTOISKw9`-$9)N2(9?As0-NrfxIr z#F}9qu9gcH!hP9ASe|vuB*w}{tejOJq}EJ+QN2YV{Pcs6O`d|!&@ZD<*CGU}_K#t* zwmhFLXA=Axr67OFEL2*{|KZtYYJ|Ri*rlo!^clTXUltH=QrqETU?1j9utCk6%Jotz zv5S*?Ctx@d*Z!BSHh^oMpM|w$=uB78E{f7%Ff+6EyKR6s$x6lGG4H8D#P|}pfrfP# zW?C&K)yqybhWrd#+xix*?dzeiW|98 zjr)v0K9m-8FpWZn&deY~4dmLEzKpx1Zh!8DPvxQMEOQxHuR|!iE*x2kHWLD|NzlqCas$IiZYDHgF*57BmgoPji;=;G=$)2!3uFDJ3+$7C0NtqU1iq zuX;CIsojCsCfrbXhn3?Acsg18m$+W=LSVt#wsDaB|l zLrl(~_g;Pgy!XwqtyuoX&B7(53ny^f;IlK7?ia4Q1+d>NVt*Ut5ThvK)IR*jr*pNS z6$wgs1??mcv0v|0_D0G}fkoyKON*K7t0SYfxEfPhp)J?p`k7O;^4^n}&TW_aw<>ZgHo@aBi9Xwqf~#OcYM zKmAzJG7-kao^{|me8mY!5^Ehg4+svIJFAo{s-_4hzHyODhejy*}v^MB_7B=}G@Kj9AZ;0a`X#C5FjOcwn8)BNP zt;h?1h|OSS$1g_)>ZW1W!=H<|f!QGnQ)BA z=++KBSz^vjTz(u&7kXcXR%uj(NPGV#L1W154fp$vq_C|i7_c;_mcct*z%8>CSKN9( zDX!LmgC_D2{UToH*ij)1cThc`=(jJJfEjv3}~eo;6}0(wl%EQjxWE* ztEwlbUe$nY^)hte%{{PtC|A5CV$)zMu)6>86*--=Td!QcN+@wjO_j5(1y_TFe6eE8 z?8`gHPXkd|#}4j-1={Wh``}qN#RPy7SszOrz2EAblA^1ZmzrA2*3)7izqP}-otGuL zZbGYDy~gL~p*LW=)KalKmJIU4+lqX`JCaxicbR4D6rr(L zQM7#TU@lhXXzS5fuQh4X$&VyWu8h&nqi%{^opFPD81SQR_FQBHBy%bYZdD6zTjZl| zYFt6BMB-W)NvH`Kbaqbd8yjh(P$#aJTA~nBj0UuXS%n4tvIYIWxua(6VV5|JY+-RY zl^n!dW;)?W7o$kqN@o73PK;qDbZ)w+evwGzs3cAwCo!`?LUeBSsATM6B9UW;xV%2$ zf-2(raFi@z^C$_dN(=Ha3t#^<;XIWufT|HNYw;BV$`L~J;W*Mkl!{=!q9$)tl5HA( z8)if!CcN~a8O=&|@~w?EgoG;`1xMy6pQ5li1k5~EZa*C+C&sA!&$Ja7t|G!MyyZeI656_xU^dcwunn85c-v*&FB`jioOvjr;{boc9qv$SNAk&-{bBu-46Odv=QW z#m2PFSfgo9mE}9X);Rn3GRvO^!u(5%+cu+(`}t*-%eEIA)-CsmvLPt*iLm1QMkj#? z4;K?`eOJGQn&fD1UJnb%2v$!I6vGS-#RunQtrT_!Q(P7x7x}ySQM|ZN z;LWQ!s5@n2E1e8i-4=z4i;7Xcu?#h1G;U^a4&dnO3>joVyA=JJG=V>f&DxnKs=}jm z8vD_%|NVbeBk1?TKCCnQ)uF{z7Zs7zH$;zDBkG62K78hT=_je>qgn+?Vg{AU0`W=A z)K);gj$k#uWDRr=wjFgAP&u*LkJ_mD)gf#L$g1H+Ckzq+N+S*Yy{h5ahA3hE>D&Z&&CA6L;E&yY6O zFCg3ZP)#v?at{6Q3J`F9~3Eoq;ABa9JIoU^b{eI$rB%xf+-n zF3^$gseRP6A!JWie+emY`#)c~k2k6DJ`#5OV8=Gq3Kpdu;Xhw_V?*08?iJKRM4w>T zJ|1#D3g=YhuF4)ALomD?56KvH`-S7@7YpM_Vm8kfM#&Mjo+$~@>~v=e@~(n$@ZX;cZDem{ zZ+)MEY}_FJIv_ay(OVMDKA>@#4DoPc%4h!?tHf%wLqXaxrU2pi@~7>&PIIc@p!8c9?En4y~Q09sHc zsTs=}Xp0YQ2!CS;pHv&BC$oVDUu(veULTd&=5}D{=gyYifNNHR**JP(HYzOWNsdt) z5q`hW1OV0v)OXx3v{0}cVL#T#M3I8;FyWjcV12HUI_=*mI@(@QMgMZD%3 z7RCnW)bs1P9r1b(F3BbAhZF3H?na9a@QM?(*M`r&jYheFX1a;yzg-xd3nQ`!BVtXO z*M>Q_jnv^BA>kB3yp6cw0`GL@bGm^Q*go8~4cXp?cz^V%hUE`NmKQPmgC*#UEZPbW z*q{cf=Kdbb`5zJP?`@Kmto(j_;;dBpG*?nJ8)W>ES+<)@g=~1rO2fFuBED6YPyNeR zFN`tD)xp=ryM#X`7luIF6ss zgS)`QUV0dCKtENS%*yV{y#3{9uk}-q@Lr3`H`A`iDy!eL&kvOHDQbop&sU2ykF@4# zNR^LrAJe`mO}2+?{hr`;B8Xw~=Upns)cS2_HV=+;e2_#P~@nYa5g5PZ#(| z>rL6%xTf+K`ZLk7tWkVZUjAC2UGLIfh;+z^mP_AbnS|e#o7LzPLVL*M_U5*yCR08I zzeuELnWiqf{z%dZfX42LQ&OV#GlV<`IW0M>-97mC;@Tt~KKKu{s8Gf?<${71aj&L= zoVdl44EjgCn}Xs~(q}ERnl^Lrvn&>kk$LHqvWQUG#i)^*$r0v|ufH9ezF?|5hbMkw z%DF$nbXh){HsB8mZ%0=-Odo^L(mzF__M4GR1zkW>_DuywY5ey&&r*6-Z0rPv6>Ly) zAVNIf*@lRSX#H7O)p1n}cdWxW48hnmtijBppQ!s>lc34pTMful_~lYLx5`;lg#cNx z6hBsO>^0oao6jEZh-6e;l=3PS9Fa5ONr5IHgUJ!qPbhmOw)TD4VkmD}r&7@65(C3k zuQqj}yQ2{=Z<46%t>{MGei$2Z#$xGsp|Q z)dj^yQo{Rjf$y*k~qIQp^qQ8u0rB+R;|#E%%(kEqNPdixuz|~)%EsSJMNYD09=jl~8ZL`ABD+>TeC)Ns#;Ym#a{cS_uBb}E zMI|ZrzG68_o8P{DqYl?;s4h9=qJ%$~^p1tJ*DiurWTq`*9P0*uS&pH!t@5{_6{C7r#o-u%V z>9=59>o;=63!0cEtOnmk2Lo*{krmvk;Z;hs=Vvllp&e500&&sx(G+%~TGC>SHOwyCMwf|sDpyH%2Gf3|rilT$`+POt$+J{kn1gEjGwxo7H zyvgqfkaz$#_r7M5W~afD6ECE}-b@4M;{(S7;O}gSp*0v!rbsihk@wjjCL(J_Uk{6E z^ByTD^1x1GGDU^cn+$V#}LZ3#K+4$ZDOENus2gNrULE zamM9ubh*i57pY&)PGc5Qd8)j?o*rXzzIG;Q@VOp^Jjf46-;86vGgbtaR~GK%!owE1 zYlPZ~Ga$3$QQ+Y8=5ja8g0;-V+(^Fxruy zf$jpKrpD}@JeZDhV>hM}-AFDpnmx#^pNbm(3@@EFWjlt&({VC3CpLd{enMdcINB*; z3CKDb#p_EMc)SReQ&pp!k8k@uE!vkc6!d!6%5N$mMn1K!rbapa59UuUDk{R^{^`r9 zJOY;X0~@Ix_T(+G2}kyxE5Zl!enx%1F^Q7axMBHL6rx^P(p-UBdA}UZ+%ca`ARTOz zlZ^M$uw2Zrbazfu$q_y)v!I25O*nWHpITkF98cXtM1VKkZP8go)UUw``sUvms)rHE z82t^Wk~OT44%&|cYr}|^{qPg#DFF4Q9bu-7vqu|vM1&=jls;rx1`T5B1)zycfxEe% zJPf$oymNA5-#V<#*ka;5^Z^B|EIwQDKcN*K6WLhk6~lkeCR=yx2lBBRlw)Ry)p_98 zX5=$5MXqjm!1u(Q!St>3k#pIT+~yU1Mf7<;5It=N;|$#X)>^f3E(7ur-}4a5T8gas z^8}56=_FL6o@QfY`ohSn`S7ov2=dvmn)HKCsF_M`(Fif6R%czy<+D-0yBhu2^F#?h zd#05gw_EEQW^tJX20#G0UXc!%QhN#~5fx-Z#;cM(JrnTBK_XX7e7RkAp5&0#4S~n@T`L@%2 zvKBV_g?X@8?*Ij$GA4*ix`(>1t!@yu4(rrQ5(KLzOf`%eKgxPFwz5_sY@UQW=R0(z z`jmkiM~a|-p|RD7BlG2xl0qkEEao(w$me>OhV8|Z0!AKPn%^U(KCV2!Q|;eb($dy% zh$V(b>bF=l2L%0STNa zo>>3Ln8|(azo-Y;jN)t_wA@nR!C0?ZIcOaxk}~;t_j3yT2D0N{zlfu?q$!u*jsvj` zJ0sR9zco@THq$;hE@f~FAIMQt%*Kpc5ZKYn1S8pnu4><5I{osxLSf!5kk-gwL{d|0 zSYKWyt^Y0};p$7-;^);1s1zPyGu1E-x1^36qp z>DV%n!BG~cd5sQzZwF`d_szHHhlcaVu0F-)g}uqf0p)z#Ng8_G=cFpwH;r=gcPAWj zq@-vSOI$+HKmNQq;O#|OeC&Dh+x*&Jj>TUxWIqp6t3=8GYGiBVOq~7&SI#$@xQ>#2 znBrO$t z?9UwRT%7FzJ8NsJ-4kp*-FRh1Wo1=$P4?g5OK_7C{7?jQA{8u;>4k~Q-Oe4#t@c`7 zZ(5nO{3R`e6nhtNoa?^ekNTBm2@MHf7}XVtnou+_h*HViS}9ilkl{>a)2=2yl5@5= zYwt8VGu%1PB+W5anN^AJ=_dK#4MjXt!M;rJrk)jDi+l`hg+^Mt;2gzL zl7bSdX?Zk?f?!EB7|yG1Io=^d`_V-qqGAaw^HF%(>~BKnN1Jjr!}Y(_cN!uJ*NPe4 zmdA!Slwv9CrJ|AJptiT7#pTC{*mBoT_4mupCFPz`&Nw}5KMJ^m6KNN`<_)KR9PgOR5SEk*s}a`HL7TUy->D5^u$cIVhAO!ZN#5vwhZhk0aODa3gF zPq)j-z8%LUEj||fn_UYC%L2j4{p3>r$W!=x-V3-s_ha%ebEgVHOxEa+L_d$J1>q8k z`6R~09Sn`Gs+O1w&@@$=%70RbEQRj~1)y;#WDIfTG`1X|Xmd!v7Bn9GNA^F}-pl9C zKG02esd=8^W>#f)FY=999jZ9xn~USMuQsAa^`w@S`S`TsIu7H*Yf9!QhUI`)X}l}~(c8_`49J9cmy;n12Za+aXLQnvo9Dsc% z89gcf8cue<-}L8Dd{=TNvgfU&3N^m~r7E8DI}&b>bEr7kOib=AB<&AWR-Ba`Cg~L3 zjI(XKo*6id2$h5t)qq(>hopb*)VxFF{J!J-NH`P`1d{P`Xu+kVs zEFt5b3Ilg5W?6)M+xgP}m40NPWxnW5N2@5Byi!joPgUpxG%(1V&)H8V|LEc|;G)!% z&bepc%d?hnsF!fsm+C^RBE{!#(W_>6o|WE1__{k-_6bXMYcIN3h`kh94432!e(v>T z&@YxWner+p<52*=pe^_Sr4Z*%IUkZef@dtl1sGF)9W^+E6cLUlQ=D3T?$gg`~?51NLL;qTy*_%q;!Z9 zw_KkxtXNT@wt0$vM><5sAQAW_<9#ubBL9O}nbK-a8!%(gGq9~R1X5BI;qh|dj^+OuqMrYcnh>!Y>%?14zVzVMfFpW}%H*ATpwUqBBekfR zNjPT3;phJf*cd10a!9SaBzeNI%Hwe)>J@(cS~HQ-C_`KF_|y?|B%V48hEAO**Xm=9 z)E{|Vj;Kd%8AgxVr$w4ceIB2uPxeZ2AFr5-)u>Hvd+KdbP$k;}O%@1Q;N8g!syt+Y z&syO77Wjt+W?112D;yB@r$*K5?N+$k3XfXhc`I1cU}YMdChAX(s@L<=;F2`BHx0g; z1}~*SMLL`y>Q9ZT*FEW=q{AiYa9=unI~~-LdUHhmsiE4OZIul+*r3}6SJ>bI8>p%( zvse|ysI{$(y8Cam!#+FQV27ve@RA5Mp3$;0Ky|lwX26aNIFJFK%z!7wf-1EJ=$|v- z?-@{-3C)>sS|(hR2_F;-s?;4pSNyFBE;%B_^l<$iXO|pOoNLv%-W@^z0gro73-{a6 z*H$6bauwr6Xk>TnjtokS(3zvJThTtjgw8M!s)S`#e#U6*96gPJ38t}Jq;cpdUORdU z@1I}_r^ivK9X|y#$Ja+s;tP|F#ArRY7>RF=p2V`0OOF(e4UIEJ8rR7_*MRDh6r-|v z^aV)Xn<|y#HIPEY;ul6w;tx_DNKwg?B8~YfjcUDlzZ~~nd^KgtjvK2+B4fsodx?rS z=Owt8KXSXrh)o>Dg1uy#BL|vuV0jK~jH_XzmYeC1R+G6V2X4uMdvoC9Iq8MzUw#hhGNkP9ujurgthmP}MZ zriOs(rBf~+ES;iSKB6a_H*@t9PFtRS!U^W-C!7cJ^b^iYdHM-wUVh|+lVviUl~3$A zb$foqR+MEjeP6xI(k}DVswdeI^HD)$ZL9Vp^)feNIV#Xrp=LT#FY_a&Bem>Ff!1E+ zo%{8QC?6lJi1K2gPD;fzos=`D>7?8?O(*4h(;}qUO}5-3C@O-cBG^_0cNM`;iy%{s zYBYo>+7<{wkl!r^O9?CzqZLk@-Rg&2T z==#~PbvEpq4OhH%{gnFm95`Q$dYof`zIP6MU=BP!2YxXJnk0Bm0<&0h#2BVoF&Ap) z!n(Q8_15+M>faS`N=4Ez%|jJ%K?U4Z0iS>C`o9&C(jyOw)k=)TKc1ck-=7EnHxF{> zgFHV{Zsc~cy{{TRS`FW-hTm3$qXs@- z122gsM=A|adoASFLR~FvsD)c=VeSGrQLG3>u+7F^+Yz*!6C7ZNR2UuwhrD`2Vbg#AJ;)uJ-l2Gg<>5MV+oQb z2edojBnJc?@R$QGal*&NIwB1Q=y#m(oD=@)gzN_BY=F{6SlO7gddb<1(A@}^Ho`rP z@KPgutO>r~l&pG*?e9(SdJ~i_g62hV$s$%oxfwpy4Bu^rxh?S9 z7RYH8pv?woeJd<#g%ew$uN59|g-hGufi?l!GMpMEfzEn*0-d#JsugwCjzneDhv@P< z2Li{T4|YKU-iU?SMc%A6@Xuy*b4Ns*+t=s!g&ga&41Hn6t)6>M@(e28N5-<8 znvlomQlv)5qV`&`i1@K!RDJ?RWhb+j85yOyEoeOIc0^2NyL#mjPav1hjkZO#((b4$ zgxXqPd}|}K7Y~8dN*-S*tjO*p7J_4LTuNpmZb-!AK1ZrcH8?o$njG!5(#8mP>NMwf zx8n9hUUh=Y?^c!%zG{cZwNDA2;M9Ir%{ESdaL7YyUxq#uHL`>zg7IQ9gLuY^6Mu^F zW61a|qhS23BQaj(!w9*&Mdxx;lcOO;F2~~RCV+opMuT|%6(!+c#gX{edC=e4>j}CI z*>{h?#5|pe&Fv}^Cx8!$BF@T^@S)1chiF(?{O4(eyf`)Km+9y}N)!4$O0+o=HBFNZbP&W~ z?D#>bnVQ-uaR~JliHASw9TmN{jHYDNdqQnAY&45qt^SE}%JxZtQrqmHs7zfTQdjXH`A|ALXR-H5BzUDu)|1bqI3Qp^WFvOSZ7ioB~g=<)5_ zsd{F`c4xY}B07Sx{zX86pr=m`4ybgCfXO!0ZBs-2b{c9idi`jUuuUmcM!%d^B;m0$ z;rFP|v7>R3Z?*Qa(8jRRchrn-Y-*^Lf=a+EyA-$774g=WgJDm%>i&kGTlv$$>dun$uv67k!FgD zcs@=I&Daf1G6hD{NQWj6RJ6FasWe_=I6B*tj85}NM<=N4@Am|iT?0PX)c6b&9_WaK z2d?vY70KTpj%hCRv})=Paq)r1xWL?}@?)@MOLOrMisfL@;kw`9Sm zv*4L5sK|!jWkar*J}1)vjd{@T%mH82Gybw%cu-8AlXa9XdQ%7E$@+DiIv7vZk(oLe zPrfmkIv7vBF_}6TAD2TjbugaHqce3dK1K)Q){*2N@Ao*gbgPNdklS{}9gwZfz!G2$ zuszv9Idc9wO;3<>^I(FUXNVR3v}Ku~zy!{>PJ%m3aKHo)o8UW1j?Z?JO-)Gt5A`uK zG)HTL-)@FaiAl+gC$}G(;pb*}-3&7=u*w40MT>qXIz#D)_9rcqCsl_wh+^dYiuB%;>2(;AZ{KeR?J4?(@iy} z!;*A3B^|G~Im>87&BP%$CiGdL?JO$Rv4a(H_=H6#nKJl-=V#=g?ahWSdn{Cy5} z4-pRf`_-+9zfW<<|G&L64{qzK_xMMVEw6FnCYGCBu@f&zBw1eMEs6KqN}7eH?Er-q zS-N(W+LDm2oQ8BJ(-vqOpg<`wZDD8!GPDVWln&dll(K}S3?&SZ>AI&Fj0q?DV&sTr~ zPqB*`0cT}z;M3Ea2@4ljYD|Nr-|m%uBc=~X(@RZCUie9uzwFNM37!uOZL84*D5 z)0q}lLRlp=R>ICoczY!ruY~W40Qz0$nIykZIlmLgWe22De>CbIh)hN!;S4@l!4-MW z8XZ^6^Q^HpB`&q?dqRr2`=ZM4&h&rNVu$h<8@>p|_WR?~fKKd3^B4QgoW;)3dh7)sO54rSgc2lj5AE{~D4XG3 z>Id3Nd;UuAnP;U{DW#!sP`cF_2!>rZ%aaqyuXZ#yb;?{(llO~xmRFf6Z(7>_%z?Dp z<++YFB3C{~ZOc>ICjH^in3`Nl;d575EIrHfZkKYd>gI~}nidxcN)zs}6ir6!c@N~T z@C);-&^|+9^51w`-l_cMoz1y6IzTQz7XLos#v&5Vuxt2w*RKdTiFbe5fti^Vyu)~%1nHLs|7uMRL zF_T_-zU+0|?J#JE-NJ=Ngx6)_=0OF1d6OMNc989G*bYbR@L@YVEL6PQpyD+KWor$} z90q0U4a#c8G_+!ye(HPJ_F48E%uuStKs2lI3`rGXZD@RU#Om$aPfuebd0w4 zN-g1{T6E);>7oycMc>hi&P^Ao(b=vQ>7v96E$DkXh~(=}GC(rO%9rPX-bDz!$<;K@~KgBPa_*00tK-nd#bP;dGE)oFv1t2G15 z8qHwq8tpqPtXSnXnnORoChbu5=D%N)uFJ7jtLuifT3sJmtKD2JJGFM^6DePpu3&gw zdKs(mj&*SNI(T#)oLmQIMBc1^Bkp-qEO}Tl09XwbEU#^3n)q%4fZmEZdL^Q2F6UKyPFU@NH@o17NVV0Yq>s7agbRM`f)`yd;D+1X@PtUU)uE(qr`&Mb4KKT)vI!n* zg6Epdn8CKcHNm+iSmS|C4}9ALFNq*r9WU6ntQl4`LwhsqYlc5I!>SfDR4Za_@VQP?Ch)VJ@bgZ1sS}oT!P~mvPhGIO+ms2swHx}o;ceY;TQ^i~g@0`Y=Qd*| zaIvLm*EZO<4c@*D-nR|B+hJ`F?Cudvy*kry56C@mUk`k?2MT-Po?iG$uVC7)8z7(S zh2QkTxn5Y)2c3O_Ntf-}*fIid84*mc)|uWm0(XqS!z1vu5h(M4&j$y6g6UqJ=>tCa zgb%*%gXetU-T{+4;Nv?4(>Lgrzw*n3yxw4Igb7`F(XqM6ggh?E%F2oqmItM9JR~1X zMy=J{$Vz3daY^2DAS}hSg|&u8*X%|O`Q=150?vs}6nBaAX6)whYx_#2aAMLCjZ2AO zMA$LX?+@HE9*ZQx!9ht$mYC(H5&y1GG9(oqccgZ&$`Qw2^#;3A8%Yg!hc-2}x3mYn z0nccMw>21OQS!V>V{Klq$J5&B3AARB=T+6?Ozm5pgWWkI{WH_=r6zvw98lVr9Le09 zGnNPkl&GDf-Y?7kz|Gexn|YPpE-D+SKOxJJY#siZZeq%>CmS7usx#@y_s>yJ-lc?u z&HHZhvWA+Frz2cr)@So`iqUBou?dJyxp$77a*Y&^Bw_)nKM@X2NU5yvNf)?urFjlv z;xbL9+!B+n!hc63>DyxM@~5iQo7_uxgi) zn~YG3cC)#ap_|4fxj#KPH7F`o7rCZC&+gF9#pErcOdcy18ddl_uE=!LIukc_7`jP$ z@nw4GI$v8V>*uBCrCI|oiHQI%UoRQu7ZC@L*L9Z@r;sz;wQx?QOfE7%na!A{a`e-f^6{RiGHzwp(UJzvNXp_O^OD*0dtp3M z%gj*6m+yFFmY->1Jj!m|zI?_bqadu?#7ncJ3`k=XgjAI#%Bp56OI0!lljOw)>bgzT zd5pq~s=PLLdZ3KE_h-vam->=REvcTNq(*Apl8nYCl#7+3{c(p@uOk%C_y#V=-U-Pc zmy(>0m^7Z4@W+&5DIAo-fsk_f{AETEJ5{E$M@*c3@Vd14On0YynWH{_FdVo!772&m zk=);`1f$hoCy{VmjwJ$eB&HqzRyTV`ly2spYIW}!^vnKa^t#^BkSyzR)F(@wQ?2z` z0#d$-_|!a}CRdaC;Aa1J)89T6cSJ_xkqJqbl=O*?$wWLEDUVDlgF;Xxs3;Zn?e#fg z(wG#Jlza}^Bxo?yTbtpXEY`_h(+08IWG&-v=BY(Er$TipIn#hGK~qYxjW*jI0#i*-ji za$Phk#RmNG)QaPjeQmol^t7BBr9ZeI& zwm72dL}xO&e=Nnfzf8k6KwT( z+Wce9OUZ+pwA6buAMP5SS$XmW^lDo@fGS8tfrOg;ByV6!LVHCvHNHdYNFm-^t+ zTZa{E7dbPJ2hUc8ir~ zanPSWo4Y9gv$;7dnj`W-3R=-T3;N*MoaGrOzgSdYg;MLxCTN6O6mW_b+j1+cw891} zxUJA-g(0EB;@M9I?zN`Rp{a-B?y{!a_&2QDLAJkHwS#P}1=^vwNP&7NuGnHbRsbgo z;K!*v8O?<-W|}L*_U=M>Zy_8jgp-A^)CPkhM@@fFEog)NHn`gcpR&QrHn_bAo)9@| z`m__Lir{n+yj%p8#c)gkqLsk6M537pHq|7+Zu3UC6t$!6b}5;SUF=Lh*OJdO_@k5dA`ke%>Rp f3nBW;Fao;}qF-nr3nBW~AVmLvb{2@JZbJe9#1pEk From 82a2920470460ae9b17c256df0014269ea8981b1 Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Fri, 10 Jan 2025 11:05:37 +0200 Subject: [PATCH 15/25] refactor: Remove redundant check --- src/linter/ui5Types/SourceFileLinter.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/linter/ui5Types/SourceFileLinter.ts b/src/linter/ui5Types/SourceFileLinter.ts index 4fbcb6cf8..bb3aeca34 100644 --- a/src/linter/ui5Types/SourceFileLinter.ts +++ b/src/linter/ui5Types/SourceFileLinter.ts @@ -1227,13 +1227,7 @@ export default class SourceFileLinter { const isRegisteredAsUi5Module = ambientModules.some((module) => module.name === `"${moduleName}"`); - // Check if it has been imported as a module explicitly - const hasAmbientModuleExplicitImport = - this.sourceFile.statements.filter(ts.isImportDeclaration) - .some((importNode) => - ts.isStringLiteral(importNode.moduleSpecifier) && importNode.moduleSpecifier.text === moduleName); - - if (isRegisteredAsUi5Module && !hasAmbientModuleExplicitImport) { + if (isRegisteredAsUi5Module) { this.#reporter.addMessage(MESSAGE.NO_EXPORTED_VALUES_BY_LIB, { module: [ exprNode?.getText(), From 9a39a75df78acd0418b5c0fc9f973065c3db1bdf Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Fri, 10 Jan 2025 11:10:43 +0200 Subject: [PATCH 16/25] test: Remove redundant tests --- .../NoGlobals/NoExportedLibValues_Negative.js | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js diff --git a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js deleted file mode 100644 index beddd1901..000000000 --- a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js +++ /dev/null @@ -1,19 +0,0 @@ -sap.ui.define([ - "sap/ui/unified/library", - "sap/ui/core/library", - "sap/ui/unified/CalendarDayType", - "sap/ui/unified/DateRange", - "sap/ui/unified/DateTypeRange", - "sap/ui/core/tmpl/DOMAttribute", -], - function (unifiedLibrary, coreLibrary, CalendarDayType, DateRange, DateTypeRange, DOMAttribute) { - "use strict"; - - var CalendarDayTypeLib = unifiedLibrary.CalendarDayType, - DateRange = unifiedLibrary["DateRange"], - DateTypeRangeLib = unifiedLibrary.DateTypeRange, - DOMAttribute = coreLibrary.tmpl.DOMAttribute, - DOMAttribute2 = coreLibrary["tmpl"].DOMAttribute, - DOMAttribute3 = coreLibrary["tmpl"]["DOMAttribute"], - DOMAttribute4 = coreLibrary.tmpl["DOMAttribute"] -}); From ccf738055763ac1e6c9b11c263817ea4ba8c14e0 Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Fri, 10 Jan 2025 14:51:45 +0200 Subject: [PATCH 17/25] fix: Properly detect non exported elements --- src/linter/ui5Types/SourceFileLinter.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/linter/ui5Types/SourceFileLinter.ts b/src/linter/ui5Types/SourceFileLinter.ts index bb3aeca34..c95489604 100644 --- a/src/linter/ui5Types/SourceFileLinter.ts +++ b/src/linter/ui5Types/SourceFileLinter.ts @@ -1216,23 +1216,26 @@ export default class SourceFileLinter { return; } + const varName = extractVarName(node); const moduleName = [ potentialLibImport.replace("/library", ""), ...namespace, - extractVarName(node), + varName, ].join("/"); // Check if the module is registered within ambient modules const ambientModules = this.checker.getAmbientModules(); + const libAmbientModule = ambientModules.find((module) => + module.name === `"${potentialLibImport}"`); const isRegisteredAsUi5Module = ambientModules.some((module) => module.name === `"${moduleName}"`); - if (isRegisteredAsUi5Module) { + if (isRegisteredAsUi5Module && !libAmbientModule?.exports?.has(varName as ts.__String)) { this.#reporter.addMessage(MESSAGE.NO_EXPORTED_VALUES_BY_LIB, { module: [ exprNode?.getText(), ...namespace, - extractVarName(node), + varName, ].join("/"), namespace: moduleName, }, From 46c768308006195fa46685ff742160c5c064bbee Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Fri, 10 Jan 2025 14:57:36 +0200 Subject: [PATCH 18/25] test: Update snapshots with the correct findings --- .../linter/rules/snapshots/Directives.ts.md | 68 +----------------- .../linter/rules/snapshots/Directives.ts.snap | Bin 1490 -> 1158 bytes .../rules/snapshots/NoDeprecatedApi.ts.md | 67 ++--------------- .../rules/snapshots/NoDeprecatedApi.ts.snap | Bin 18386 -> 18026 bytes .../linter/rules/snapshots/NoGlobals.ts.md | 42 +---------- .../linter/rules/snapshots/NoGlobals.ts.snap | Bin 2798 -> 2494 bytes test/lib/linter/snapshots/linter.ts.md | 18 +---- test/lib/linter/snapshots/linter.ts.snap | Bin 23115 -> 22921 bytes 8 files changed, 9 insertions(+), 186 deletions(-) diff --git a/test/lib/linter/rules/snapshots/Directives.ts.md b/test/lib/linter/rules/snapshots/Directives.ts.md index 91203da01..60652c68a 100644 --- a/test/lib/linter/rules/snapshots/Directives.ts.md +++ b/test/lib/linter/rules/snapshots/Directives.ts.md @@ -11,7 +11,7 @@ Generated by [AVA](https://avajs.dev). [ { coverageInfo: [], - errorCount: 13, + errorCount: 9, fatalErrorCount: 0, filePath: 'Directives.js', messages: [ @@ -47,14 +47,6 @@ Generated by [AVA](https://avajs.dev). ruleId: 'no-deprecated-api', severity: 2, }, - { - column: 10, - line: 65, - message: 'Access of a module (coreLib/MessageType) not exported by a library', - messageDetails: 'Please import the module itself (sap/ui/core/MessageType) because it is no longer exported by the library', - ruleId: 'no-implicit-globals', - severity: 2, - }, { column: 2, line: 68, @@ -63,14 +55,6 @@ Generated by [AVA](https://avajs.dev). ruleId: 'no-deprecated-api', severity: 2, }, - { - column: 10, - line: 68, - message: 'Access of a module (coreLib/MessageType) not exported by a library', - messageDetails: 'Please import the module itself (sap/ui/core/MessageType) because it is no longer exported by the library', - ruleId: 'no-implicit-globals', - severity: 2, - }, { column: 2, line: 72, @@ -79,22 +63,6 @@ Generated by [AVA](https://avajs.dev). ruleId: 'no-deprecated-api', severity: 2, }, - { - column: 10, - line: 72, - message: 'Access of a module (coreLib/MessageType) not exported by a library', - messageDetails: 'Please import the module itself (sap/ui/core/MessageType) because it is no longer exported by the library', - ruleId: 'no-implicit-globals', - severity: 2, - }, - { - column: 12, - line: 93, - message: 'Access of a module (mobileLib/InputType) not exported by a library', - messageDetails: 'Please import the module itself (sap/m/InputType) because it is no longer exported by the library', - ruleId: 'no-implicit-globals', - severity: 2, - }, { column: 6, line: 108, @@ -131,7 +99,7 @@ Generated by [AVA](https://avajs.dev). [ { coverageInfo: [], - errorCount: 13, + errorCount: 9, fatalErrorCount: 0, filePath: 'Directives.ts', messages: [ @@ -167,14 +135,6 @@ Generated by [AVA](https://avajs.dev). ruleId: 'no-deprecated-api', severity: 2, }, - { - column: 9, - line: 73, - message: 'Access of a module (coreLib/MessageType) not exported by a library', - messageDetails: 'Please import the module itself (sap/ui/core/MessageType) because it is no longer exported by the library', - ruleId: 'no-implicit-globals', - severity: 2, - }, { column: 1, line: 76, @@ -183,14 +143,6 @@ Generated by [AVA](https://avajs.dev). ruleId: 'no-deprecated-api', severity: 2, }, - { - column: 9, - line: 76, - message: 'Access of a module (coreLib/MessageType) not exported by a library', - messageDetails: 'Please import the module itself (sap/ui/core/MessageType) because it is no longer exported by the library', - ruleId: 'no-implicit-globals', - severity: 2, - }, { column: 1, line: 80, @@ -199,22 +151,6 @@ Generated by [AVA](https://avajs.dev). ruleId: 'no-deprecated-api', severity: 2, }, - { - column: 9, - line: 80, - message: 'Access of a module (coreLib/MessageType) not exported by a library', - messageDetails: 'Please import the module itself (sap/ui/core/MessageType) because it is no longer exported by the library', - ruleId: 'no-implicit-globals', - severity: 2, - }, - { - column: 11, - line: 101, - message: 'Access of a module (mobileLib/InputType) not exported by a library', - messageDetails: 'Please import the module itself (sap/m/InputType) because it is no longer exported by the library', - ruleId: 'no-implicit-globals', - severity: 2, - }, { column: 5, line: 115, diff --git a/test/lib/linter/rules/snapshots/Directives.ts.snap b/test/lib/linter/rules/snapshots/Directives.ts.snap index 80677a9472e891bb2994f9d98c58fd96b1f97640..fa260af46b48e0b61a869bebfcc4615884411383 100644 GIT binary patch literal 1158 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 N|36ztGT`zb0st}PB(MMg literal 18386 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 N{|^_rcaw)K0s!^()MEeu diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.md b/test/lib/linter/rules/snapshots/NoGlobals.ts.md index 060228b32..9b68f9b3a 100644 --- a/test/lib/linter/rules/snapshots/NoGlobals.ts.md +++ b/test/lib/linter/rules/snapshots/NoGlobals.ts.md @@ -11,18 +11,10 @@ Generated by [AVA](https://avajs.dev). [ { coverageInfo: [], - errorCount: 7, + errorCount: 6, fatalErrorCount: 0, filePath: 'NoExportedLibValues.js', messages: [ - { - column: 39, - line: 5, - message: 'Access of a module (unifiedLibrary/CalendarDayType) not exported by a library', - messageDetails: 'Please import the module itself (sap/ui/unified/CalendarDayType) because it is no longer exported by the library', - ruleId: 'no-implicit-globals', - severity: 2, - }, { column: 30, line: 6, @@ -76,38 +68,6 @@ Generated by [AVA](https://avajs.dev). }, ] -## General: NoExportedLibValues_Negative.js - -> Snapshot 1 - - [ - { - coverageInfo: [], - errorCount: 2, - fatalErrorCount: 0, - filePath: 'NoExportedLibValues_Negative.js', - messages: [ - { - column: 2, - line: 4, - message: 'Deprecated access of enum pseudo module \'sap/ui/unified/CalendarDayType\'', - messageDetails: 'Migrating Access to Pseudo Modules (https://ui5.sap.com/#/topic/00737d6c1b864dc3ab72ef56611491c4)', - ruleId: 'no-pseudo-modules', - severity: 2, - }, - { - column: 2, - line: 7, - message: 'Import of deprecated module \'sap/ui/core/tmpl/DOMAttribute\'', - messageDetails: 'Deprecated test message', - ruleId: 'no-deprecated-api', - severity: 2, - }, - ], - warningCount: 0, - }, - ] - ## General: NoGlobals.js > Snapshot 1 diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.snap b/test/lib/linter/rules/snapshots/NoGlobals.ts.snap index da3da339f503901538135ba90da490412f71c236..ed750f28066f88e97a90119681f38b4ca8d5e519 100644 GIT binary patch literal 2494 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 A761SM diff --git a/test/lib/linter/snapshots/linter.ts.md b/test/lib/linter/snapshots/linter.ts.md index 992cdfa44..74a6f7a0c 100644 --- a/test/lib/linter/snapshots/linter.ts.md +++ b/test/lib/linter/snapshots/linter.ts.md @@ -2362,7 +2362,7 @@ Generated by [AVA](https://avajs.dev). }, { coverageInfo: [], - errorCount: 20, + errorCount: 18, fatalErrorCount: 0, filePath: 'src/sap/ui/core/FancyText.js', messages: [ @@ -2374,22 +2374,6 @@ Generated by [AVA](https://avajs.dev). ruleId: 'no-deprecated-api', severity: 2, }, - { - column: 34, - line: 3, - message: 'Access of a module (library/DateTimeInputType) not exported by a library', - messageDetails: 'Please import the module itself (sap/m/DateTimeInputType) because it is no longer exported by the library', - ruleId: 'no-implicit-globals', - severity: 2, - }, - { - column: 26, - line: 4, - message: 'Access of a module (library/FrameType) not exported by a library', - messageDetails: 'Please import the module itself (sap/m/FrameType) because it is no longer exported by the library', - ruleId: 'no-implicit-globals', - severity: 2, - }, { column: 17, line: 8, diff --git a/test/lib/linter/snapshots/linter.ts.snap b/test/lib/linter/snapshots/linter.ts.snap index f2061745f26399e1b5d4cd14407a5ce6cb3fe4ed..4c5c6d11620e529d0a97a4fb4d5b79a3e63a8ece 100644 GIT binary patch literal 22921 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 literal 23115 zcmafaWl$Z_(k)KVB)AjY-JReL!QFzpyBs{YySqEV?I6M3{T$pm!JU_TzxrOie{ZU% zYr1RKo~fzYGria9^e^aV3R*s3!shQU9D?TOVRGGOp-TfVQ{9;I z&t&54_TVOu#D!NnA3QI;^IWH0XS@${g|-a)Y>ke~;^|G4SF3Y6l>X9vU+dD=y+{=& z8`(~v*-wTo6b|Hd1Liuk5v3`!=Q;wTp7X~n*jJzx`#II5g6MiU@KO*J%T_fE4N1xv z6{r=~s2Aq(Mtz`oaof=z=^^9^_Q7&$Erl`mTfW#@t7gkAH#awIYi#Dm<6N1`*~Xn? z!E`YF>!1(qP-q20VF0(<^PV-tjG#LUq17!TpILMsEn$JZKNT9+ zygwHoq7n`@#wz-r2k&SGoU}V04c}UW8L|P?G!Nnk+-`vB1^fn>MePtqWjh*ZaJSP@ zNTydf)eqE$peRez?Enpi;riX6VKGyU%EM89B>{N|5|Ziw#c+Y{^o^7NrO?6f0HMK zQ4;yVTTHbN;N zC&X@tv7^uOTT%O(19A;Jdup3|{nTHHXUbwI?dZ8;VY7W+fm}`1S57r9=kc!?E)t|Q zm61Z~3`}~=xw%xsZ$~GIw;OS9c?r@NTTSK@B_wNvsy1QeOCS4pByDJ(;p2MOYVqOersh@4Cr#J!4glT-`l?_VVjVYHdss^Cwt=`QGQ-UnDj6a@D^ zYWfGz?UR1$#Hutxmx*E_B1-Xj{eD5!v{Bn$dRcJ3ULGp0syJHAY^SX4@{*ds?VS>m zr=oq}RuZc_;)LTPrrJ-cDn?)ZY*w%J_l{ooOdtgyf~OfA=OlAc{(RbCosA258DBtFg>%0P5`8CeG!R*mHrlFH(#f{W=52@dS@-*9Xgofjp339d*One=b$W!5uc}+a(qqjOmdf{ojW#*{D zLB2W1zn4{UQEB7ZyA4N5uyucn+4&miY~{=U?^BdjxPV%o33hc1gfrwA+}s!ITYx!Z zEYJqQpuFB*#EV)J)Z~v|SReYD)W$mdX1$So-T0A+wJ14Xmzyp0BIThkyTL=II_403 zIww~eo6MBT?v7ync9Ka8bQ^`^$pYQaA(bhg1fP_W0Vy*J$59O|cn499I0ttoSw%XG zPn-IsP;PZVrYNriFdPfU3lhj>X3-9EtfiHpha}^55y}h%*l{JTSW#B zoES|}`%E+OM1Q>a7H0Sn(4%b}KCYB4iyUd@ASs(9U(UM$=IbcjhnMezhFQ3jt7+gS zTeh-fuJx-N234Y!@Y{e_hVmUeE?b^Qgg^RQIf1{y@~`*ks-3i*YToYm?W`yRmv05_ z47-BAF!*4GV`@;;KT?NP%U7y9Lc?0%udX~%y>yAd1%U+{)uFF%QR3)uG1VuBwtJcj zG1Wn5L7$=Xy?o7uzPtqoqC5&ih#<%i9#G#8Ntr~XlH--0CAeJb)z^DSzHzVv=502p z0Ew9$$TjC^FtDUsHdWend$oBZPOytF9=F>SK{Q-X?1B|IULz1?iOLt{DMdW|uNH7+ z9MYfbD>1aNNe}$N(%drP<1TAvo9=&V9_R7Ib~j&VAY5*EXp?S!vM#5=;#rygw0=N# z*Cg8Ir`p39!`o{Ku+H-6Q0>X7Gsvqo#F6YQHpH<_57c0hZ;>y@R)6WM!fYGJ)Z{e_ zo6!YJpSG_Vhch)UHf7dK*fp#pG@&uK0EM_8JJ1Yq3#D?sbf_oCLd`Q9XfT<_LTT8+ zTA5?|lePFd3CZv%O~$S`aLu4-9f(~T)D(y4M;83YcyLn1#%rEkI|CsJ⪙h+N_bq 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 Date: Fri, 10 Jan 2025 15:00:57 +0200 Subject: [PATCH 19/25] refactor: Exported values messaging --- src/linter/messages.ts | 7 ++++--- src/linter/ui5Types/SourceFileLinter.ts | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/linter/messages.ts b/src/linter/messages.ts index bc63bd68e..b4858d26d 100644 --- a/src/linter/messages.ts +++ b/src/linter/messages.ts @@ -576,9 +576,10 @@ export const MESSAGE_INFO = { severity: LintMessageSeverity.Error, ruleId: RULES["no-implicit-globals"], - message: ({module}: {module: string}) => `Access of a module (${module}) not exported by a library`, - details: ({namespace}: {namespace: string}) => - `Please import the module itself (${namespace}) because it is no longer exported by the library`, + message: ({module, namespace, libraryName}: {module: string; namespace: string; libraryName: string}) => + `Access of module '${module}' (${namespace}) not exported by library '${libraryName}'`, + details: () => + `Please import the module itself directly instead of accessing it via the library module.`, }, } as const; diff --git a/src/linter/ui5Types/SourceFileLinter.ts b/src/linter/ui5Types/SourceFileLinter.ts index c95489604..d38575bd4 100644 --- a/src/linter/ui5Types/SourceFileLinter.ts +++ b/src/linter/ui5Types/SourceFileLinter.ts @@ -1238,6 +1238,7 @@ export default class SourceFileLinter { varName, ].join("/"), namespace: moduleName, + libraryName: potentialLibImport, }, (ts.isPropertyAccessExpression(node) ? node.name : node.argumentExpression)); } From d6e3f0f98c98e84a85eb3d3f9f03da7d3d87ea64 Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Fri, 10 Jan 2025 15:03:21 +0200 Subject: [PATCH 20/25] test: Update snapshots w/ the new messages --- .../linter/rules/snapshots/NoGlobals.ts.md | 24 +++++++++--------- .../linter/rules/snapshots/NoGlobals.ts.snap | Bin 2494 -> 2500 bytes 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.md b/test/lib/linter/rules/snapshots/NoGlobals.ts.md index 9b68f9b3a..ec2e1c84f 100644 --- a/test/lib/linter/rules/snapshots/NoGlobals.ts.md +++ b/test/lib/linter/rules/snapshots/NoGlobals.ts.md @@ -18,48 +18,48 @@ Generated by [AVA](https://avajs.dev). { column: 30, line: 6, - message: 'Access of a module (unifiedLibrary/DateRange) not exported by a library', - messageDetails: 'Please import the module itself (sap/ui/unified/DateRange) because it is no longer exported by the library', + message: 'Access of module \'unifiedLibrary/DateRange\' (sap/ui/unified/DateRange) not exported by library \'sap/ui/unified/library\'', + messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', severity: 2, }, { column: 34, line: 7, - message: 'Access of a module (unifiedLibrary/DateTypeRange) not exported by a library', - messageDetails: 'Please import the module itself (sap/ui/unified/DateTypeRange) because it is no longer exported by the library', + message: 'Access of module \'unifiedLibrary/DateTypeRange\' (sap/ui/unified/DateTypeRange) not exported by library \'sap/ui/unified/library\'', + messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', severity: 2, }, { column: 35, line: 8, - message: 'Access of a module (coreLibrary/tmpl/DOMAttribute) not exported by a library', - messageDetails: 'Please import the module itself (sap/ui/core/tmpl/DOMAttribute) because it is no longer exported by the library', + message: 'Access of module \'coreLibrary/tmpl/DOMAttribute\' (sap/ui/core/tmpl/DOMAttribute) not exported by library \'sap/ui/core/library\'', + messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', severity: 2, }, { column: 39, line: 9, - message: 'Access of a module (coreLibrary/tmpl/DOMAttribute) not exported by a library', - messageDetails: 'Please import the module itself (sap/ui/core/tmpl/DOMAttribute) because it is no longer exported by the library', + message: 'Access of module \'coreLibrary/tmpl/DOMAttribute\' (sap/ui/core/tmpl/DOMAttribute) not exported by library \'sap/ui/core/library\'', + messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', severity: 2, }, { column: 39, line: 10, - message: 'Access of a module (coreLibrary/tmpl/DOMAttribute) not exported by a library', - messageDetails: 'Please import the module itself (sap/ui/core/tmpl/DOMAttribute) because it is no longer exported by the library', + message: 'Access of module \'coreLibrary/tmpl/DOMAttribute\' (sap/ui/core/tmpl/DOMAttribute) not exported by library \'sap/ui/core/library\'', + messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', severity: 2, }, { column: 36, line: 11, - message: 'Access of a module (coreLibrary/tmpl/DOMAttribute) not exported by a library', - messageDetails: 'Please import the module itself (sap/ui/core/tmpl/DOMAttribute) because it is no longer exported by the library', + message: 'Access of module \'coreLibrary/tmpl/DOMAttribute\' (sap/ui/core/tmpl/DOMAttribute) not exported by library \'sap/ui/core/library\'', + messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', severity: 2, }, diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.snap b/test/lib/linter/rules/snapshots/NoGlobals.ts.snap index ed750f28066f88e97a90119681f38b4ca8d5e519..34c8a3fd880ca002e50cf1c515e6e3cfae0ade8d 100644 GIT binary patch literal 2500 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 Date: Fri, 10 Jan 2025 15:11:58 +0200 Subject: [PATCH 21/25] refactor: Restore the non exported negative examples --- .../NoGlobals/NoExportedLibValues_Negative.js | 20 +++++++++++++++ .../linter/rules/snapshots/NoGlobals.ts.md | 24 ++++++++++++++++++ .../linter/rules/snapshots/NoGlobals.ts.snap | Bin 2500 -> 2690 bytes 3 files changed, 44 insertions(+) create mode 100644 test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js diff --git a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js new file mode 100644 index 000000000..89375339e --- /dev/null +++ b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js @@ -0,0 +1,20 @@ +sap.ui.define( + [ + "sap/ui/unified/library", + "sap/ui/core/library", + // This ones are correct- elements, imported as modules + "sap/ui/unified/DateTypeRange", + "sap/ui/unified/CalendarDayType", + ], + function (unifiedLibrary, coreLibrary) { + "use strict"; + + // These are data types that are actually exported by the library + var CalendarAppointmentHeight = + unifiedLibrary.CalendarAppointmentHeight, + CalendarAppointmentRoundWidth = + unifiedLibrary.CalendarAppointmentRoundWidth, + ColorPickerMode = unifiedLibrary.ColorPickerMode, + ContentSwitcherAnimation = unifiedLibrary.ContentSwitcherAnimation; + } +); diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.md b/test/lib/linter/rules/snapshots/NoGlobals.ts.md index ec2e1c84f..e0bf2e1fb 100644 --- a/test/lib/linter/rules/snapshots/NoGlobals.ts.md +++ b/test/lib/linter/rules/snapshots/NoGlobals.ts.md @@ -68,6 +68,30 @@ Generated by [AVA](https://avajs.dev). }, ] +## General: NoExportedLibValues_Negative.js + +> Snapshot 1 + + [ + { + coverageInfo: [], + errorCount: 1, + fatalErrorCount: 0, + filePath: 'NoExportedLibValues_Negative.js', + messages: [ + { + column: 3, + line: 7, + message: 'Deprecated access of enum pseudo module \'sap/ui/unified/CalendarDayType\'', + messageDetails: 'Migrating Access to Pseudo Modules (https://ui5.sap.com/#/topic/00737d6c1b864dc3ab72ef56611491c4)', + ruleId: 'no-pseudo-modules', + severity: 2, + }, + ], + warningCount: 0, + }, + ] + ## General: NoGlobals.js > Snapshot 1 diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.snap b/test/lib/linter/rules/snapshots/NoGlobals.ts.snap index 34c8a3fd880ca002e50cf1c515e6e3cfae0ade8d..e2d2511e595fcfc30eeb89a0ad0c45264aa0c69d 100644 GIT binary patch literal 2690 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 Date: Fri, 10 Jan 2025 19:16:24 +0200 Subject: [PATCH 22/25] refactor: Update messages --- src/linter/ui5Types/SourceFileLinter.ts | 6 +++--- .../linter/rules/snapshots/NoGlobals.ts.md | 12 ++++++------ .../linter/rules/snapshots/NoGlobals.ts.snap | Bin 2690 -> 2695 bytes 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/linter/ui5Types/SourceFileLinter.ts b/src/linter/ui5Types/SourceFileLinter.ts index d38575bd4..c8c7c279b 100644 --- a/src/linter/ui5Types/SourceFileLinter.ts +++ b/src/linter/ui5Types/SourceFileLinter.ts @@ -1232,12 +1232,12 @@ export default class SourceFileLinter { if (isRegisteredAsUi5Module && !libAmbientModule?.exports?.has(varName as ts.__String)) { this.#reporter.addMessage(MESSAGE.NO_EXPORTED_VALUES_BY_LIB, { - module: [ + module: moduleName, + namespace: [ exprNode?.getText(), ...namespace, varName, - ].join("/"), - namespace: moduleName, + ].join("."), libraryName: potentialLibImport, }, (ts.isPropertyAccessExpression(node) ? node.name : node.argumentExpression)); diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.md b/test/lib/linter/rules/snapshots/NoGlobals.ts.md index e0bf2e1fb..895ecda89 100644 --- a/test/lib/linter/rules/snapshots/NoGlobals.ts.md +++ b/test/lib/linter/rules/snapshots/NoGlobals.ts.md @@ -18,7 +18,7 @@ Generated by [AVA](https://avajs.dev). { column: 30, line: 6, - message: 'Access of module \'unifiedLibrary/DateRange\' (sap/ui/unified/DateRange) not exported by library \'sap/ui/unified/library\'', + message: 'Access of module \'sap/ui/unified/DateRange\' (unifiedLibrary.DateRange) not exported by library \'sap/ui/unified/library\'', messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', severity: 2, @@ -26,7 +26,7 @@ Generated by [AVA](https://avajs.dev). { column: 34, line: 7, - message: 'Access of module \'unifiedLibrary/DateTypeRange\' (sap/ui/unified/DateTypeRange) not exported by library \'sap/ui/unified/library\'', + message: 'Access of module \'sap/ui/unified/DateTypeRange\' (unifiedLibrary.DateTypeRange) not exported by library \'sap/ui/unified/library\'', messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', severity: 2, @@ -34,7 +34,7 @@ Generated by [AVA](https://avajs.dev). { column: 35, line: 8, - message: 'Access of module \'coreLibrary/tmpl/DOMAttribute\' (sap/ui/core/tmpl/DOMAttribute) not exported by library \'sap/ui/core/library\'', + message: 'Access of module \'sap/ui/core/tmpl/DOMAttribute\' (coreLibrary.tmpl.DOMAttribute) not exported by library \'sap/ui/core/library\'', messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', severity: 2, @@ -42,7 +42,7 @@ Generated by [AVA](https://avajs.dev). { column: 39, line: 9, - message: 'Access of module \'coreLibrary/tmpl/DOMAttribute\' (sap/ui/core/tmpl/DOMAttribute) not exported by library \'sap/ui/core/library\'', + message: 'Access of module \'sap/ui/core/tmpl/DOMAttribute\' (coreLibrary.tmpl.DOMAttribute) not exported by library \'sap/ui/core/library\'', messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', severity: 2, @@ -50,7 +50,7 @@ Generated by [AVA](https://avajs.dev). { column: 39, line: 10, - message: 'Access of module \'coreLibrary/tmpl/DOMAttribute\' (sap/ui/core/tmpl/DOMAttribute) not exported by library \'sap/ui/core/library\'', + message: 'Access of module \'sap/ui/core/tmpl/DOMAttribute\' (coreLibrary.tmpl.DOMAttribute) not exported by library \'sap/ui/core/library\'', messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', severity: 2, @@ -58,7 +58,7 @@ Generated by [AVA](https://avajs.dev). { column: 36, line: 11, - message: 'Access of module \'coreLibrary/tmpl/DOMAttribute\' (sap/ui/core/tmpl/DOMAttribute) not exported by library \'sap/ui/core/library\'', + message: 'Access of module \'sap/ui/core/tmpl/DOMAttribute\' (coreLibrary.tmpl.DOMAttribute) not exported by library \'sap/ui/core/library\'', messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', severity: 2, diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.snap b/test/lib/linter/rules/snapshots/NoGlobals.ts.snap index e2d2511e595fcfc30eeb89a0ad0c45264aa0c69d..478cc98636af78faa565e922c6dace90899f50b1 100644 GIT binary patch delta 1761 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 DEsS~X delta 1756 zcmV<21|#{06@nEqK~_N^Q*L2!b7*gLAa*kf0{{wv%z*P{?FG(ySJAoicCWclx|#H0 zHB*G$ESy2;qsy@}SOR}DhCZ%)>(|n(>5(zbk=JO(gd9|dY%M*K(MNK3oEciJ8m6Pl z+{#zu(`qVUjT}rFM@RDBh(W}3NUg0u&-C3+x z!n9;wEN3d68X3Flz%IwJ^mxXZA((qx@pyT~Jly}YT>eSVl&fY*uKy*uB1>{DHn}b; zAy;%su6I?ge35@PRH{h3`ARvVIr>pKXSEhcEl9Q2FJR|FsyIK>Ksn%AOq0RI1 zBMVfvDW?QHUamyTlKxeZC;b%xuL@{XV66fVDX<~{`vawGt+MeQcn8Vp`^RM3k_pWX zMy(L)(#TAyXWaOpbp%mrkF5B#OqjgxAm@sz93py}1C|s=#gq4k&O~frJ8v0@DiItH7rfctoLO zDA#>SfhQFBrUK6>@Vo-QRN!R=UQytm3Mc`n3qVHz`UA5c*zA|HA={4$2Sf*Z-ld+hDGo%VR$VJtu?Tz2CniqbE^Cuncy2W@Shr38G)S< zxFLU1u3;5?Jpyk>peG7DqHx&X_bF;r1p~EEQwytW;qqEY)Rt>d1w(aETL)|FU|$`K z`&&dsjj3RBJ#^N?wtBd}9_;#Z4XI#v1N1k*o(9kw;EsmUji|5)u4#k~jc|1%n2qp2 zqYn}-f^2Mpi<{tZ6C7=V2b+A5+9Jq~Ww3vH8N`>t-OJ$7Wj;t<5oD|x_BF$iX81%i zJl5=k)E7bax4<z5`Bl!nZno(3T?TuR4F> z#ZGvu6WW)Kd$gW+lru(ZfNX=SU2qJ zh6lUhP!HVME7yi);Eq$=Q5AN@S{r!KC>GwgG7eOEHhm-yAR6qQpA7U55-!6jX13qY1 z5p??iymtU@8i3me;MoDVZxwuHl@Ge22>Rny@bgvh>ME!ogqsGTcL??k`Jmm!x(-2l z2u=*a=^=P+2)?}N5k;Oun)SjDDSB9X9Rz4LOEet z(`QNgXXmf}(V6+{Na_4lxt~LZ7EehxkJJn;HGR8Ook`tRr=&A!Ce?(NN~v*~&@#64 zDm-U8E!`AXPfEjaQ&~&xv*fKA-ICW%8;L$uH`G4&32y3nX)L2(8k;dZw7RcPO_-Tf z(yL?RQcX%nT2s0qlMBqm`f`75<_Zvzl;gS~=i(qcvcS{#qtBrYsC=>#3t>{G($acg z#z;82X=HgwWNasv(&Mq&gBOsB`Z82}bU|Xmt;90=yBG|mC}=1{!KW64f@8XoG>_fr zQqlLJ#Y0Bp1^JE4k`Y@}%c7|a6UP^XiEQidy4>&O;$dT188$w)Fz_^97u;zdODVg3qcUvhRXLQbG)u3Hy605%x2uf94%< yP7IXZ?eQO9IhUg?u`?38x!I&eJ*ru{H)nT$C%btYo3j)NYXJylIUWmfJ^%pVBXBqX From c6bde70fb42dffdae57de88ad511ac9697b56a55 Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Mon, 13 Jan 2025 13:42:03 +0200 Subject: [PATCH 23/25] fix: Resolve nested namespaces --- src/linter/ui5Types/SourceFileLinter.ts | 14 +++++++++- .../rules/NoGlobals/NoExportedLibValues.js | 28 +++++++++++-------- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/linter/ui5Types/SourceFileLinter.ts b/src/linter/ui5Types/SourceFileLinter.ts index c8c7c279b..ee7750875 100644 --- a/src/linter/ui5Types/SourceFileLinter.ts +++ b/src/linter/ui5Types/SourceFileLinter.ts @@ -1230,7 +1230,19 @@ export default class SourceFileLinter { const isRegisteredAsUi5Module = ambientModules.some((module) => module.name === `"${moduleName}"`); - if (isRegisteredAsUi5Module && !libAmbientModule?.exports?.has(varName as ts.__String)) { + let isModuleExported = true; + let libExports = libAmbientModule?.exports ?? new Map(); + for (const moduleChunk of [...namespace, varName]) { + if (!libExports.has(moduleChunk)) { + isModuleExported = false; + break; + } + + const exportMap = libExports.get(moduleChunk) as ts.Symbol | undefined; + libExports = exportMap?.exports ?? new Map(); + } + + if (isRegisteredAsUi5Module && !isModuleExported) { this.#reporter.addMessage(MESSAGE.NO_EXPORTED_VALUES_BY_LIB, { module: moduleName, namespace: [ diff --git a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js index 09c6bcb98..240660aeb 100644 --- a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js +++ b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js @@ -1,12 +1,16 @@ -sap.ui.define(["sap/ui/unified/library", "sap/ui/core/library"], - function (unifiedLibrary, coreLibrary) { - "use strict"; - - var CalendarDayType = unifiedLibrary.CalendarDayType, - DateRange = unifiedLibrary["DateRange"], - DateTypeRange = unifiedLibrary.DateTypeRange, - DOMAttribute = coreLibrary.tmpl.DOMAttribute, - DOMAttribute2 = coreLibrary["tmpl"].DOMAttribute, - DOMAttribute3 = coreLibrary["tmpl"]["DOMAttribute"], - DOMAttribute4 = coreLibrary.tmpl["DOMAttribute"]; -}); +sap.ui.define( + ["sap/ui/unified/library", "sap/ui/core/library", "sap/ui/comp/library"], + function (unifiedLibrary, coreLibrary, compLibrary) { + "use strict"; + + var SelectOptionSign = compLibrary.smartfilterbar.SelectOptionSign; + + var CalendarDayType = unifiedLibrary.CalendarDayType, + DateRange = unifiedLibrary["DateRange"], + DateTypeRange = unifiedLibrary.DateTypeRange, + DOMAttribute = coreLibrary.tmpl.DOMAttribute, + DOMAttribute2 = coreLibrary["tmpl"].DOMAttribute, + DOMAttribute3 = coreLibrary["tmpl"]["DOMAttribute"], + DOMAttribute4 = coreLibrary.tmpl["DOMAttribute"]; + } +); From 734d1fb3f18864e72e3aede3aca6c9497d468276 Mon Sep 17 00:00:00 2001 From: Yavor Ivanov Date: Mon, 13 Jan 2025 13:48:42 +0200 Subject: [PATCH 24/25] test: Update snapshots --- .../linter/rules/snapshots/NoGlobals.ts.md | 24 +++++++++--------- .../linter/rules/snapshots/NoGlobals.ts.snap | Bin 2695 -> 2700 bytes 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.md b/test/lib/linter/rules/snapshots/NoGlobals.ts.md index 895ecda89..0c30d88c7 100644 --- a/test/lib/linter/rules/snapshots/NoGlobals.ts.md +++ b/test/lib/linter/rules/snapshots/NoGlobals.ts.md @@ -16,48 +16,48 @@ Generated by [AVA](https://avajs.dev). filePath: 'NoExportedLibValues.js', messages: [ { - column: 30, - line: 6, + column: 31, + line: 9, message: 'Access of module \'sap/ui/unified/DateRange\' (unifiedLibrary.DateRange) not exported by library \'sap/ui/unified/library\'', messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', severity: 2, }, { - column: 34, - line: 7, + column: 35, + line: 10, message: 'Access of module \'sap/ui/unified/DateTypeRange\' (unifiedLibrary.DateTypeRange) not exported by library \'sap/ui/unified/library\'', messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', severity: 2, }, { - column: 35, - line: 8, + column: 36, + line: 11, message: 'Access of module \'sap/ui/core/tmpl/DOMAttribute\' (coreLibrary.tmpl.DOMAttribute) not exported by library \'sap/ui/core/library\'', messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', severity: 2, }, { - column: 39, - line: 9, + column: 40, + line: 12, message: 'Access of module \'sap/ui/core/tmpl/DOMAttribute\' (coreLibrary.tmpl.DOMAttribute) not exported by library \'sap/ui/core/library\'', messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', severity: 2, }, { - column: 39, - line: 10, + column: 40, + line: 13, message: 'Access of module \'sap/ui/core/tmpl/DOMAttribute\' (coreLibrary.tmpl.DOMAttribute) not exported by library \'sap/ui/core/library\'', messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', severity: 2, }, { - column: 36, - line: 11, + column: 37, + line: 14, message: 'Access of module \'sap/ui/core/tmpl/DOMAttribute\' (coreLibrary.tmpl.DOMAttribute) not exported by library \'sap/ui/core/library\'', messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.snap b/test/lib/linter/rules/snapshots/NoGlobals.ts.snap index 478cc98636af78faa565e922c6dace90899f50b1..8741cbf6fce0d1497aa7b1908d3a626ef9f5e1a3 100644 GIT binary patch delta 2628 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 w8u$&+Az Date: Mon, 13 Jan 2025 15:51:26 +0200 Subject: [PATCH 25/25] refactor: Move sample to the negative test --- .../rules/NoGlobals/NoExportedLibValues.js | 6 ++---- .../NoGlobals/NoExportedLibValues_Negative.js | 7 +++++-- .../linter/rules/snapshots/NoGlobals.ts.md | 14 +++++++------- .../linter/rules/snapshots/NoGlobals.ts.snap | Bin 2700 -> 2696 bytes 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js index 240660aeb..5df779f97 100644 --- a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js +++ b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues.js @@ -1,10 +1,8 @@ sap.ui.define( - ["sap/ui/unified/library", "sap/ui/core/library", "sap/ui/comp/library"], - function (unifiedLibrary, coreLibrary, compLibrary) { + ["sap/ui/unified/library", "sap/ui/core/library"], + function (unifiedLibrary, coreLibrary) { "use strict"; - var SelectOptionSign = compLibrary.smartfilterbar.SelectOptionSign; - var CalendarDayType = unifiedLibrary.CalendarDayType, DateRange = unifiedLibrary["DateRange"], DateTypeRange = unifiedLibrary.DateTypeRange, diff --git a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js index 89375339e..9d3cf89bb 100644 --- a/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js +++ b/test/fixtures/linter/rules/NoGlobals/NoExportedLibValues_Negative.js @@ -2,14 +2,17 @@ sap.ui.define( [ "sap/ui/unified/library", "sap/ui/core/library", + "sap/ui/comp/library", // This ones are correct- elements, imported as modules "sap/ui/unified/DateTypeRange", "sap/ui/unified/CalendarDayType", ], - function (unifiedLibrary, coreLibrary) { + function (unifiedLibrary, coreLibrary, compLibrary) { "use strict"; - // These are data types that are actually exported by the library + // These are data types that are actually exported by the library + var SelectOptionSign = compLibrary.smartfilterbar.SelectOptionSign; + var CalendarAppointmentHeight = unifiedLibrary.CalendarAppointmentHeight, CalendarAppointmentRoundWidth = diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.md b/test/lib/linter/rules/snapshots/NoGlobals.ts.md index 0c30d88c7..708e9c9ef 100644 --- a/test/lib/linter/rules/snapshots/NoGlobals.ts.md +++ b/test/lib/linter/rules/snapshots/NoGlobals.ts.md @@ -17,7 +17,7 @@ Generated by [AVA](https://avajs.dev). messages: [ { column: 31, - line: 9, + line: 7, message: 'Access of module \'sap/ui/unified/DateRange\' (unifiedLibrary.DateRange) not exported by library \'sap/ui/unified/library\'', messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', @@ -25,7 +25,7 @@ Generated by [AVA](https://avajs.dev). }, { column: 35, - line: 10, + line: 8, message: 'Access of module \'sap/ui/unified/DateTypeRange\' (unifiedLibrary.DateTypeRange) not exported by library \'sap/ui/unified/library\'', messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', @@ -33,7 +33,7 @@ Generated by [AVA](https://avajs.dev). }, { column: 36, - line: 11, + line: 9, message: 'Access of module \'sap/ui/core/tmpl/DOMAttribute\' (coreLibrary.tmpl.DOMAttribute) not exported by library \'sap/ui/core/library\'', messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', @@ -41,7 +41,7 @@ Generated by [AVA](https://avajs.dev). }, { column: 40, - line: 12, + line: 10, message: 'Access of module \'sap/ui/core/tmpl/DOMAttribute\' (coreLibrary.tmpl.DOMAttribute) not exported by library \'sap/ui/core/library\'', messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', @@ -49,7 +49,7 @@ Generated by [AVA](https://avajs.dev). }, { column: 40, - line: 13, + line: 11, message: 'Access of module \'sap/ui/core/tmpl/DOMAttribute\' (coreLibrary.tmpl.DOMAttribute) not exported by library \'sap/ui/core/library\'', messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', @@ -57,7 +57,7 @@ Generated by [AVA](https://avajs.dev). }, { column: 37, - line: 14, + line: 12, message: 'Access of module \'sap/ui/core/tmpl/DOMAttribute\' (coreLibrary.tmpl.DOMAttribute) not exported by library \'sap/ui/core/library\'', messageDetails: 'Please import the module itself directly instead of accessing it via the library module.', ruleId: 'no-implicit-globals', @@ -81,7 +81,7 @@ Generated by [AVA](https://avajs.dev). messages: [ { column: 3, - line: 7, + line: 8, message: 'Deprecated access of enum pseudo module \'sap/ui/unified/CalendarDayType\'', messageDetails: 'Migrating Access to Pseudo Modules (https://ui5.sap.com/#/topic/00737d6c1b864dc3ab72ef56611491c4)', ruleId: 'no-pseudo-modules', diff --git a/test/lib/linter/rules/snapshots/NoGlobals.ts.snap b/test/lib/linter/rules/snapshots/NoGlobals.ts.snap index 8741cbf6fce0d1497aa7b1908d3a626ef9f5e1a3..9caa3fae342e85479f581915717492f96dcc6cbd 100644 GIT binary patch literal 2696 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 Cz)}7H literal 2700 zcmV;73Ul>ARzV_P00000000B+nrmzvR~5&9chF+-zl?vu8LLo|3k$O-S4Gz}jP)W$4Dl?01G|(HNLT zV^~x_CE%+9o)Pf8fS(F@Nx<*KZ2qgf{D-pq|4n51j|ve}D2SrFrjj)ucg;Z7{FQ4~ zWzFRQ5W(#G4+Y@H089tqkpQf%f+wrsr7DkX!P&BfMfJa`AP|J!AnXjni$S5+^+k}>pgT_#7yG)G>e z8543)9m-$Zug5LTnvNBRR;z~Ts4~Cu)%diU%H2}(wEXo!k6ZP5x5lKS=_$K#`S8J% z)NHBhQ|^;hXHpit)E!%<#?_>5$%K=dR&~R6q?UB&p=D>J8xyMTs7G}z3oH1OgU7sl zTA7sGn=Jg>Y?$lxsdP$D=+3%{lo{7j-arl8@~E_QXFAWbG7p{l%jgvG(dn*v>2%$6 zx|~+U;U&H1qt``c^osiEb>~_2N|=@$ai-F#k+G`|>~b7Sk7pcLFn6G!mOCDsIqt7m z_PPJhat)P{t9D7Q|0TKVmgHJ&at)M`tA0tYcU7)Jkv3GWNW1w;IiWfFQ8{O|7Dz2f zwbn0S=X|TRTh6;$6P2mfR{GGE_3|SNRJJLn1U%taqUA{ciYSo&s({x7G%B!Gfrk}X z5rF-H^0k(4dUh8u6ns2~nX2k2| zxlo@oIM;M8NN_d^7@lu%9yssd^yXUU8Jx8{j4_0*4hyC}1cst-yT>d`f{w70QNk-4_*jQh{$M@T>waDDVpfUQysx1^%Ic5`ek@ zbOfM3F#CbcUO5|b{g^z0fnsOotw6Cev#u)FnTZNa6+w+>euMzUi7ZS#xcW?5m?f-0Ygstoe{@)@IG`xn^C~e8V;Cv$yBQ)`SY4j)#h# zo(dH`eKAz@w7t6M={40wPmfm@J^ev-(bGV<=;?dHMNg;0MNhvT&UqRZ!9R!L^)R&7 zz@{3w%G=DT@^)l`Z`Q!SYhYyrc1GZah+o4h_(lZYi9k;jc0}Q@x9?NZs0s#Zp{5pA z*TUtskf`-*Pz6JEP+JFU>tJ6UjC)%|C5@?Ib3Js{!?t?3z8>s)zlKz>y8-$eU{3>R z4RA+8`9@S&1lKgehDNx$5zIz-u+amFmOwT(!NpB*xCxFn!9z_RNNovZ$1>Qx4C2e+ z?q%@UG7qG#1TxkP`PsN|Ti}`&uv*~LE$~!}2hvai+1CmOTOr*F zCtBfjs|V6p0@>LHd)gq;2KThV=h{4wrV_{{?XasIw05|w9Zt4;Aj?X6i#t1DPX}ln za7PEc&;chp;hUWvXiEw7m!0rZC%oMW?aSe&<L)~zw2kz|gK-){8pYMUkd*Hbqc)16*t%QHBgaOq9 z?I?j>rot5}=qlW=!f#c0q8EPL>w$KbK>yMUfA58sK3Lxe5A?zQe#rEDpvz03kMzUI zet5bce%=qUi{P&p!SVqQw5tTVeE{A&05=W5?E~=K0NlR{zP!o8|@950@b)q8QqfCP8*3nRX5Z=_X%$5 zd1)-8UmBY+JhZy6PfeJaR5Dw~#-*B+jSM<_Zvzl;gS~=i(qYvcS{# zqR(MBMEOJ|7Q&=VrKR=0jFE73)5!6V$kQT+ovvYR$cLvoVH#DbW zyEBes8s611_nwY&k})$o6PFgxW3&4^`F*8Bdq?w|Nw#WQ>aK%(?U;J4lXR!`mo%xI zCO)kOamhS2nIjKglBses`Sd}=rM@zi?P)AYRXM4AYI3p7|0^_ieZ3@7pd)co=0k1=j1Bu+N}$7%KfZ|+y4Us9#`XW GJ^%p0{8d!|