From d8444218af69c64e312bcfa32ea9d45e8ec3cef9 Mon Sep 17 00:00:00 2001 From: Joshua Feingold Date: Thu, 14 Aug 2025 09:56:58 -0500 Subject: [PATCH 1/7] NEW @W-17977608@ CSV output format for rules --- package-lock.json | 2 +- .../code-analyzer-core/src/output-format.ts | 5 +- .../output-formats/rules/csv-rules-format.ts | 47 ++++++++++++++++++ .../test/output-format.test.ts | 31 +++++++++++- packages/code-analyzer-core/test/stubs.ts | 35 +++++++++++++ .../multipleRules.goldfile.csv | 10 ++++ ...ectionWithNewlineDescriptions.goldfile.csv | 4 ++ .../zeroRules.goldfile.csv | 1 + .../sfge-08-01-2025-1.log.gz | Bin 0 -> 7702 bytes .../sfge-08-12-2025-1.log.gz | Bin 0 -> 19129 bytes 10 files changed, 132 insertions(+), 3 deletions(-) create mode 100644 packages/code-analyzer-core/src/output-formats/rules/csv-rules-format.ts create mode 100644 packages/code-analyzer-core/test/test-data/expectedOutputFiles/multipleRules.goldfile.csv create mode 100644 packages/code-analyzer-core/test/test-data/expectedOutputFiles/ruleSelectionWithNewlineDescriptions.goldfile.csv create mode 100644 packages/code-analyzer-core/test/test-data/expectedOutputFiles/zeroRules.goldfile.csv create mode 100644 packages/code-analyzer-sfge-engine/sfge-08-01-2025-1.log.gz create mode 100644 packages/code-analyzer-sfge-engine/sfge-08-12-2025-1.log.gz diff --git a/package-lock.json b/package-lock.json index 880d8f66..c4a23148 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11168,7 +11168,7 @@ }, "packages/code-analyzer-sfge-engine": { "name": "@salesforce/code-analyzer-sfge-engine", - "version": "0.10.0", + "version": "0.11.0-SNAPSHOT", "license": "BSD-3-Clause", "dependencies": { "@salesforce/code-analyzer-engine-api": "0.27.0", diff --git a/packages/code-analyzer-core/src/output-format.ts b/packages/code-analyzer-core/src/output-format.ts index fea12b6f..2cf24685 100644 --- a/packages/code-analyzer-core/src/output-format.ts +++ b/packages/code-analyzer-core/src/output-format.ts @@ -1,10 +1,11 @@ import { Clock, RealClock } from '@salesforce/code-analyzer-engine-api/utils'; import { CsvRunResultsFormatter } from "./output-formats/results/csv-run-results-format"; -import { HtmlRunResultsFormatter } from "./output-formats/results/html-run-results-format"; +import { HtmlRunResultsFormatter} from "./output-formats/results/html-run-results-format"; import { JsonRunResultsFormatter } from "./output-formats/results/json-run-results-format"; import { SarifRunResultsFormatter } from "./output-formats/results/sarif-run-results-format"; import { XmlRunResultsFormatter } from "./output-formats/results/xml-run-results-format"; import { JsonRulesFormatter } from "./output-formats/rules/json-rules-format"; +import { CsvRulesFormatter } from "./output-formats/rules/csv-rules-format"; import { RunResults } from "./results"; import { RuleSelection } from "./rules"; @@ -74,6 +75,8 @@ export abstract class RuleSelectionFormatter { switch (format) { case OutputFormat.JSON: return new JsonRulesFormatter(); + case OutputFormat.CSV: + return new CsvRulesFormatter(); default: throw new Error(`Unsupported output format: ${format}`); } diff --git a/packages/code-analyzer-core/src/output-formats/rules/csv-rules-format.ts b/packages/code-analyzer-core/src/output-formats/rules/csv-rules-format.ts new file mode 100644 index 00000000..faa873dc --- /dev/null +++ b/packages/code-analyzer-core/src/output-formats/rules/csv-rules-format.ts @@ -0,0 +1,47 @@ +import { stringify as stringifyToCsv } from "csv-stringify/sync"; +import { Options as CsvOptions } from "csv-stringify"; +import { RuleSelectionFormatter } from "../../output-format"; +import { Rule, RuleSelection } from "../../rules"; + +export class CsvRulesFormatter implements RuleSelectionFormatter { + format(ruleSelection:RuleSelection): string { + const selectedRules: Rule[] = ruleSelection.getEngineNames().flatMap(name => ruleSelection.getRulesFor(name)); + const csvRows: CsvRow[] = selectedRules.map(toCsvRow); + const options: CsvOptions = { + header: true, + quoted_string: true, + columns: ["name", "engine", "description", "severity", "tags", "resources"], + cast: { + object: value => { + /* istanbul ignore else */ + if (Array.isArray(value)) { + return { value: value.join(','), quoted: true}; + } + /* istanbul ignore next */ + throw new Error(`Unsupported value to cast: ${value}.`); + } + } + } + return stringifyToCsv(csvRows, options); + } +} + +type CsvRow = { + name: string + engine: string + description: string + severity: number + tags: string[] + resources?: string[] +} + +function toCsvRow(rule: Rule): CsvRow { + return { + name: rule.getName(), + engine: rule.getEngineName(), + description: rule.getDescription(), + severity: rule.getSeverityLevel(), + tags: rule.getTags(), + resources: rule.getResourceUrls() + }; +} diff --git a/packages/code-analyzer-core/test/output-format.test.ts b/packages/code-analyzer-core/test/output-format.test.ts index 5129b56f..840cca23 100644 --- a/packages/code-analyzer-core/test/output-format.test.ts +++ b/packages/code-analyzer-core/test/output-format.test.ts @@ -197,6 +197,28 @@ describe("RuleSelectionFormatter Tests", () => { }); }); + describe("Tests for the CSV output format", () => { + it("When no rules are selected, we create a CSV with headers but no rows", () => { + const emptyRules: RuleSelection = new RuleSelectionImpl(); + const formattedText: string = emptyRules.toFormattedOutput(OutputFormat.CSV); + const expectedText: string = getContentsOfExpectedOutputFile('zeroRules.goldfile.csv', true, true); + expect(formattedText).toEqual(expectedText); + }); + + it("When multiple rules are selected, we create a CSV with populated rows", () => { + const formattedText: string = ruleSelection.toFormattedOutput(OutputFormat.CSV); + const expectedText: string = getContentsOfExpectedOutputFile('multipleRules.goldfile.csv', true, true); + expect(formattedText).toEqual(expectedText); + }); + + it("When a rule has newlines in its description, they are escaped in the output", async () => { + const ruleSelectionWithNewlineDescriptions = await createRulesWithNewlineDescription(); + const formattedText: string = ruleSelectionWithNewlineDescriptions.toFormattedOutput(OutputFormat.CSV); + const expectedText: string = getContentsOfExpectedOutputFile('ruleSelectionWithNewlineDescriptions.goldfile.csv', true, true); + expect(formattedText).toEqual(expectedText); + }); + }); + describe("Other misc output formatting tests", () => { it("When an output format is not supported, then we error", () => { const rules: RuleSelection = new RuleSelectionImpl(); @@ -244,5 +266,12 @@ async function createRulesWithEmptyTags(): Promise { const codeAnalyzer: CodeAnalyzer = new CodeAnalyzer(CodeAnalyzerConfig.withDefaults()); codeAnalyzer._setClock(new FixedClock(fixedTime)); await codeAnalyzer.addEnginePlugin(new stubs.EmptyTagEnginePlugin()); - return await codeAnalyzer.selectRules(['all']) + return codeAnalyzer.selectRules(['all']) +} + +async function createRulesWithNewlineDescription(): Promise { + const codeAnalyzer: CodeAnalyzer = new CodeAnalyzer(CodeAnalyzerConfig.withDefaults()); + codeAnalyzer._setClock(new FixedClock(fixedTime)); + await codeAnalyzer.addEnginePlugin(new stubs.NewlineDescriptionEnginePlugin()); + return codeAnalyzer.selectRules(['all']); } diff --git a/packages/code-analyzer-core/test/stubs.ts b/packages/code-analyzer-core/test/stubs.ts index 0cb92c59..a52861ed 100644 --- a/packages/code-analyzer-core/test/stubs.ts +++ b/packages/code-analyzer-core/test/stubs.ts @@ -474,6 +474,41 @@ class EmptyTagEngine extends engApi.Engine { } } +export class NewlineDescriptionEnginePlugin extends engApi.EnginePluginV1 { + getAvailableEngineNames(): string[] { + return ['newlineDescription']; + } + + async createEngine(_engineName: string, _config: engApi.ConfigObject): Promise { + return new NewlineDescriptionEngine(); + } +} + +class NewlineDescriptionEngine extends engApi.Engine { + getName(): string { + return 'newlineDescription'; + } + + getEngineVersion(): Promise { + return Promise.resolve('1.0.0'); + } + + describeRules(_describeOptions: engApi.DescribeOptions): Promise { + return Promise.resolve([ + { + name: 'newlineDescriptionRule', + severityLevel: engApi.SeverityLevel.Moderate, + tags: ['Recommended', 'Performance'], + description: `This is a description\nit has multiple lines\nlike, I dunno, 3 maybe?`, + resourceUrls: [] // Deliberately left empty + } + ]); + } + + runRules(_ruleNames: string[], _runOptions: engApi.RunOptions):Promise { + return Promise.resolve({ violations: [] }); + } +} /** * FutureEnginePlugin - A plugin to help with testing forward compatibility diff --git a/packages/code-analyzer-core/test/test-data/expectedOutputFiles/multipleRules.goldfile.csv b/packages/code-analyzer-core/test/test-data/expectedOutputFiles/multipleRules.goldfile.csv new file mode 100644 index 00000000..3d3c44e5 --- /dev/null +++ b/packages/code-analyzer-core/test/test-data/expectedOutputFiles/multipleRules.goldfile.csv @@ -0,0 +1,10 @@ +"name","engine","description","severity","tags","resources" +"stub1RuleA","stubEngine1","Some description for stub1RuleA",4,"Recommended,CodeStyle","https://example.com/stub1RuleA" +"stub1RuleB","stubEngine1","Some description for stub1RuleB",2,"Recommended,Security","https://example.com/stub1RuleB" +"stub1RuleC","stubEngine1","Some description for stub1RuleC",3,"Recommended,Performance,Custom","https://example.com/stub1RuleC" +"stub1RuleD","stubEngine1","Some description for stub1RuleD",4,"CodeStyle","https://example.com/stub1RuleD" +"stub1RuleE","stubEngine1","Some description for stub1RuleE",3,"Performance","https://example.com/stub1RuleE,https://example.com/stub1RuleE_2" +"stub2RuleA","stubEngine2","Some description for stub2RuleA",3,"Recommended,Security","https://example.com/stub2RuleA" +"stub2RuleB","stubEngine2","Some description for stub2RuleB",4,"Performance,Custom","https://example.com/stub2RuleB" +"stub2RuleC","stubEngine2","Some description for stub2RuleC",2,"Recommended,BestPractice", +"stub3RuleA","stubEngine3","Some description for stub3RuleA",3,"Recommended,ErrorProne", diff --git a/packages/code-analyzer-core/test/test-data/expectedOutputFiles/ruleSelectionWithNewlineDescriptions.goldfile.csv b/packages/code-analyzer-core/test/test-data/expectedOutputFiles/ruleSelectionWithNewlineDescriptions.goldfile.csv new file mode 100644 index 00000000..37dc4827 --- /dev/null +++ b/packages/code-analyzer-core/test/test-data/expectedOutputFiles/ruleSelectionWithNewlineDescriptions.goldfile.csv @@ -0,0 +1,4 @@ +"name","engine","description","severity","tags","resources" +"newlineDescriptionRule","newlineDescription","This is a description +it has multiple lines +like, I dunno, 3 maybe?",3,"Recommended,Performance", diff --git a/packages/code-analyzer-core/test/test-data/expectedOutputFiles/zeroRules.goldfile.csv b/packages/code-analyzer-core/test/test-data/expectedOutputFiles/zeroRules.goldfile.csv new file mode 100644 index 00000000..2c6c9b94 --- /dev/null +++ b/packages/code-analyzer-core/test/test-data/expectedOutputFiles/zeroRules.goldfile.csv @@ -0,0 +1 @@ +"name","engine","description","severity","tags","resources" diff --git a/packages/code-analyzer-sfge-engine/sfge-08-01-2025-1.log.gz b/packages/code-analyzer-sfge-engine/sfge-08-01-2025-1.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..e69a9ea366f2857757e9608f71b0121d0b9cf299 GIT binary patch literal 7702 zcmd7WMO2(!wEWg=;7zxCID>yHs!wZh-(nQb^%J3#Wht zn)kc6zjbd9`c8V#&tyOA4E9=Qa`tcknZP(G|N0(}&0XBKS~4HHZVYjjP{r}1l2mlu zup&;pbC0GVbKl>Tbu(cp7Ey8Q9I6;kd>7@j54~s9^|j_mRq0;JM37;YHS*a{`G%j#%AjL#%I6Lufl+UzdM z#Akfy)?$XN85O`c&ZO>*hQ_Iu;qb~>36slPDpt;fb?6^;dxZ(>lyw?RQ(kzvwKb?C zAIe-%_wabjuL6C0pZpD3&rls^%@x|8$?o*4>7OEc`HfnE}cuE`n3B-nM~Cn~y1ChgJK zJ=@6bgcGx7Pn~lb^-;C*wn+?ni8X-D*S$bTI;@~555av`q|92#AJl@sukN?Tkl9lc zMb5@nZ4ED#vK%rgTY2jYey%KIyd}AO(cfkRh5>+~ft_W%ks)`V%4wKDr*rcsUodSR zcFp;zCSHo{5R`zBWl@e*cHRVeGzrOTzM? zzdJI(-7S{UjNNoOG6>6#lF)iunFwD_p%OdklL9V;*S5^*R~=@OH;B>f$0-Y-tp*x< z2A|!Sh4*vCRbIkpJ!U5&CrbRz;krfKPhAw2Bk#BT!U@-sbD!Gp_HzN#u|pRCUD#RU z23K(A(WccU{8v;z!oJDyYm!(kp$q|AjGZx4jt93c;8iii@P618siDtHo{%>e#(jm1 z0Q(a@V3YMr(>`kM^BsV7;>q86&e5Cw7%P@ggkB7qfRA9f> zeO{pDWY*DF(ER#9r&rQhx?hpPC zw|ATOV86lyrU+@|Nj~-8EUvtv-UnKmET&M9TUR0kl*1RYY;d-c{dVg)xNtJAEv6co z?B!(#?*z4UO?+>>xH{z0kb@|HmvOtM4CQ*KZ8La<%2I#|%w8+*K0@n#03w~TwJ8*V^-nc8;6Dcj^&QX`ad5Ap@WJ5zfC z*teBuz6Jb@0ri0O(;7&Z7ql0L!UhYp5|F;G8E-X=_Zp2f?-UU~HnDgjvodp~A%H4G z+|Qdhl=ZDDnaZtKTI~E(f|4)F<*_9Y^5~0qK?880PK8Z(JEH?mzxqq(nP)D>S={{^ zLJ*@Nx1s8+a4&AuLXgQmI5`OK+-l`|n>Zd6X9o<-bYZWUs*QYT`xp1%FDnbdY|SON@M_@gN; zaPCMy5{y6DQ;d0^s)Gc#4_ajFN*Fvd#tf9|3O2Oyq1i&VcSQ2(0hD-h(n|Ah$krRJ zt>;L~@WVF53A+XxLBGFp%FWv_;%Uq&g(wscp5@R*Z;6^!j>Lwo#0QHeR8elJkgmG5 zEgM2#=5%zUgz%lH8-}o9_v*$z21cwH);Zy`FT68va_S1LF`vbL==5=++|m@KoIndp zeD{kQt*wb9%=;tiC}RYQ^Ezh;yt@P_7 z9^1RsI2>isl&_0%0D9PpnxZks2IaYG(bvU7Ql%4wtG-abiLp~YgaVu(1;R!F(SRpN zD^5r~)4aQf)FXH1h6MTsf%~mw2tKwI7qi%bymy++P>}FlW_C%7ignj}+v$3E@2xP!f%L zPv4OeOP`!uq-c)(NzbHH;)p~!((DB4CO`{f*eq2|`T8%xb)Th-f(?@^EtN?UNeAvZ zM!Sa>-^hQlI+paMeIMyZMkDsMVt7qlh?FU!KGV20vdGC@VR?$1K9I2~RkFfpRliZN zo)MQ+q{Nka_Dza*-e~y^0rZxe7%(-jz~W+`b8TeC-HlI~g|FYYsmoGjw8B1uY3B|(Z@pmkB?Ezv1S zbhed(8GRn_N95fmPD%%4L!SA{Ah-m|=|fri9RdJR+I?2wXM0#Plq#tU`1C^Uc6)Y^ zKjq-*r)Cyxo~nw7x-XT}ckk7RqdmDPFOy*J^UnBK)SH-PV7c&|{X>)+H5HT01M){3 z7UA2Y(~WT#F%-aAJA=K3zaKUHOK-P7#WE9V=iZ_Q^2%*!hw2bfc3QT+Lp*6@KQs1& z4`CN6@sSnXJ&-iA=Wi-n0*cD}ID1M5A+g~fTIB-0QLX2e5z%K5Y*(aLVU+r5Y})xT z#kSbv^$o&jK1}^{ubJcd9g3id#NAvavA}g zT$axj03V8emaSLg>mM*V?|T%`i8psMD(&TVXr7Avz;LItzCO*!rWV|q_T7hih+~DU zttLuqaN9GZAJ!pR*<0n@Fjw1uWj%zDsb7dFIdD1ra_})&<;p<%^GN{fjSN6W3lE_w%2nw$-5w zzg{#NBo23zsMQP57i-?U+*tdJ*Wxr$`eYH=F1Pc3WZPK0a_Jo`=jO4@X(UQy9G)&x zQU&~;R$OI&{?-@&EiA!>gdM>&p^?-JrIE~`9rga=$)1<%hmsS+^&Tz4 zIWjdYI*L6`A)DDTh9Cg$`bl0zqdTlIJAgGxBR(c8-CE4{{MM*vybp5#Y0{?>()xLN zBQew`0F`=I%hy$$BzZZvV1=16+UswUmZjH5V?EW(thBZ^=QOyD1ze?}(m@gVD2C>r zqSky{=B#m$cRy1@l_qt2*9@%UV?=xd8EE)Rm@Cg@yQCifT(nD%WtbHXv^Wgk#RzMt z8yX?L_`|X@nA%4R%cbBaZ_zI2+qq_r(l{t|thBR>y=)Rjx~j*!i-*_7>}>By=99PH zdQyUY;~P_BqGrXxB9iPqv;di#CUJkWpk)n~i!xwAi*c(QLJWIgVI zZH1?X-tAU~xRM^fzolK>@K}K3ly5bOFDBj_y!SCxYwP59Yz>yp^~vzE|Jbz_4z1NW zZ2P{J`@wWT+@o+6m(eE$4eb$%(fTL<4eQ3<0YP76k3DED5PHQ{=<>+Vcnc!lWGTYCQQgRodU-KlphxUAerh&;FTE(Q#@W;72w2 zuEcWpLZBZ|H@D3tGbG$nyQB|w9c|XW_1EJ2C_o-{N^wW)97s1c`K(5m$x zu%zN|)q@5OYRT09&08N1l#R!ki>jSwnppf+WZr4*;^e@{b0P0I60-wirJ-Xw2VKWN z86uu%^Pb-$meKQE_Th^)HayARdcs@~=4!J2CG$HuoUr$!n(r^v+DpKdrCqbh&WU@q zOyXwC5ngd55s0XCn57D~d|2}K>gs74lpJ;na1R3-iXH4ew&VlH1C z&^75k{CYiyl`B5;HN1?lV-AZ)?F;|2ac>MB?S&#y{@n{u&zsFrSA{ntgPfTg=G?Q7 z-wVr=56cA}H&vM->{c)gsrukiOLH$f>0LLK(hG~S*;35TPD_Am8af?~_xiUqTiF&h zh&mX2ejw~eWVrV|`Y@Wyip#y=P+L4|WO_Dy!Z zMY0R(M&l|MW#uo{M0L9*Tw?c>xK$8eC2AkrQ}E={ugi3V#a4xmHJw^h9#tmYcs+1k z`eI)?S*c(2NgwLj@*LM}MZk$+7ZquPoc)tZqBwHfw>{BhGAy|7id4HB8OYbZo%Rgj zsOfjEnb$x{$0CDDAV$scGbfB@ih)kVbuaXG`}LzL0^I>8+|$Cuz`Cg)46l&yu9e&z z*21xwY~8%MI6eL{mo-LPA7RD)G6;(pW#JU%0~-yNlHapl!sBCzH~Q`JUnO8?5oMJ@ zVcqdf#cEq6S=d>si0%HT$pvWBh-<=Tx@q6gB@V&ZRex%p1X!Q#LMH}}rtF!0dM_wL zfM(4;O3+WI%W?TBnH8_BVN@&IVK_xZj=1gvl7z8KpJ_kBs)IS3AIBFNVU@YB^}V9)i=9$do$U*ph0! z7H&A}(ieV0zQq?fB1mjGI5j5a)u(48I=_`faml2BedSNw2&*?|`bU_BSfE&Jkn8Wj zvaG=%Y>@50keOJ0RA-2bERhRB1y)}2hiUQap`NNnSD*of|FI@}%lLc&Tc8;TFN{X>20Zb>t{Gk04kUPIfV1{xdIJXE1WN6-DR0mT0nLgH+(!nQ_ zY+_P`7j;C@Y91Q6`czc{hJP#Cc*k4CxOOgg?${zT{hqtWsQgI9(_wc%(n-T!$Z_vy z-VYW5i=61y8ctOddlF^VDw^0iHJ7}O8DBt?Ekckj5&&LjWV5J&h%teQpD_DDgVqwZ zA3Nhyd0PIwY2=)|mv;r!d@m6@A0#=&Vr1!Ro#2g0#>y*|;F7`mECE#qJ4$5K?#AOZ zkmngl2-%B6IX{x(8^v*6^N|b2q&#aY+JXsE!On2T$o5ejxA&ab#rH?|#TtERv-F?k zZOYR{bUTOv$+v3C-;Ej08mJ5Yh47U3e9_@63t^BIRU$wXGT+czN)v`hG;b|Ad?s8| zwVj`V&<4Q<6+k#WCibgDG2@Bt)$YFoM%6aISo;_bed`K*p+HZol#=fqA7!El41S+I zWf<_m?fAxbfuW&IBanlapQ0*a$WAW3vCYqnxrGRvEDe4`@uW-j66k4#w05Rq0Kx7= z6DOZ%L#)87{k9;=QoR;OW~>M@=LnRZ+q{>!#Dk!1j)G(jktkvV=lc-J9!|xdr>LI- zJAt#t=~7_b_d1L~u<)DbRBKb+_1-Gx7tE^Z=VPU~*J+MK7QpID7Kf*;3?A~dm8}R+ zK;rMY7@k>mj1SJN535%T(2+a~t_leuq%B+87|4J*VnERH8u{~IiP7RY4_w*xw(@_ph8R#(pk1~vaX8*71jM`EMYH^RLMG{xAaYvt0s!%qv>IJeF; z&MT1;Qm_s=mN+EyxOk?7dZSOwW<$0>;BA3@e6E_s)mr`8H?tgQPX7^|2kW-@Gf+G{B68APTDcq;m=QF zz$NaQ?g3AB-Q}uJxOHI2;80Q?^EwAA1W1^I&?P2~RTOVLeu4H`L~69e(O;FzK%TuY zd8ayoiB8-GpLz^2&Wd4SZh;bWo0gwYo{^1~(2PPCM&z*lG zoWakxwEB0`BaeP*^vgYE!3+E*eKKPHR@Apf!0ND1cOP_t9-jVjTF_>uv_`ge??Z~9G~>-m$Y8P)#U7+R1jB% zJ+g~5w~D-x#=5X$q~DScaOZuM(AoJP*;_XCBn0)UGO`QjnR^rlWBh(B&b=$OV&mb6 zzcco3iy#PvILXh_S5HxWtLS~1{{E8zf&$#1W+kH;zg~Z&dNgN{yVJjdLx%8MU1C?J z$w-*=C0uxUoN-0`^Ju)LGa0#{^>ej~XtV>#(d33ag(!c1mj5jc)2kGIoHG1~ClJI6 z;MnK5l5^ZY9c<>sqJn0ZOL0$A@MiTLO!hI6wzJYtBU+oHkK-AH0J(C;TE^bs{p1hS zLO;Pi4!a+LC_t{9GCU+`fURg6^qE-$z@!6~AqVShOV1C5%WGsRuwsCobc2dCxk|wT z{gXQR`S)Rm#hQFaJuT>^>f)H2)j0hLf0Z*6;;+Tt{cJ4_PrpA%n5D`;IUy)9^7F@h z;b!HJ=adQeoMTgzdil=-3HXfM{O^SFUWua^dS;^wwTf1w7|!Cgso7Pd8Cuiui`Ood z0^{jNcEBe>cxj_bQ9?X;?g^DPNyKdt8wJxf%;NHbSy*wyl+;NZO`oEC>0i7!pCr|- zd3qnh+Vq)D1glH{M2hac8}^n{yZ&l{8}}wlS#^KZh(bz<9dh7@)oLO;Y!}@h zjXFz+@9I~da}DQx;LY54{3m-tB{9ZmpxLwfNrHl4!D{$CddBL9kVR?iz(ge*`Qb-P z-xr)xS-qO&YZ<(n)v0{5GrmH#|IO;t5WAWD(LsD$m5{$cna*MIcOdP z9GQwC74jL~ekyEJTPSRe z5?c@c>61;5636>s4SC@W5E;hRj3BjtTm2L^2F+C^lMfU=p@8aND3GKp?Jt}L3k->|v{My}p2;73skAU0O@*R46J zGRiU})>eVTD2r;|hRt#_?@JFj_l%=!iTGZHw2DJDuzC5@)^Ne<(N$I+IV5(xz>^~p zJKhrpLy?1qwop!9*Tf(l^Gt<*SdhwD8+jb`)wd0y!)+=?0*xazX2-{kIi1+RjS%A4 zV3koK8vZ!uZrgr_<5%}|6%<{!MP;dvx*R$OFUAKrbcR*8bvF^gsNa4~@HY{!pu7;m9{ht^opcU8?jnVRK;W%i}C^D~#7t@}f``aHUXE zh*a<`TUSQ2&&vTeaN+i)OD?8E#*j-xwpw2pZR^1QoFX~u@79|}9uCE?hg#HP zs{U-P+mf!iThQOe)_3!nvxs=^e)#j3)9AgZ@3X7@oE@zTnJ97@> zZpF>IR2D0`=M8t^?>5VB2Yb~ZGs57)ppjm|LiK@jC^53N$LJTuE` zQ}D3!eQK7FfvyHxvSww3wb)!0}^0 z^6zDThyc;QS+IaWDSu*tc5iq7e(NIZ6AK{g?}#tw_HOqt{#*ux+yP{Q3)cJgZvP*$ z08sKjvB2l-*Z;>X$h|HL__?PveuKDN&STG5vvbQetN6AiTKOrr+u;#=Z_QP7`70{Q F{{n20=OX|B literal 0 HcmV?d00001 diff --git a/packages/code-analyzer-sfge-engine/sfge-08-12-2025-1.log.gz b/packages/code-analyzer-sfge-engine/sfge-08-12-2025-1.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..4b3ba17521ade05253389585bf45eb4b7c5d5430 GIT binary patch literal 19129 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 Date: Thu, 14 Aug 2025 10:01:31 -0500 Subject: [PATCH 2/7] NEW @W-17977608@ Incrementing version --- packages/code-analyzer-core/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/code-analyzer-core/package.json b/packages/code-analyzer-core/package.json index 25c8258d..0bba533c 100644 --- a/packages/code-analyzer-core/package.json +++ b/packages/code-analyzer-core/package.json @@ -1,7 +1,7 @@ { "name": "@salesforce/code-analyzer-core", "description": "Core Package for the Salesforce Code Analyzer", - "version": "0.32.0", + "version": "0.33.0-SNAPSHOT", "author": "The Salesforce Code Analyzer Team", "license": "BSD-3-Clause", "homepage": "https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/overview", @@ -69,4 +69,4 @@ "!src/index.ts" ] } -} \ No newline at end of file +} From fe685d752279cff177b123acb1fcad19128cdb60 Mon Sep 17 00:00:00 2001 From: Joshua Feingold Date: Thu, 14 Aug 2025 10:53:34 -0500 Subject: [PATCH 3/7] NEW @W-17977608@ Removed wrongly added SFGE files --- .../sfge-08-01-2025-1.log.gz | Bin 7702 -> 0 bytes .../sfge-08-12-2025-1.log.gz | Bin 19129 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 packages/code-analyzer-sfge-engine/sfge-08-01-2025-1.log.gz delete mode 100644 packages/code-analyzer-sfge-engine/sfge-08-12-2025-1.log.gz diff --git a/packages/code-analyzer-sfge-engine/sfge-08-01-2025-1.log.gz b/packages/code-analyzer-sfge-engine/sfge-08-01-2025-1.log.gz deleted file mode 100644 index e69a9ea366f2857757e9608f71b0121d0b9cf299..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7702 zcmd7WMO2(!wEWg=;7zxCID>yHs!wZh-(nQb^%J3#Wht zn)kc6zjbd9`c8V#&tyOA4E9=Qa`tcknZP(G|N0(}&0XBKS~4HHZVYjjP{r}1l2mlu zup&;pbC0GVbKl>Tbu(cp7Ey8Q9I6;kd>7@j54~s9^|j_mRq0;JM37;YHS*a{`G%j#%AjL#%I6Lufl+UzdM z#Akfy)?$XN85O`c&ZO>*hQ_Iu;qb~>36slPDpt;fb?6^;dxZ(>lyw?RQ(kzvwKb?C zAIe-%_wabjuL6C0pZpD3&rls^%@x|8$?o*4>7OEc`HfnE}cuE`n3B-nM~Cn~y1ChgJK zJ=@6bgcGx7Pn~lb^-;C*wn+?ni8X-D*S$bTI;@~555av`q|92#AJl@sukN?Tkl9lc zMb5@nZ4ED#vK%rgTY2jYey%KIyd}AO(cfkRh5>+~ft_W%ks)`V%4wKDr*rcsUodSR zcFp;zCSHo{5R`zBWl@e*cHRVeGzrOTzM? zzdJI(-7S{UjNNoOG6>6#lF)iunFwD_p%OdklL9V;*S5^*R~=@OH;B>f$0-Y-tp*x< z2A|!Sh4*vCRbIkpJ!U5&CrbRz;krfKPhAw2Bk#BT!U@-sbD!Gp_HzN#u|pRCUD#RU z23K(A(WccU{8v;z!oJDyYm!(kp$q|AjGZx4jt93c;8iii@P618siDtHo{%>e#(jm1 z0Q(a@V3YMr(>`kM^BsV7;>q86&e5Cw7%P@ggkB7qfRA9f> zeO{pDWY*DF(ER#9r&rQhx?hpPC zw|ATOV86lyrU+@|Nj~-8EUvtv-UnKmET&M9TUR0kl*1RYY;d-c{dVg)xNtJAEv6co z?B!(#?*z4UO?+>>xH{z0kb@|HmvOtM4CQ*KZ8La<%2I#|%w8+*K0@n#03w~TwJ8*V^-nc8;6Dcj^&QX`ad5Ap@WJ5zfC z*teBuz6Jb@0ri0O(;7&Z7ql0L!UhYp5|F;G8E-X=_Zp2f?-UU~HnDgjvodp~A%H4G z+|Qdhl=ZDDnaZtKTI~E(f|4)F<*_9Y^5~0qK?880PK8Z(JEH?mzxqq(nP)D>S={{^ zLJ*@Nx1s8+a4&AuLXgQmI5`OK+-l`|n>Zd6X9o<-bYZWUs*QYT`xp1%FDnbdY|SON@M_@gN; zaPCMy5{y6DQ;d0^s)Gc#4_ajFN*Fvd#tf9|3O2Oyq1i&VcSQ2(0hD-h(n|Ah$krRJ zt>;L~@WVF53A+XxLBGFp%FWv_;%Uq&g(wscp5@R*Z;6^!j>Lwo#0QHeR8elJkgmG5 zEgM2#=5%zUgz%lH8-}o9_v*$z21cwH);Zy`FT68va_S1LF`vbL==5=++|m@KoIndp zeD{kQt*wb9%=;tiC}RYQ^Ezh;yt@P_7 z9^1RsI2>isl&_0%0D9PpnxZks2IaYG(bvU7Ql%4wtG-abiLp~YgaVu(1;R!F(SRpN zD^5r~)4aQf)FXH1h6MTsf%~mw2tKwI7qi%bymy++P>}FlW_C%7ignj}+v$3E@2xP!f%L zPv4OeOP`!uq-c)(NzbHH;)p~!((DB4CO`{f*eq2|`T8%xb)Th-f(?@^EtN?UNeAvZ zM!Sa>-^hQlI+paMeIMyZMkDsMVt7qlh?FU!KGV20vdGC@VR?$1K9I2~RkFfpRliZN zo)MQ+q{Nka_Dza*-e~y^0rZxe7%(-jz~W+`b8TeC-HlI~g|FYYsmoGjw8B1uY3B|(Z@pmkB?Ezv1S zbhed(8GRn_N95fmPD%%4L!SA{Ah-m|=|fri9RdJR+I?2wXM0#Plq#tU`1C^Uc6)Y^ zKjq-*r)Cyxo~nw7x-XT}ckk7RqdmDPFOy*J^UnBK)SH-PV7c&|{X>)+H5HT01M){3 z7UA2Y(~WT#F%-aAJA=K3zaKUHOK-P7#WE9V=iZ_Q^2%*!hw2bfc3QT+Lp*6@KQs1& z4`CN6@sSnXJ&-iA=Wi-n0*cD}ID1M5A+g~fTIB-0QLX2e5z%K5Y*(aLVU+r5Y})xT z#kSbv^$o&jK1}^{ubJcd9g3id#NAvavA}g zT$axj03V8emaSLg>mM*V?|T%`i8psMD(&TVXr7Avz;LItzCO*!rWV|q_T7hih+~DU zttLuqaN9GZAJ!pR*<0n@Fjw1uWj%zDsb7dFIdD1ra_})&<;p<%^GN{fjSN6W3lE_w%2nw$-5w zzg{#NBo23zsMQP57i-?U+*tdJ*Wxr$`eYH=F1Pc3WZPK0a_Jo`=jO4@X(UQy9G)&x zQU&~;R$OI&{?-@&EiA!>gdM>&p^?-JrIE~`9rga=$)1<%hmsS+^&Tz4 zIWjdYI*L6`A)DDTh9Cg$`bl0zqdTlIJAgGxBR(c8-CE4{{MM*vybp5#Y0{?>()xLN zBQew`0F`=I%hy$$BzZZvV1=16+UswUmZjH5V?EW(thBZ^=QOyD1ze?}(m@gVD2C>r zqSky{=B#m$cRy1@l_qt2*9@%UV?=xd8EE)Rm@Cg@yQCifT(nD%WtbHXv^Wgk#RzMt z8yX?L_`|X@nA%4R%cbBaZ_zI2+qq_r(l{t|thBR>y=)Rjx~j*!i-*_7>}>By=99PH zdQyUY;~P_BqGrXxB9iPqv;di#CUJkWpk)n~i!xwAi*c(QLJWIgVI zZH1?X-tAU~xRM^fzolK>@K}K3ly5bOFDBj_y!SCxYwP59Yz>yp^~vzE|Jbz_4z1NW zZ2P{J`@wWT+@o+6m(eE$4eb$%(fTL<4eQ3<0YP76k3DED5PHQ{=<>+Vcnc!lWGTYCQQgRodU-KlphxUAerh&;FTE(Q#@W;72w2 zuEcWpLZBZ|H@D3tGbG$nyQB|w9c|XW_1EJ2C_o-{N^wW)97s1c`K(5m$x zu%zN|)q@5OYRT09&08N1l#R!ki>jSwnppf+WZr4*;^e@{b0P0I60-wirJ-Xw2VKWN z86uu%^Pb-$meKQE_Th^)HayARdcs@~=4!J2CG$HuoUr$!n(r^v+DpKdrCqbh&WU@q zOyXwC5ngd55s0XCn57D~d|2}K>gs74lpJ;na1R3-iXH4ew&VlH1C z&^75k{CYiyl`B5;HN1?lV-AZ)?F;|2ac>MB?S&#y{@n{u&zsFrSA{ntgPfTg=G?Q7 z-wVr=56cA}H&vM->{c)gsrukiOLH$f>0LLK(hG~S*;35TPD_Am8af?~_xiUqTiF&h zh&mX2ejw~eWVrV|`Y@Wyip#y=P+L4|WO_Dy!Z zMY0R(M&l|MW#uo{M0L9*Tw?c>xK$8eC2AkrQ}E={ugi3V#a4xmHJw^h9#tmYcs+1k z`eI)?S*c(2NgwLj@*LM}MZk$+7ZquPoc)tZqBwHfw>{BhGAy|7id4HB8OYbZo%Rgj zsOfjEnb$x{$0CDDAV$scGbfB@ih)kVbuaXG`}LzL0^I>8+|$Cuz`Cg)46l&yu9e&z z*21xwY~8%MI6eL{mo-LPA7RD)G6;(pW#JU%0~-yNlHapl!sBCzH~Q`JUnO8?5oMJ@ zVcqdf#cEq6S=d>si0%HT$pvWBh-<=Tx@q6gB@V&ZRex%p1X!Q#LMH}}rtF!0dM_wL zfM(4;O3+WI%W?TBnH8_BVN@&IVK_xZj=1gvl7z8KpJ_kBs)IS3AIBFNVU@YB^}V9)i=9$do$U*ph0! z7H&A}(ieV0zQq?fB1mjGI5j5a)u(48I=_`faml2BedSNw2&*?|`bU_BSfE&Jkn8Wj zvaG=%Y>@50keOJ0RA-2bERhRB1y)}2hiUQap`NNnSD*of|FI@}%lLc&Tc8;TFN{X>20Zb>t{Gk04kUPIfV1{xdIJXE1WN6-DR0mT0nLgH+(!nQ_ zY+_P`7j;C@Y91Q6`czc{hJP#Cc*k4CxOOgg?${zT{hqtWsQgI9(_wc%(n-T!$Z_vy z-VYW5i=61y8ctOddlF^VDw^0iHJ7}O8DBt?Ekckj5&&LjWV5J&h%teQpD_DDgVqwZ zA3Nhyd0PIwY2=)|mv;r!d@m6@A0#=&Vr1!Ro#2g0#>y*|;F7`mECE#qJ4$5K?#AOZ zkmngl2-%B6IX{x(8^v*6^N|b2q&#aY+JXsE!On2T$o5ejxA&ab#rH?|#TtERv-F?k zZOYR{bUTOv$+v3C-;Ej08mJ5Yh47U3e9_@63t^BIRU$wXGT+czN)v`hG;b|Ad?s8| zwVj`V&<4Q<6+k#WCibgDG2@Bt)$YFoM%6aISo;_bed`K*p+HZol#=fqA7!El41S+I zWf<_m?fAxbfuW&IBanlapQ0*a$WAW3vCYqnxrGRvEDe4`@uW-j66k4#w05Rq0Kx7= z6DOZ%L#)87{k9;=QoR;OW~>M@=LnRZ+q{>!#Dk!1j)G(jktkvV=lc-J9!|xdr>LI- zJAt#t=~7_b_d1L~u<)DbRBKb+_1-Gx7tE^Z=VPU~*J+MK7QpID7Kf*;3?A~dm8}R+ zK;rMY7@k>mj1SJN535%T(2+a~t_leuq%B+87|4J*VnERH8u{~IiP7RY4_w*xw(@_ph8R#(pk1~vaX8*71jM`EMYH^RLMG{xAaYvt0s!%qv>IJeF; z&MT1;Qm_s=mN+EyxOk?7dZSOwW<$0>;BA3@e6E_s)mr`8H?tgQPX7^|2kW-@Gf+G{B68APTDcq;m=QF zz$NaQ?g3AB-Q}uJxOHI2;80Q?^EwAA1W1^I&?P2~RTOVLeu4H`L~69e(O;FzK%TuY zd8ayoiB8-GpLz^2&Wd4SZh;bWo0gwYo{^1~(2PPCM&z*lG zoWakxwEB0`BaeP*^vgYE!3+E*eKKPHR@Apf!0ND1cOP_t9-jVjTF_>uv_`ge??Z~9G~>-m$Y8P)#U7+R1jB% zJ+g~5w~D-x#=5X$q~DScaOZuM(AoJP*;_XCBn0)UGO`QjnR^rlWBh(B&b=$OV&mb6 zzcco3iy#PvILXh_S5HxWtLS~1{{E8zf&$#1W+kH;zg~Z&dNgN{yVJjdLx%8MU1C?J z$w-*=C0uxUoN-0`^Ju)LGa0#{^>ej~XtV>#(d33ag(!c1mj5jc)2kGIoHG1~ClJI6 z;MnK5l5^ZY9c<>sqJn0ZOL0$A@MiTLO!hI6wzJYtBU+oHkK-AH0J(C;TE^bs{p1hS zLO;Pi4!a+LC_t{9GCU+`fURg6^qE-$z@!6~AqVShOV1C5%WGsRuwsCobc2dCxk|wT z{gXQR`S)Rm#hQFaJuT>^>f)H2)j0hLf0Z*6;;+Tt{cJ4_PrpA%n5D`;IUy)9^7F@h z;b!HJ=adQeoMTgzdil=-3HXfM{O^SFUWua^dS;^wwTf1w7|!Cgso7Pd8Cuiui`Ood z0^{jNcEBe>cxj_bQ9?X;?g^DPNyKdt8wJxf%;NHbSy*wyl+;NZO`oEC>0i7!pCr|- zd3qnh+Vq)D1glH{M2hac8}^n{yZ&l{8}}wlS#^KZh(bz<9dh7@)oLO;Y!}@h zjXFz+@9I~da}DQx;LY54{3m-tB{9ZmpxLwfNrHl4!D{$CddBL9kVR?iz(ge*`Qb-P z-xr)xS-qO&YZ<(n)v0{5GrmH#|IO;t5WAWD(LsD$m5{$cna*MIcOdP z9GQwC74jL~ekyEJTPSRe z5?c@c>61;5636>s4SC@W5E;hRj3BjtTm2L^2F+C^lMfU=p@8aND3GKp?Jt}L3k->|v{My}p2;73skAU0O@*R46J zGRiU})>eVTD2r;|hRt#_?@JFj_l%=!iTGZHw2DJDuzC5@)^Ne<(N$I+IV5(xz>^~p zJKhrpLy?1qwop!9*Tf(l^Gt<*SdhwD8+jb`)wd0y!)+=?0*xazX2-{kIi1+RjS%A4 zV3koK8vZ!uZrgr_<5%}|6%<{!MP;dvx*R$OFUAKrbcR*8bvF^gsNa4~@HY{!pu7;m9{ht^opcU8?jnVRK;W%i}C^D~#7t@}f``aHUXE zh*a<`TUSQ2&&vTeaN+i)OD?8E#*j-xwpw2pZR^1QoFX~u@79|}9uCE?hg#HP zs{U-P+mf!iThQOe)_3!nvxs=^e)#j3)9AgZ@3X7@oE@zTnJ97@> zZpF>IR2D0`=M8t^?>5VB2Yb~ZGs57)ppjm|LiK@jC^53N$LJTuE` zQ}D3!eQK7FfvyHxvSww3wb)!0}^0 z^6zDThyc;QS+IaWDSu*tc5iq7e(NIZ6AK{g?}#tw_HOqt{#*ux+yP{Q3)cJgZvP*$ z08sKjvB2l-*Z;>X$h|HL__?PveuKDN&STG5vvbQetN6AiTKOrr+u;#=Z_QP7`70{Q F{{n20=OX|B diff --git a/packages/code-analyzer-sfge-engine/sfge-08-12-2025-1.log.gz b/packages/code-analyzer-sfge-engine/sfge-08-12-2025-1.log.gz deleted file mode 100644 index 4b3ba17521ade05253389585bf45eb4b7c5d5430..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19129 zcmb@u1y~&E*0zglaCZU(NYEy@yF0<%-95N_fZ*;9!QI^KqHI$6gR{h21 zlc5wFr|}@iXSRp#1W6=czy3h7dZ-d%`@6?$F31>kYVhQ4M2W9ImMYY8yMAO2Y^3~v zo#yGIM6U4)3^Rr$A0$FEQODuS=xi*1VcTn*f6B$q(KPvtVd-gVK<%JGNojTq>s!9CR%@=k#ygs!P$8T_N z&W*)@L#A!?A^^}mO?uneoDnJoKy&qMxt+Iq7JC;InxtAwaQ3lh`jR3w|AjQf?D?U; zK6yT>TRnPHIhh{Fto_@z%rI&Lutll$CWUzo(F-p%3(knzM(pKIKbysB2BM!Sl$>rFH67cYm{uL?RcRVR$uJ>705o>P|gal^$B#DO{&D1|+vyRy^}z=vVB+o@fgd z%pB1Lo-;`q%}1F|FDWPwxx{}b3A_Y;h&qtt)lqvPNJ2n>zJ|gm<3Z6H-^1#36I{FtAleY_Y>QG zU6g@AgG@PN$%4(4aR4WY+~9tF=&156SDGFrG>>?dP2bi>>?~exZE`?@_q{u7X6Z21 z3$w$LG){SD+r_Q{2hN<UN>8t_*IU&{`SujMtWJ>@mw&cruAsh7m7ydEOrg__G* z2T!gPv9q;>`(cgN?OYRuw$f-9gWBT-d*=JT56W3y&oMmt*rOqa5yyd-ABv5+4F&4P z)qjJN?g~zJ6ith&j==vgzfsVxLLLKZ9v&cis&|X37UB)7*MZz!(#`?4=ojlLHz#kW3T+Gx-bqxSLs&XZdXr?PS| z?$!yQ8@~Oh(wQ(h@pfQvjv%MY?S8-asp9sy{_+M(uFw3PvZ&;4^;M#+x3+B0-P8VH zS#6_fC7&AK8NuD+q1AO(bU(%OapMqYr{~MWM=X)rU8l3d!tlXvLQT`@+wMql^QO=j z&U#gtj!ch%toSZT8B9e$TMU-7rmV4bD`F>s9R+RJMDtt@thq8g>Q;8OU zc+odpRozOayZS)9{a|r}!TYHz>U`qeNU^)cz;jU&8e8(#iAJxa*UUNIu$_4D!npSi?w1YkaCcH( zOeL{4txI(k>1rQ9@ERn+c-|WqfL0wsn+u{UN*#L?&)I2f)T6l~;?J+cX4D9#l4`awMxTkpdYhqpVLt?0>0$s4+ z>y3n``&G?ZzH+TCGti#&Z&7aRMkR}U<*3?~yNa+Z&`Fj|hWtKl7`)38c)RiB9do4moYou0(HJ1>3oAk-)djO8Q2X+GUx*iS-Uwt zD9moS;ELWrCwn!d#>LLR?W&A?7@*NgkY&!fdRUe1L@C`?vw z5|$9ec8)!==fV-STbY;~$rn|Su*f(nCTsv(tL821sS5n6ke)4HI4M5F2SwXZA~y{7 zHY%~zeqL^!`m;bbZo+yRG9rQT?rFy?QPVNdc(KQXo#_@{W>EC0VAZ^?1FlAu%3Ax~(i>5UUP9n8(0v-@GryQwVC8aUf%X&T2PVl@9*0 zbHV*oCmBLqR8EN^sk;8o9k9Oh#*)-Ov{5n;{|&FUeakJy4bq&AX}JwrxNV+>Aj1p= z=1G}`|6&MMuS(!n2y0}xeEOzW(AE){%j>ze0UoFe=QL`()#dT^ElSA>t7&d&g!5g9 zo!06o^m2dsBSTD4@6at$`<1RRbwZ9_DIaO1lh^XLK=K7)_%v#LjNNB81y0)h*UkYM zo%>%692wH6ugaw8B$RY0D|A&_Vwg4dts#8c&{W78=B`RlOpCnc2=@R%V@cC><9n(i-OGVo;_lr-0ws*s` z6$Qyv+G0jkqSF4(cMbPNMIpr;KjC(9@%3kpMEk(V{c@}1eRd-C-qY!`X_Q^1yUyF5 zk6V6n2OU{~Qt+WvchhOH^9Qbg7vuC#yH1?3lcVa75`@Y+r(B)e*3wGMmQ_^fJX~oBoAId!T z*Cm+^)0wa$=yRj>B+4&5(~?X2p&CLLB(-m@s2_MpM5o^}x5~&7&+W#AX~kC7+&*Z1 z8Qw25_vBTYD-?^KFZUfHM4t)2+lp$!Vj4{sWqMVra-pAyBJO3p``Uyz_ehgNgcO0S zCTx{ou;HlCT)}@;+TVZ=LHEXPzcC9Iuh)CLGH)Qgy?xCUzkSVCl*ZgRZAwyB4_Y=| zkF7AY)y5aM-Wt=cCw7lYn!=mOE655>d_2J~j;;I^&lzMq}$>K)O7&ef#VC4tX zYpPjSmid|*ArJLTPqsHAm}#Uc)8{+;+&mJMrlS(+QSZ|b9au?tTB)g2+Y7Zmv;*Ng z;SHb32p$l%3NYv8kq*K!pphABvl7GM?_!JQPi~LHJ_;ux+Q*8cCed?i_;hU5i@VTt zp6GddPnMS3NWwSH_oo-4h_`?793LaEoJY5!nQ6&vt$oc|xBmLaR0g^Njv=1kO9pJ? zK?<=L-h?uquZP#zOv{zQwov`jbMorW-GSvK?OVHWKkJd2<1SoR*MY~vdP+SWf;?AW z4)gnB2RgdAa|zm+$^CBwMRzR*N$+!kJ=446NLiyP-n?lq!+Z7#lSD@(84vsjb&v27T0uU(p&rz~*~&kFpiOIDD^2 z@t&^s>TLe8+D=_lwcL7q9OLdeW~5mF(v;M3dvDR|T(Fu5PsFY!d9?$})u1LvNV|5T z!gES-SOWjdJVkuod^hqJh$E`!cwALNYuG zOd0hl_DoSTmvSRkB0N=0T_a#Lkmawcn5-YtvE%l?g-7DvS&z6KSWM&6m&m*?SvS{B zGa+qvw@wX{x3*68L#50?t9eS*O`m6u0(nV;X@4{?pi1w1!fQ+G5G3B6F7{vmrU@w%o z3vLce?xZO0p=D@xRdc7*>qRqCOQLp2`2l}{*}<8PkTNU-3bQ#LHuQ{|pSN15ucwca zR(6Ft7X+RKo6KD^*X+3pTjVCAFHk+vsEyM)NG0R`YxIWBMw=i@a z)y}3zw#kBf8?UhGY>r58Nh&|i1BSd{vNu}_-?<5cDT67uT9=E>+*M5=!t}#D&SK^(?wHGnd1QqRi*-_WoxQ{A!f2xz3m(V5&rStgIxp*@ zMG!6q`*Zd%-rId`o(M<1-r`&b|8@n^CCCO&5Oz8?NWYEg3K!nF?dct&{6Go> z5CnnmQX{~*s-X`s`Dq&uzj@P1p3VY%GB;VRn8^P-)|>@wSR`AEeo+6=pg}{1Cl#h} zhYCOvB1Z79O6m)R2a=MAsb%ygyJZsf_cX$aCpvNFROAK=@;P$SSylXkO}FV^u!#bK zO?{33z-CL1g0b`ycR=wt?ix?v%Hi!&g#_mJM8_h1WH*`=h4IjLN7kP)O5WZcu^gH( z#p3|KOyvx|EgKG)nr)QS8Dkp?Y{H=ktn(ONqQ2N~>A@t~?fABI@@kIG;OseiniteOy^t@r_X`_iR6mL}E><=Bs^%_KL4ZrP4bJZC{76=9w8Y85siMuQ z9Ezp2(XCPZOi3*`!+BasVXA9c~rhmn!FV{tl6&q!srA8J-Wy>rK&~l?Ucr z$L{hJ`t4c|3RmkFvf0Os6o(q=Pswy8V$s@>=F@NU@89s1k5XYYlj$0t-85^(O{-4d zdKQ+;L=#u4gU51E6k}cV6WG%jC2~X=;eMz9_R^BX+>f*<)!c>F*zRKbQHOQ`#e$7> zM-o?==_IStB;=38HV<{~N(?3gBK14><`oRBY)@{~^KKr-&E8a4DQQR`Z1IwNkHLkb z51`ft1w7)yp4Y_KZ-xjA!Q7rN&zusQ6`1fsXuzAj$xeXbr@3Qx=v`RnsL1aJ>X^NG zI#6uA3yGhS1Qp_l75NEk!75XTEZGU5Lfrg~sXT+h3&(i$+jppxX*_eILX@VqmHI?A z?J*KG%gjcf{l&W;85PDCLoFr-o^XT6BvAMKDdGoo&|g)(o0&OHSENNrfnZ5uC_GrH z3R4?OdF131+F0BziPV3_E@CA-h8270{^o60x4xM!@>?wT>6#!C@Z(1$fNQ}PW$)hl zO06>^jH}}5z6HiAJI`q4#LdL!dAsB0Jr}|9Ufb1m^W|mUA`GY1@`8){?IF%@2mtdv zxpx!gCl@;UGFwCqt&G)tz>*{wH=o+az zcGQqA6r*7>*lB#bU1IJ2!F$WU!@EezI#uOk+7dIUEL>u)K=rc5FGT+?Y9(K9j)ZWB zGWd8voKyxl%BlHL0_3GRd}Vw{b4U!O5Vi#_2StYFjEd1Glx~2dPep2DMb#6v^;&t3 z<$asddk7&@*K&H+4Ep-ne!1vpmJF(6)D`)U@1fYRG$J;F1tZbYUy(o@em%)<#jG5t z3Zd_pW3dJAZgqX@jk+V!u?JHf1p#yq1psqMG0_m7NV}0gnNh$f6ReJ%@}hcFwp=af%trye^>E%`Kua`F6w^$;**0jX6K~+1WQ-|1gJdx$ zaJ2WJ+ydT{dV^b#7W*}l0r1W(6ws8j=|$>BP9h-0_=^ax*HOn1dDgGvTwo>YE#a=g za9ZJRoir>UdGVSOU_3c*y@REj0KiZBcaPl+sUW_kg-1gFP2kVi^CaiGQ3 z*9&#$9{jaG74`LJC_t(kH3hGzU#}L*pfIra2N)!;Q11iWE&d%G1TWkz>Bd7MWCxwA zFN^k1!As-plZh0O9#TOg!flJQFAJst{wWWu9Fb9SmSppT6(p^nw9;6%-b9hj6XT!p!jXCRt$vk>85ayr9>hDB*cr|uB;-QFh$VT& z;E)i^mCi0;&^mO1;fD+4MGzKNKxGfZXyOj%AkNkVZD3e)>ZeN{Fm6q*LIwV61WH;?J2ljDxqVHR88`u>f}~cFTN;NLT%$y!>3vi z1YxS>WC(lOLD#&%5HyEg;o!tCAobPJ5EH|~aPW=GPDmMTbN-HNVC_H~NN{SMO{trs zt*$v0T@$=pp)aa_oJEg2E2`#%(L$;P-H;A<}je$oSE;{MR|yM$y$De zPPfzOmz9HH(FDNN#j9LaL$@1LhstfsMoNWj&54X)j*SWST%Vl5RWG6z8$gV`JR7^|vCtYV;Jx7#QY8jOzjl{xo z*(D=&^T{b(aa-csG`LxqXBfdT2p`ix*xCIpgH)NPabNQ*eVL)a{g$V@-zBFAQ@Vw6 z=aZvYf{NM!x_#zr$MdN0#<_47v%G6d@6YN}*oAf{>Bug8a)7PhyI35b zbhKy7q?<0YXOGpH)tIVdDH-_O25;A{c*JtNU9NDS7OPTZp0w;;ckNYXYfE*5U*I<{ zxyKo;NMl3XTppNZ6fxTWfwv+e@1RU2>UjyNNyF;;MpuO)pzeUc_54`XYn%7Hy|n1K zZciXK@XFy>Y}RLz%dep~rrgs0+OQ#?n8yWBC{q-3kn~tZpC!E$?wQcPzULq#t1Gj8 zky69T^RdkYS{N9UtulsV+gA~z4rKnUFJGUEQtQcoKyxTN3?v`vNKk^xC51>M!Atad ztLZXbN8N2hDNs!kROzu>6wZUf6#SIgnTa0<45yi`Q)?E|*VYz3p;I(!aw}-FJt9LftH?`>O#$Bjs%4KED>l z!byyrCR0)*UuLi=F!6wZQ3pRzv;l99u@J4Ik1Q*LagM zy_uK!L#zpw=@EUNAe>%(1@I4o5jnCyg8vp7N)KLIM&Xf6tC^Au7N%WNMn>ioW>Tk2 zERC_Jh+5oJ88_q-tKsPx`zC;^z^J7(c*#Z#Uz&-CMn19{b350Yd#hI}#ocGf)|+$g zS6EEf3CdVZgUV0KX_#4x^N_Qm!O}VspeMfedRa_<8%5Mn1qa2VfulG`q5jP5PsbLS z3&sV1PKZus^6(1UeoSF2oL~6-rt74PgJQpgczou7Sn{^h2KKmC&$eGa%iQu(mGH#l zj_phF+4OW&9?%SHlK{Aook@eVtjQnS)9m0>TjCyjP*DG&as z(yTuOTrx}f5{?$1raBzHOj5dj^#5l2mAY6?C$28VwRew&XzIioN)q2@b?#2*^BWIH z0L(i$eHv0L=)ekJeon~!SNZQ_CR)idJhGV@)CJ&ZVXAPu48S75OBkzgb@wX{1Nw0z zSs+)0V7XyVak~t`qQQR#kjVsHhE@@SxDFDA#*13eFY+prO#=MP9AeLBTD~KWJ8Xw| zBo8Ym#rfZ^AO;P?%(SN99#Kz)x=_IRpeP_ug+Qx@^oFyb%^5(qp!K7KNQE;a%MSCU zJP^mIFR7-bxCv4M6Uz?@Uc#4>l(eL+7v!2%vnXgRsh&Y(DXyMD0F+fbiA`i%&=L?Q zdg1~*b+sbgcX8Wd+lv&x>5wnBLAwpf@|L6$ChE^(K2l?6rjvhL8Q%H~K zp2+u31FFbF$gV{MYJQki)XswAQvgplM4%y`z}Oi8L2HvVc7qf?>?BZu`(N(uJVz@D z)VyrcfT>;DSez`}m$)^A?s`EPR4poyY?Sez)w}I zv^@|()rREsn~XaGM@`@ar2Yi>Yq0)o=ijC?h|gJR>Y6b39cp46sWa&IVvB=r3~7ku zUSg6SJ#yE9u_vR{mt_OW1YC+GOp5QaY!74N?7V&M&kl}`7Y|VuKP4L;IpzY{026fCeRU!3xPt7llH;nEOb3CbCCVr&mEBm%bm)hw< zvJ(an_$207DV$tj7IrPcaZc3&&fJ4Ou3qV(WT9&n0_DqSrvQ6jY=mq{)emPN^E4A#S)9Pc&vUhS zDqQ0$*q{yO=3YMpO!$G>E74J8BPP_Puz{~q45NR7*GoYpIKm24Lx>RMRPJns_i%}y z*Jf+kVOb;Jy$d;xg3#B@=Xa`!dW&kZNow~b?lsXAQ&J{|wg)fZ|FQ3a`-fpxdCkt} z&+BLt8aOY^wKEC_+v53u2d{NZ1SV-{%ET*;zw1|Fr-VQH3H1fY`|P$P#V|M)7HZv5 zIb%cbz=qL}p)9H)RsTW0Vkh|Dz0x4tl3!kFGWKs?X};Qdubk@s*X{V(9fAD=%{L6d z@%K55xfI#?%49RtXZtN(m{~g=-7Q=yjc`A~HRva}=KKU#YThFU$Zh!*o^t&UL0fBU zg7!XNk!P%Pxqn%uBq(NUcjNOmj^>?ViZsjYD2O{KpN<*V#klQ-`q<&~u`tO^TC2qk z!ZAL-Vw3WI7D2FLM6Id799AE+&|Vq_p6Fa z6?-2N59)eB>22@u5KPA3q$>uHbQPAoQ`&Se0Mf38DEMVmjm!FLVXWp_5^jb{&2Q-{ zCm-su@V#}z|H~GQ^@IACEvg^*>c4GK^~I$3T9Vva&PfwZmRGIGFS+=W6F{nSca8|Y zu)Gn(b9zsKX_&7j7RongS$kVH+?s`|+jeB_rS#!$T_ns~LQu3fAw`@KcKn8!fyA)mel6eDe9r9Xza_eZ&N`mJdA=TGHzUST+ zPo`L!b7gGrtWg#YFP5lD(~+gi?`Nr4s3}7J8UWokv_?V7lxgu`fmsXQv2*Z}%JK(_ zv}o!Fl?l{Pe>f{|fA#AEt3{dVT&UI*C=qYWjvomm4%gg6dP3px`0ov87IDfhL2AAV zNJ5HN{_Jl>IQk%g(U(UmNb4fB6M`(pi)5?=41(~OI8}S2)a#*_ka`EF_C_zkS9yuA zZ0GjB)vIN&R!`F+Z}oja8uNn2oCMH02$IE64K>W=PxL|J)g(DcygK=D5k<%sK3u`6 zl+A3kq{)WS(r-hlu{iKL&UTYjKb@VJtRrK{jvo%wZAJ`mX1=8#Ddg&Vd?@{Q4(J62 zROY|^Pd09IM#y>J}AZ$RVR}G<=<>dv`}R<)H<%a|<(8cKY5sD%*wy zf3-XhCUK?y;B~5I*Z{9QS{4J>0|7pWmUS-eO?_o;Y!x^Kqa(s9NH#D_J5e0JUv|gAFRw4;sP9860^=c$0r!)@^xa_ ztL1|nZ!WHB+aj_1W1w*76Y+Q0y}NFAZ@WyA^gU2`<&~++Feab^sUb>OOk;e{jTY_! z17dN=pHR-;M2qt?%8Y^Otu6#WK>m@%e?fU&5t2$g|Ew(a^0=B`8&ZKYYt|(2P=;_? zZZY!{290(w+qTui`u_I0{nhEFX+1oJCH#UDWX3x8E`x1zP0Gc*Rl!A;O#wmC7SP4M zQvw;&f@Tzd4``X z4*3(xLwZU66%9B^cg`iB0iv8)$&6YgYKn3E8csk#~&sVUqBL52bF0(ggN8r0EGf#}4dtXMtHLTRwX z$0Za|mmi`{ESyo^JnA+ET&q_#8Wc~~vE0*qx@mtTP@TEm-yevTuM0m#a-B|uK zRfO|~-`J|wA64y@9>BLB3>#8WUk}hRr8y590l>9{X$nDhd$j@Z9RwqW{29P7viS}! zU`GRXJ`ar4G$TCclxNxp_?kI{KW;aJB@_+W&b{ZoZeCZA$UB7oG>HDKDIe|j^+t#< z34}MCILt-}Xw|Tfs55GUQEz6{AY`DJ(Y^}vV}Q%d#8O%)8LEr_Kr90LB#www&yqOC zPys^l;}3=<32TJ|iVQQ^1Bx_##RH#X(C|J)8Q1oHM(KOJiLeAz;z6#;m3$8dW=e_3 z7!f3d1O1P_l6T<9_gNj0CNla7658#!!AI~A4(RNl99{On1iMyXv)H@bU}!}ZN*%+0 z+2Qaf7>}ESvmt8-_!Gd-zHSObRe~yV`_=aNvoj7Y{RpXh|6kx-^2UD31o;B(LK~&} z>!(<`9l4xi;XX%nKDbjbw3V+QbyaKc$QxCQOZxzoaM}TCe&R1kzIgh&3i%1S%ahKZ z3q<;>5NcGITq9OxweA7adw|uZBfqLb@^UHMV-M^#&SD0lCqjw{Pv0ZX|*ynXfA%Bs30Eo$5J zp=_<9BkrW8X4F-EcYS4nvu{qbTy~sQ%{^yt*_*6?X?-7h~4@sNG_gMBsg`~asMkS4}fQ} zJ%*Oht8s!|)PrYrHu}mfTh<756qV|p`*iN!mfx(Z-CvgBB3Js_eH?f8b%{c*^x*8MDzP% z5@jS{tiF@3@1kiL2cCNd#N$YlZCg)5N?$_hZKYw%!>bn7p1xAGBrC2pz7I)G@GtG9 z0Mp;mTq6y_tp(G!ZWw$B`7;`zm6 zWhoEs^B+1NZYq)~RS+^{Y)v0nFsSA~d{r0~cQ|0dL$dyCFQ=Ibj=5O(1h_D$6BzSq`?cIs z-$c!=cDIPog39xE*z*W1Vg1g6k%snrRsIX5YLB3nPppVmkBI&!0WSH*h;!7j`Qu!p z?ll|luM}vO4G}--91W3n-H}?Mf8Ay4O(=AaD0k0m12u|Fa;p#&dz^xjO)udCP+i$d zt^dkyn zo=DlhZ^f8%c$Yz_O~asRA^wgzrWgl)f0=KP=~E0KBLV3>Q4zT%t~aOmeU9fl8ZO6R zP}5@B^VDy$vhIh&#l=VAKbp*DOAt%a6$gCJf9_EH&0{|4*8J%)dwl%mG1uF}Uj9K? z7MNC9Z=P@_E>KzFc2I}s8^%tGDDl+55t~)5z<;VIu&ZAV9Yi`twoV+IDT^u#&+eqv(};O=Y9YuR#pP*$5o}v3L$r?g z!;Hlm<00z2q*n>fMMf8B#_J<*Arw&k#wQs^JL2hD%{Ain*y6GmqI>4s&kZLsVew$U zelDOFT~cC81c^!JZy*;<>J%wM4WsV_Z>Pq;1mJ!m--&?A6Ta=+PKM`l3KpdS^$De@ zSR9aNC-|yBXqbc5eU>9M@9ZucIvm75`N(F%(%z?Lmcv_VBSJPXinPK#7c*&XuX88Ef=k9&Np_) z+|r@?TEbldzu`vt^L26a%V*|aig_g65f}VGY;>Fab5Ia7e|jtKqCWZ??r?MyDxQS= z*vx}((iJ~)0!av=kRf3G0=fh?NbOMB;eNfeo)*yLMWub8j}@gb#DW;*l9{z&kezeA zA-)wqg{zU1VfL!xl9f4Frx-jc2g^XxFh<~t+)C6irk#bH;>R^;sg)AG5JGO|_TAWE z=zH4g{%a@%Z86f20ekT(2G7b$lRz)O%92?gUxt5W{L=?mDhz0lH8hJWnqUs*y(-HC z6l+Twes}DkXAV~RNPsWIFylM$6#+ zM`Qy*+M3@UAZ9In4}ey>>;5V*`J8*l*PXbAEi=Sy&%q;845S?F#rg{yDZQg;uw#=% zjll4KWDkqYhL6CbQrL3m@niS_?i>G;J#mJvf)Fa z-*dl|u*U(dx*cgU567bG!Yl}sc8pgmGbGmQj5|8@Vb2{@hq)8K4ebNJsXit<5TQ3{ z5XR#}hQwr)7L?}hCS+wiWvOq0J%#@7!}}|5HV>!SA$K%u>(SW7cgO9eCvJhalX-IC zt*6|e27WiYxIdpfow`g@9jW^K3>p&fm={zkut5Y`P0>m_=i;%s~paFV^pm5>B}(CG0&i2SGZ2 z=AdwK;vN9iVBn&OJdOC>B)PTe!=`(9>I2aIl~LLm_m|vLEo>!GcCj84OhC66Cc91` zwWB(Jn4AG0G3ITm<|^L*w0|p+mzXBEv9F!2LiPY(7Is=3QT3dr*LNG8Lg(^2-9e+4; zem|segmq%D)){->Op-F(iM?!AZrkYM@|zGR^FS?4d*2XQHr(q3$J~f*jpBrM-P?L} z@>kEfMaI2AyQgN{EmJxsbekVl09B4rG}429OSlhR&u*t?A*!vo!)(sAeuE2#t+o~2 z?mb)f`%gV;`sIu&xHOSi0|0hcK6B&-=$YKY%bhDkhVE%Sf8 z&{`HQW}Rn6HAu94ARj72bndyODUvmb}4Yp@A@#14I~25Tz6Rf z4q*g#;Mu|t5plRSikrbR>@k1O^?T~$QVYxG27$nJz&z`)+<}9&%C*ii1;9MZ64axc zX$kV?flHvB>}Wm6v!btQ`6U2)S%W{I_V&~# z53;C)uxy9Xz2&xfg>tKS-dOj z;p;l1Gn?U5Tg+p#C7xRgA4lgQ(0L^api*qdPUQG>GTM1Op1SYD*5M8x&!4ysl`+Q? zr-QDpw^sXM5xF{T!Woda7C6%eP(+0#??oQxOWK)EuB>X>QZmtRMw1NPRp0BTd(+-a z6zF8lF8IVkV)=Nj5)V;zTjZZGiRN1b(m;}gh%ZG|Egj7>WyE_&8hvW&aN|KQk-FPb z5Mx!go&7-f3XNoRzrrj@>)MJH%`?^K;?mxRM6(jO-Twrfg+83uT|P}r8plcL&lIgq zi;I^NP94iXl$|l%AD#|5=EI9 zg5-b!`sjW!ZxWkZdPl1C#Kk0&kLTOT9dJyre;C(K;$YPOJUsKVt7da~;slFYa(Pga zFppC{u-7vzy^mRIGn*7HZZMnV4^{X^TrYMcA8{Rj{P1>Z`Rj_~x6ClByxevzd0|MB zX?aq?W`5clASaSFQ9HL)o&c7JAO}+AAB`m2(0UKM0MA5&n7|EVW0q`_k16 zvDd;dk-*6w85d)f>tNzlz$H^qNofrGd(T~+ERz!jPS>8e+BZK z7Jmhd*Cx<;MmtR*8jO-N?WH-aeW zS_azw7;6>ARQRprR$0`L^IkRjYyGWU-*YIAz>lnmDKe0(#s3et={~{n3mC#bjQ}@_ zf0~~^mv<=0FIaRJOT=nxcT*d_fzG3xbv{NEMapMm03ESXI$Rc10~N**(FU(#=)5VH zwk-djHah4JjMA_oO+b%v+4oXN$fH6LR`(&H?jZ~HMdPByQv%2Xmin!2ocBPp?>`*( zhr1Co7%cc6LOPAz7hR4$gnyhzjG{NVpMHVL4EDzGC{F&AgCBGFs(^=9&0zIcHS z$R!Z8VS@Fb*(E5AD7p`h6RB8J>Hke^{0S%0!Z-~(Qc{4v(Yz}xs`wDT&y$cm%i~L1 zq{kSF5ZkxoE#$h^roAl_7u6Q2r5RshR-@j(-r-gU5ZZ7~b-Fx`BW}p5)0+A&8YVoz z|MBF1wGsPIXWGx@x1s|2qaq&nzpfBCN!Z8xH0dpv#~?%J?Gos@VCto51OUyFqgaDa zv53diwH}{{2k737bBs5{O0zTy)lZ=(uroMx0Vft2#EU=#?Ii@Wa+x*>XLVj9WUcH6{8yIG-k-wK`B77Cq0T{;DHe@9+yWK(m1c1 zhL^xxCRMql) zMPdY5z?-E3qM)MDGy>kFQ`g@gDq~fS52-v@<||g_uTV`I-T!cJ%Mw#2z5ArF_~x!y z?N85_S)NABJ9sIPeBpDO(RvQLQaZ2|^Pu1>o{iKt)lHSCH*xL`Lm<#G;iH@Fi!hm{ z*8L*4bM&~~X~cQvSLD;?hIOHdCtHrhuJC$B;Ve9XGx6^B0sEco)}nf|{K2;drorjf zMUq_M!oyZNV_wIgbdQ3}Y#HYA6ODU89(qZeFDA|rB+qRFjoD#W>h$p`iHrBQmd|QU z`rKE)OazVZ*`5&f_C?M{$XgvQwdQ zqrxq+1iD5LJ3Jo>M}3Q=>CFu-=otoMqwdh zO0xtm1=%@<7!;%-K)M138}fH+<4-|{J+@F9m$M1rGDVjtLjR$FHkfz!u*blxpiv(H z@-@|7RiG+i_jZSj8nAmuPTByumh$PL0eFV0b1!=aQ|0C7Ciun znblsM_|izWwJXQFF`X@AgEo6PvVRC_5xvRqpoLnR8wbF5o{#12OSTob60z-TFB9=X zRErB#fs6qEy{GC=!8&tE!O@;-XB!6mc5y0`w6>9=9~nm z8pc^v0`h-3d@21yaUs?aVtVOaan?4WM87Y$kxnzyq~c7_SRyVT?f&hC8#e z#u9s5!SRJQSf$}@#A|2(ECxPWIQlGY92zm{zB&O1g$oDPISDaxWItm){@+ZNUv}K> zfch)zA2TWaUroK8X<;0t)L(gx%m?* zkZJZKp`S6%y33#(S|m`(hKpVjHzyRp#ow_3pKF7uG*}C{iSj-2v#83;;q0!Q3P*$h zb%M%X3d~1-T98Qcou&%khUV{-i@zu-L|+2pOD`nuN8MOA7bzvIX!f+iojBCsQR+_wIiW}~cDR(@2a%HWC-x<(OO;7G^ySKP`@nrTDMcgS8?p4OE zeJa|*T%M@D5-nCOn3f~?VcTz8Sx{T)Mkd>j*{Xfl5*|J)U$GDL4Ka_;m)o<8 z%eC_)f*a)odBov^}e;E)ENCx2Qi=)S5q zQjVtWzqRl5Pd)5MXO$1^=Av z-`T5t Date: Thu, 14 Aug 2025 11:53:50 -0500 Subject: [PATCH 4/7] NEW @W-17977608@ Feedback from code review --- .../test/output-format.test.ts | 38 ++++++++++--------- .../multipleRules.goldfile.csv | 13 ++----- ...ectionWithNewlineDescriptions.goldfile.csv | 4 -- 3 files changed, 25 insertions(+), 30 deletions(-) delete mode 100644 packages/code-analyzer-core/test/test-data/expectedOutputFiles/ruleSelectionWithNewlineDescriptions.goldfile.csv diff --git a/packages/code-analyzer-core/test/output-format.test.ts b/packages/code-analyzer-core/test/output-format.test.ts index 840cca23..78b33376 100644 --- a/packages/code-analyzer-core/test/output-format.test.ts +++ b/packages/code-analyzer-core/test/output-format.test.ts @@ -2,10 +2,11 @@ import * as fs from "fs"; import path from "node:path"; import { CodeAnalyzer, CodeAnalyzerConfig, OutputFormat } from "../src"; import { RunResults, RunResultsImpl } from "../src/results"; -import { RuleSelection, RuleSelectionImpl } from "../src/rules"; +import { RuleImpl, RuleSelection, RuleSelectionImpl } from "../src/rules"; import * as stubs from "./stubs"; import { FixedClock } from "@salesforce/code-analyzer-engine-api/utils"; import { changeWorkingDirectoryToPackageRoot } from "./test-helpers"; +import {SeverityLevel} from "@salesforce/code-analyzer-engine-api"; changeWorkingDirectoryToPackageRoot(); @@ -13,7 +14,7 @@ let runResults: RunResults; let ruleSelection: RuleSelection; let fixedTime: Date; -beforeAll(async () => { +beforeEach(async () => { const codeAnalyzer: CodeAnalyzer = new CodeAnalyzer(CodeAnalyzerConfig.withDefaults()); fixedTime = new Date(2024, 6, 3, 9, 14, 34, 567); codeAnalyzer._setClock(new FixedClock(fixedTime)); @@ -206,17 +207,27 @@ describe("RuleSelectionFormatter Tests", () => { }); it("When multiple rules are selected, we create a CSV with populated rows", () => { - const formattedText: string = ruleSelection.toFormattedOutput(OutputFormat.CSV); + const complicatedRuleSelection: RuleSelectionImpl = new RuleSelectionImpl(); + const rule1: RuleImpl = new RuleImpl('stubEngine1', { + name: 'stub1RuleA', + severityLevel: SeverityLevel.Moderate, + tags: ['Recommended', 'CodeStyle'], + description: 'A rule description that contains\na new line character, as well as `ticks`, "double quotes", \'single quotes\,\n, and even {curly braces}!', + resourceUrls: ['https://example.com/stub1RuleA', 'https://example.com/stub1RuleA_2'] + }); + const rule2: RuleImpl = new RuleImpl('stubEngine1', { + name: 'stub1RuleB', + severityLevel: SeverityLevel.Low, + tags: ['Recommended', 'Performance'], + description: 'A simple description this time', + resourceUrls: [] + }); + complicatedRuleSelection.addRule(rule1); + complicatedRuleSelection.addRule(rule2); + const formattedText: string = complicatedRuleSelection.toFormattedOutput(OutputFormat.CSV); const expectedText: string = getContentsOfExpectedOutputFile('multipleRules.goldfile.csv', true, true); expect(formattedText).toEqual(expectedText); }); - - it("When a rule has newlines in its description, they are escaped in the output", async () => { - const ruleSelectionWithNewlineDescriptions = await createRulesWithNewlineDescription(); - const formattedText: string = ruleSelectionWithNewlineDescriptions.toFormattedOutput(OutputFormat.CSV); - const expectedText: string = getContentsOfExpectedOutputFile('ruleSelectionWithNewlineDescriptions.goldfile.csv', true, true); - expect(formattedText).toEqual(expectedText); - }); }); describe("Other misc output formatting tests", () => { @@ -268,10 +279,3 @@ async function createRulesWithEmptyTags(): Promise { await codeAnalyzer.addEnginePlugin(new stubs.EmptyTagEnginePlugin()); return codeAnalyzer.selectRules(['all']) } - -async function createRulesWithNewlineDescription(): Promise { - const codeAnalyzer: CodeAnalyzer = new CodeAnalyzer(CodeAnalyzerConfig.withDefaults()); - codeAnalyzer._setClock(new FixedClock(fixedTime)); - await codeAnalyzer.addEnginePlugin(new stubs.NewlineDescriptionEnginePlugin()); - return codeAnalyzer.selectRules(['all']); -} diff --git a/packages/code-analyzer-core/test/test-data/expectedOutputFiles/multipleRules.goldfile.csv b/packages/code-analyzer-core/test/test-data/expectedOutputFiles/multipleRules.goldfile.csv index 3d3c44e5..6d4c775b 100644 --- a/packages/code-analyzer-core/test/test-data/expectedOutputFiles/multipleRules.goldfile.csv +++ b/packages/code-analyzer-core/test/test-data/expectedOutputFiles/multipleRules.goldfile.csv @@ -1,10 +1,5 @@ "name","engine","description","severity","tags","resources" -"stub1RuleA","stubEngine1","Some description for stub1RuleA",4,"Recommended,CodeStyle","https://example.com/stub1RuleA" -"stub1RuleB","stubEngine1","Some description for stub1RuleB",2,"Recommended,Security","https://example.com/stub1RuleB" -"stub1RuleC","stubEngine1","Some description for stub1RuleC",3,"Recommended,Performance,Custom","https://example.com/stub1RuleC" -"stub1RuleD","stubEngine1","Some description for stub1RuleD",4,"CodeStyle","https://example.com/stub1RuleD" -"stub1RuleE","stubEngine1","Some description for stub1RuleE",3,"Performance","https://example.com/stub1RuleE,https://example.com/stub1RuleE_2" -"stub2RuleA","stubEngine2","Some description for stub2RuleA",3,"Recommended,Security","https://example.com/stub2RuleA" -"stub2RuleB","stubEngine2","Some description for stub2RuleB",4,"Performance,Custom","https://example.com/stub2RuleB" -"stub2RuleC","stubEngine2","Some description for stub2RuleC",2,"Recommended,BestPractice", -"stub3RuleA","stubEngine3","Some description for stub3RuleA",3,"Recommended,ErrorProne", +"stub1RuleA","stubEngine1","A rule description that contains +a new line character, as well as `ticks`, ""double quotes"", 'single quotes, +, and even {curly braces}!",3,"Recommended,CodeStyle","https://example.com/stub1RuleA,https://example.com/stub1RuleA_2" +"stub1RuleB","stubEngine1","A simple description this time",4,"Recommended,Performance", diff --git a/packages/code-analyzer-core/test/test-data/expectedOutputFiles/ruleSelectionWithNewlineDescriptions.goldfile.csv b/packages/code-analyzer-core/test/test-data/expectedOutputFiles/ruleSelectionWithNewlineDescriptions.goldfile.csv deleted file mode 100644 index 37dc4827..00000000 --- a/packages/code-analyzer-core/test/test-data/expectedOutputFiles/ruleSelectionWithNewlineDescriptions.goldfile.csv +++ /dev/null @@ -1,4 +0,0 @@ -"name","engine","description","severity","tags","resources" -"newlineDescriptionRule","newlineDescription","This is a description -it has multiple lines -like, I dunno, 3 maybe?",3,"Recommended,Performance", From d4114e79aea0cc38eb8009f4dc9db94e8bfd6473 Mon Sep 17 00:00:00 2001 From: Joshua Feingold Date: Thu, 14 Aug 2025 12:00:20 -0500 Subject: [PATCH 5/7] NEW @W-17977608@ Rearranged CSV columns --- .../src/output-formats/rules/csv-rules-format.ts | 2 +- .../expectedOutputFiles/multipleRules.goldfile.csv | 8 ++++---- .../test-data/expectedOutputFiles/zeroRules.goldfile.csv | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/code-analyzer-core/src/output-formats/rules/csv-rules-format.ts b/packages/code-analyzer-core/src/output-formats/rules/csv-rules-format.ts index faa873dc..660c1fef 100644 --- a/packages/code-analyzer-core/src/output-formats/rules/csv-rules-format.ts +++ b/packages/code-analyzer-core/src/output-formats/rules/csv-rules-format.ts @@ -10,7 +10,7 @@ export class CsvRulesFormatter implements RuleSelectionFormatter { const options: CsvOptions = { header: true, quoted_string: true, - columns: ["name", "engine", "description", "severity", "tags", "resources"], + columns: ["name", "severity", "engine", "tags", "resources", "description"], cast: { object: value => { /* istanbul ignore else */ diff --git a/packages/code-analyzer-core/test/test-data/expectedOutputFiles/multipleRules.goldfile.csv b/packages/code-analyzer-core/test/test-data/expectedOutputFiles/multipleRules.goldfile.csv index 6d4c775b..34fca9eb 100644 --- a/packages/code-analyzer-core/test/test-data/expectedOutputFiles/multipleRules.goldfile.csv +++ b/packages/code-analyzer-core/test/test-data/expectedOutputFiles/multipleRules.goldfile.csv @@ -1,5 +1,5 @@ -"name","engine","description","severity","tags","resources" -"stub1RuleA","stubEngine1","A rule description that contains +"name","severity","engine","tags","resources","description" +"stub1RuleA",3,"stubEngine1","Recommended,CodeStyle","https://example.com/stub1RuleA,https://example.com/stub1RuleA_2","A rule description that contains a new line character, as well as `ticks`, ""double quotes"", 'single quotes, -, and even {curly braces}!",3,"Recommended,CodeStyle","https://example.com/stub1RuleA,https://example.com/stub1RuleA_2" -"stub1RuleB","stubEngine1","A simple description this time",4,"Recommended,Performance", +, and even {curly braces}!" +"stub1RuleB",4,"stubEngine1","Recommended,Performance",,"A simple description this time" diff --git a/packages/code-analyzer-core/test/test-data/expectedOutputFiles/zeroRules.goldfile.csv b/packages/code-analyzer-core/test/test-data/expectedOutputFiles/zeroRules.goldfile.csv index 2c6c9b94..7079af71 100644 --- a/packages/code-analyzer-core/test/test-data/expectedOutputFiles/zeroRules.goldfile.csv +++ b/packages/code-analyzer-core/test/test-data/expectedOutputFiles/zeroRules.goldfile.csv @@ -1 +1 @@ -"name","engine","description","severity","tags","resources" +"name","severity","engine","tags","resources","description" From f54b0c45cfa5abae178477ee681f2bd4a1d80aa2 Mon Sep 17 00:00:00 2001 From: Joshua Feingold Date: Thu, 14 Aug 2025 12:03:53 -0500 Subject: [PATCH 6/7] NEW @W-17977608@ Reverting unnecessary change --- packages/code-analyzer-core/test/output-format.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/code-analyzer-core/test/output-format.test.ts b/packages/code-analyzer-core/test/output-format.test.ts index 78b33376..f579ca95 100644 --- a/packages/code-analyzer-core/test/output-format.test.ts +++ b/packages/code-analyzer-core/test/output-format.test.ts @@ -14,7 +14,7 @@ let runResults: RunResults; let ruleSelection: RuleSelection; let fixedTime: Date; -beforeEach(async () => { +beforeAll(async () => { const codeAnalyzer: CodeAnalyzer = new CodeAnalyzer(CodeAnalyzerConfig.withDefaults()); fixedTime = new Date(2024, 6, 3, 9, 14, 34, 567); codeAnalyzer._setClock(new FixedClock(fixedTime)); From 14451b9f2e61a1c83e400ffe37180675664bcd27 Mon Sep 17 00:00:00 2001 From: Joshua Feingold Date: Thu, 14 Aug 2025 13:12:26 -0500 Subject: [PATCH 7/7] NEW @W-17977608@ Removed unused stub --- packages/code-analyzer-core/test/stubs.ts | 36 ----------------------- 1 file changed, 36 deletions(-) diff --git a/packages/code-analyzer-core/test/stubs.ts b/packages/code-analyzer-core/test/stubs.ts index a52861ed..1ffbc75e 100644 --- a/packages/code-analyzer-core/test/stubs.ts +++ b/packages/code-analyzer-core/test/stubs.ts @@ -474,42 +474,6 @@ class EmptyTagEngine extends engApi.Engine { } } -export class NewlineDescriptionEnginePlugin extends engApi.EnginePluginV1 { - getAvailableEngineNames(): string[] { - return ['newlineDescription']; - } - - async createEngine(_engineName: string, _config: engApi.ConfigObject): Promise { - return new NewlineDescriptionEngine(); - } -} - -class NewlineDescriptionEngine extends engApi.Engine { - getName(): string { - return 'newlineDescription'; - } - - getEngineVersion(): Promise { - return Promise.resolve('1.0.0'); - } - - describeRules(_describeOptions: engApi.DescribeOptions): Promise { - return Promise.resolve([ - { - name: 'newlineDescriptionRule', - severityLevel: engApi.SeverityLevel.Moderate, - tags: ['Recommended', 'Performance'], - description: `This is a description\nit has multiple lines\nlike, I dunno, 3 maybe?`, - resourceUrls: [] // Deliberately left empty - } - ]); - } - - runRules(_ruleNames: string[], _runOptions: engApi.RunOptions):Promise { - return Promise.resolve({ violations: [] }); - } -} - /** * FutureEnginePlugin - A plugin to help with testing forward compatibility */