Skip to content

Commit b6a0b02

Browse files
committed
update conditions for badge update. fix edge cases
1 parent 6900a51 commit b6a0b02

File tree

1 file changed

+146
-57
lines changed

1 file changed

+146
-57
lines changed

libs/remix-ui/static-analyser/src/lib/remix-ui-static-analyser.tsx

Lines changed: 146 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -437,14 +437,14 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
437437
props.event.trigger("staticAnaysisWarning", [
438438
slitherTotal + ssaTotal + hintsTotal === 0
439439
? -1
440-
: slitherTotal + ssaTotal + hintsTotal,
440+
: !solhintEnabled && !basicEnabled && !slitherEnabled ? -1 : slitherTotal + ssaTotal + hintsTotal,
441441
]);
442442
}
443443
if (!hideWarnings && showLibsWarning) {
444444
props.event.trigger("staticAnaysisWarning", [
445445
slitherWarnings.length + ssaWarnings.length + hints.length === 0
446446
? -1
447-
: slitherWarnings.length + ssaWarnings.length + hints.length,
447+
: !solhintEnabled && !basicEnabled && !slitherEnabled ? -1 : slitherWarnings.length + ssaWarnings.length + hints.length,
448448
]);
449449
}
450450
if (hideWarnings) {
@@ -466,57 +466,71 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
466466
: slitherTotal + ssaTotal + hintsTotal,
467467
]);
468468
}
469-
}, [hideWarnings, showLibsWarning]);
469+
if (hideWarnings && !solhintEnabled && !slitherEnabled && !basicEnabled) {
470+
props.event.trigger("staticAnaysisWarning", [-1])
471+
}
472+
}, [hideWarnings, showLibsWarning])
470473

471474
useEffect(() => {
472-
const slitherTotal =
473-
slitherEnabled &&
475+
let slitherTotal = 0
476+
if (slitherEnabled &&
474477
showSlither &&
475478
slitherWarnings &&
476479
state.data &&
477-
state.source !== null
478-
? slitherWarnings.filter((x) => !x.options.isLibrary && x.hasWarning)
479-
.length
480-
: 0;
481-
const ssaTotal =
482-
basicEnabled && ssaWarnings && state.data && state.source !== null
483-
? ssaWarnings.filter((x) => !x.options.isLibrary && x.hasWarning).length
484-
: 0;
485-
const hintsTotal =
486-
solhintEnabled && hints && state.data && state.source !== null
487-
? hints.length
488-
: 0;
480+
state.source !== null) {
481+
slitherTotal = slitherWarnings.filter((x) => !x.options.isLibrary && x.hasWarning).length
482+
props.analysisModule.slitherEnabled = true
483+
}
484+
let ssaTotal = 0
485+
if (basicEnabled && ssaWarnings && state.data && state.source !== null) {
486+
ssaTotal = ssaWarnings.filter((x) => !x.options.isLibrary && x.hasWarning).length
487+
props.analysisModule.basicEnabled = true
488+
}
489+
490+
let hintsTotal = 0
491+
if (solhintEnabled && hints && state.data && state.source !== null) {
492+
hintsTotal = hints.length
493+
props.analysisModule.solhintEnabled = true
494+
}
489495
props.event.trigger("staticAnaysisWarning", [
490496
slitherTotal + ssaTotal + hintsTotal === 0
491497
? -1
492498
: slitherTotal + ssaTotal + hintsTotal,
493499
]);
494-
}, [hints.length, slitherWarnings.length, ssaWarnings.length]);
500+
}, [hints.length, slitherWarnings.length, ssaWarnings.length])
495501

496502
useEffect(() => {
497-
const slitherTotal =
498-
slitherWarnings &&
503+
let slitherTotal = 0
504+
if (slitherWarnings &&
499505
slitherEnabled &&
500506
showSlither &&
501507
state.data &&
502-
state.source !== null
503-
? slitherWarnings.filter((x) => !x.options.isLibrary && x.hasWarning)
504-
.length
505-
: 0;
506-
const ssaTotal =
507-
ssaWarnings && basicEnabled && state.data && state.source !== null
508-
? ssaWarnings.filter((x) => !x.options.isLibrary && x.hasWarning).length
509-
: 0;
510-
const hintsTotal =
511-
hints && solhintEnabled && state.data && state.source !== null
512-
? hints.length
513-
: 0;
508+
state.source !== null) {
509+
slitherTotal = slitherWarnings.filter((x) => !x.options.isLibrary && x.hasWarning)
510+
.length
511+
props.analysisModule.slitherEnabled = true
512+
}
513+
514+
let ssaTotal = 0
515+
if (ssaWarnings && basicEnabled && state.data && state.source !== null) {
516+
ssaTotal = ssaWarnings.filter((x) => !x.options.isLibrary && x.hasWarning).length
517+
props.analysisModule.basicEnabled = true
518+
}
519+
520+
let hintsTotal = 0
521+
if (hints && solhintEnabled && state.data && state.source !== null) {
522+
hintsTotal = hints.length
523+
}
514524
props.event.trigger("staticAnaysisWarning", [
515525
slitherTotal + ssaTotal + hintsTotal === 0
516526
? -1
517527
: slitherTotal + ssaTotal + hintsTotal,
518-
]);
519-
}, [solhintEnabled, basicEnabled, slitherEnabled, showSlither]);
528+
])
529+
}, [solhintEnabled, basicEnabled, slitherEnabled, showSlither])
530+
531+
useEffect(() => {
532+
533+
}, [])
520534

521535
const handleSlitherEnabled = async () => {
522536
const checkRemixd = await props.analysisModule.call(
@@ -525,36 +539,42 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
525539
"remixd"
526540
);
527541
if (showSlither) {
528-
setShowSlither(false);
542+
setShowSlither(false)
543+
props.analysisModule.slitherEnabled = false
529544
}
530545
if (!showSlither) {
531-
setShowSlither(true);
546+
setShowSlither(true)
547+
props.analysisModule.slitherEnabled = true
532548
}
533549
};
534550

535551
const handleBasicEnabled = () => {
536552
if (basicEnabled) {
537-
setBasicEnabled(false);
553+
setBasicEnabled(false)
554+
props.analysisModule.basicEnabled = false
538555
if (solhintEnabled) {
539-
setSelectedTab("solhint");
556+
setSelectedTab("solhint")
540557
}
541-
props.event.trigger("staticAnalysisWarning", [-1]);
558+
props.event.trigger("staticAnalysisWarning", [-1])
542559
} else {
543-
setBasicEnabled(true);
544-
props.event.trigger("staticAnalysisWarning", [-1]);
560+
setBasicEnabled(true)
561+
props.analysisModule.basicEnabled = true
562+
props.event.trigger("staticAnalysisWarning", [-1])
545563
}
546564
};
547565

548566
const handleLinterEnabled = () => {
549567
if (solhintEnabled) {
550568
setSolhintEnabled(false);
569+
props.analysisModule.solhintEnabled = false
551570
if (basicEnabled) {
552-
setSelectedTab("remix");
571+
setSelectedTab("remix")
553572
}
554-
props.event.trigger("staticAnalysisWarning", [-1]);
573+
props.event.trigger("staticAnalysisWarning", [-1])
555574
} else {
556-
setSolhintEnabled(true);
557-
props.event.trigger("staticAnalysisWarning", [-1]);
575+
setSolhintEnabled(true)
576+
props.analysisModule.solhintEnabled = true
577+
props.event.trigger("staticAnalysisWarning", [-1])
558578
}
559579
};
560580

@@ -635,7 +655,59 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
635655
</div>
636656
</div>
637657
))
638-
: hintErrors.map((hint, index) => (
658+
: !hideWarnings && !showLibsWarning && !basicEnabled && solhintEnabled ? hints.map((hint, index) => (
659+
<div
660+
key={index}
661+
className={`${
662+
hint.type === "warning"
663+
? "alert alert-warning"
664+
: "alert alert-danger"
665+
}`}
666+
style={{
667+
cursor: "pointer",
668+
overflow: "hidden",
669+
textOverflow: "ellipsis",
670+
}}
671+
onClick={async () => {
672+
await props.analysisModule.call(
673+
"editor",
674+
"discardHighlight"
675+
);
676+
await props.analysisModule.call(
677+
"editor",
678+
"highlight",
679+
{
680+
end: {
681+
line: hint.line,
682+
column: hint.column + 1,
683+
},
684+
start: {
685+
line: hint.line,
686+
column: hint.column,
687+
},
688+
},
689+
state.file,
690+
"",
691+
{ focus: true }
692+
);
693+
}}
694+
>
695+
<div>
696+
<span className="text-wrap">
697+
{hint.formattedMessage}
698+
</span>
699+
<br />
700+
<CustomTooltip
701+
placement="right"
702+
tooltipId="errorTooltip"
703+
tooltipText={`Position in ${state.file}`}
704+
tooltipClasses="text-nowrap"
705+
>
706+
<span>{`Pos: ${hint.column}:${hint.line}`}</span>
707+
</CustomTooltip>
708+
</div>
709+
</div>
710+
)) : hintErrors.map((hint, index) => (
639711
<div
640712
key={index}
641713
className="alert alert-danger"
@@ -748,7 +820,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
748820
),
749821
child: (
750822
<>
751-
{Object.entries(warningState).length > 0 ? (
823+
{ssaWarnings.length > 0 ? (
752824
<div id="staticanalysisresult">
753825
<div className="mb-4 pt-2">
754826
<div>
@@ -788,7 +860,24 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
788860
/>
789861
</div>
790862
))
791-
: null}
863+
: !hideWarnings && !showLibsWarning && basicEnabled
864+
? ssaWarnings.filter((x) => !x.options.isLibrary && x.hasWarning)
865+
.map((x, i) => (
866+
<div
867+
data-id={`staticAnalysisModule${x.warningModuleName}${i}`}
868+
id={`staticAnalysisModule${x.warningModuleName}${i}`}
869+
key={i}
870+
>
871+
<ErrorRenderer
872+
name={`staticAnalysisModule${x.warningModuleName}${i}`}
873+
message={x.msg}
874+
opt={x.options}
875+
warningErrors={""}
876+
ssaState={state}
877+
editor={props.analysisModule}
878+
/>
879+
</div>
880+
)) : null}
792881
</div>
793882
</div>
794883
</div>
@@ -912,7 +1001,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
9121001
</>
9131002
),
9141003
},
915-
];
1004+
]
9161005

9171006
const checkBasicStatus = () => {
9181007
return Object.values(groupedModules)
@@ -923,7 +1012,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
9231012
})
9241013
.flat()
9251014
.every((el) => categoryIndex.includes(el));
926-
};
1015+
}
9271016
return (
9281017
<div className="analysis_3ECCBV px-3 pb-1">
9291018
<div className="my-2 d-flex flex-column align-items-left">
@@ -1027,7 +1116,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
10271116
buttonText={`Analyze ${state.file}`}
10281117
title={`${runButtonTitle}`}
10291118
classList="btn btn-sm btn-primary btn-block"
1030-
onClick={async () =>
1119+
onClick={async () => {
10311120
await run(
10321121
state.data,
10331122
state.source,
@@ -1055,15 +1144,15 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
10551144
solhintEnabled,
10561145
basicEnabled
10571146
)
1058-
}
1147+
}}
10591148
disabled={
10601149
state.data === null ||
10611150
!isSupportedVersion ||
10621151
(!solhintEnabled && !basicEnabled)
10631152
}
10641153
/>
10651154
)}
1066-
{ssaWarnings.length > 0 && hints.length > 0 ? (
1155+
{ssaWarnings.length > 0 || hints.length > 0 ? (
10671156
<div className="d-flex border-top flex-column">
10681157
{slitherWarnings.length > 0 ||
10691158
hints.length > 0 ||
@@ -1130,7 +1219,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
11301219
</Nav.Item>
11311220
) : null}
11321221
{solhintEnabled ? (
1133-
<Nav.Item className="text-decoration-none font-weight-bold px-2">
1222+
<Nav.Item>
11341223
<Nav.Link
11351224
className="text-decoration-none font-weight-bold px-2"
11361225
eventKey={tabKeys[0].tabKey}
@@ -1140,7 +1229,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
11401229
</Nav.Item>
11411230
) : null}
11421231
{slitherEnabled && showSlither ? (
1143-
<Nav.Item className="text-decoration-none font-weight-bold px-2">
1232+
<Nav.Item>
11441233
<Nav.Link
11451234
className="text-decoration-none font-weight-bold px-2"
11461235
eventKey={tabKeys[2].tabKey}
@@ -1168,7 +1257,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
11681257
</div>
11691258
</div>
11701259
</div>
1171-
);
1172-
};
1260+
)
1261+
}
11731262

11741263
export default RemixUiStaticAnalyser;

0 commit comments

Comments
 (0)