From 775ee8ad2c021756659e325bd98fb1d22df9b481 Mon Sep 17 00:00:00 2001 From: Joseph Izang Date: Wed, 5 Jul 2023 23:15:59 +0100 Subject: [PATCH] update conditions for badge update. fix edge cases --- .../src/lib/remix-ui-static-analyser.tsx | 203 +++++++++++++----- 1 file changed, 146 insertions(+), 57 deletions(-) diff --git a/libs/remix-ui/static-analyser/src/lib/remix-ui-static-analyser.tsx b/libs/remix-ui/static-analyser/src/lib/remix-ui-static-analyser.tsx index 28749241bd..b56b8cf773 100644 --- a/libs/remix-ui/static-analyser/src/lib/remix-ui-static-analyser.tsx +++ b/libs/remix-ui/static-analyser/src/lib/remix-ui-static-analyser.tsx @@ -437,14 +437,14 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { props.event.trigger("staticAnaysisWarning", [ slitherTotal + ssaTotal + hintsTotal === 0 ? -1 - : slitherTotal + ssaTotal + hintsTotal, + : !solhintEnabled && !basicEnabled && !slitherEnabled ? -1 : slitherTotal + ssaTotal + hintsTotal, ]); } if (!hideWarnings && showLibsWarning) { props.event.trigger("staticAnaysisWarning", [ slitherWarnings.length + ssaWarnings.length + hints.length === 0 ? -1 - : slitherWarnings.length + ssaWarnings.length + hints.length, + : !solhintEnabled && !basicEnabled && !slitherEnabled ? -1 : slitherWarnings.length + ssaWarnings.length + hints.length, ]); } if (hideWarnings) { @@ -466,57 +466,71 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { : slitherTotal + ssaTotal + hintsTotal, ]); } - }, [hideWarnings, showLibsWarning]); + if (hideWarnings && !solhintEnabled && !slitherEnabled && !basicEnabled) { + props.event.trigger("staticAnaysisWarning", [-1]) + } + }, [hideWarnings, showLibsWarning]) useEffect(() => { - const slitherTotal = - slitherEnabled && + let slitherTotal = 0 + if (slitherEnabled && showSlither && slitherWarnings && state.data && - state.source !== null - ? slitherWarnings.filter((x) => !x.options.isLibrary && x.hasWarning) - .length - : 0; - const ssaTotal = - basicEnabled && ssaWarnings && state.data && state.source !== null - ? ssaWarnings.filter((x) => !x.options.isLibrary && x.hasWarning).length - : 0; - const hintsTotal = - solhintEnabled && hints && state.data && state.source !== null - ? hints.length - : 0; + state.source !== null) { + slitherTotal = slitherWarnings.filter((x) => !x.options.isLibrary && x.hasWarning).length + props.analysisModule.slitherEnabled = true + } + let ssaTotal = 0 + if (basicEnabled && ssaWarnings && state.data && state.source !== null) { + ssaTotal = ssaWarnings.filter((x) => !x.options.isLibrary && x.hasWarning).length + props.analysisModule.basicEnabled = true + } + + let hintsTotal = 0 + if (solhintEnabled && hints && state.data && state.source !== null) { + hintsTotal = hints.length + props.analysisModule.solhintEnabled = true + } props.event.trigger("staticAnaysisWarning", [ slitherTotal + ssaTotal + hintsTotal === 0 ? -1 : slitherTotal + ssaTotal + hintsTotal, ]); - }, [hints.length, slitherWarnings.length, ssaWarnings.length]); + }, [hints.length, slitherWarnings.length, ssaWarnings.length]) useEffect(() => { - const slitherTotal = - slitherWarnings && + let slitherTotal = 0 + if (slitherWarnings && slitherEnabled && showSlither && state.data && - state.source !== null - ? slitherWarnings.filter((x) => !x.options.isLibrary && x.hasWarning) - .length - : 0; - const ssaTotal = - ssaWarnings && basicEnabled && state.data && state.source !== null - ? ssaWarnings.filter((x) => !x.options.isLibrary && x.hasWarning).length - : 0; - const hintsTotal = - hints && solhintEnabled && state.data && state.source !== null - ? hints.length - : 0; + state.source !== null) { + slitherTotal = slitherWarnings.filter((x) => !x.options.isLibrary && x.hasWarning) + .length + props.analysisModule.slitherEnabled = true + } + + let ssaTotal = 0 + if (ssaWarnings && basicEnabled && state.data && state.source !== null) { + ssaTotal = ssaWarnings.filter((x) => !x.options.isLibrary && x.hasWarning).length + props.analysisModule.basicEnabled = true + } + + let hintsTotal = 0 + if (hints && solhintEnabled && state.data && state.source !== null) { + hintsTotal = hints.length + } props.event.trigger("staticAnaysisWarning", [ slitherTotal + ssaTotal + hintsTotal === 0 ? -1 : slitherTotal + ssaTotal + hintsTotal, - ]); - }, [solhintEnabled, basicEnabled, slitherEnabled, showSlither]); + ]) + }, [solhintEnabled, basicEnabled, slitherEnabled, showSlither]) + + useEffect(() => { + + }, []) const handleSlitherEnabled = async () => { const checkRemixd = await props.analysisModule.call( @@ -525,36 +539,42 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { "remixd" ); if (showSlither) { - setShowSlither(false); + setShowSlither(false) + props.analysisModule.slitherEnabled = false } if (!showSlither) { - setShowSlither(true); + setShowSlither(true) + props.analysisModule.slitherEnabled = true } }; const handleBasicEnabled = () => { if (basicEnabled) { - setBasicEnabled(false); + setBasicEnabled(false) + props.analysisModule.basicEnabled = false if (solhintEnabled) { - setSelectedTab("solhint"); + setSelectedTab("solhint") } - props.event.trigger("staticAnalysisWarning", [-1]); + props.event.trigger("staticAnalysisWarning", [-1]) } else { - setBasicEnabled(true); - props.event.trigger("staticAnalysisWarning", [-1]); + setBasicEnabled(true) + props.analysisModule.basicEnabled = true + props.event.trigger("staticAnalysisWarning", [-1]) } }; const handleLinterEnabled = () => { if (solhintEnabled) { setSolhintEnabled(false); + props.analysisModule.solhintEnabled = false if (basicEnabled) { - setSelectedTab("remix"); + setSelectedTab("remix") } - props.event.trigger("staticAnalysisWarning", [-1]); + props.event.trigger("staticAnalysisWarning", [-1]) } else { - setSolhintEnabled(true); - props.event.trigger("staticAnalysisWarning", [-1]); + setSolhintEnabled(true) + props.analysisModule.solhintEnabled = true + props.event.trigger("staticAnalysisWarning", [-1]) } }; @@ -635,7 +655,59 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { )) - : hintErrors.map((hint, index) => ( + : !hideWarnings && !showLibsWarning && !basicEnabled && solhintEnabled ? hints.map((hint, index) => ( +
{ + await props.analysisModule.call( + "editor", + "discardHighlight" + ); + await props.analysisModule.call( + "editor", + "highlight", + { + end: { + line: hint.line, + column: hint.column + 1, + }, + start: { + line: hint.line, + column: hint.column, + }, + }, + state.file, + "", + { focus: true } + ); + }} + > +
+ + {hint.formattedMessage} + +
+ + {`Pos: ${hint.column}:${hint.line}`} + +
+
+ )) : hintErrors.map((hint, index) => (
{ ), child: ( <> - {Object.entries(warningState).length > 0 ? ( + {ssaWarnings.length > 0 ? (
@@ -788,7 +860,24 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { />
)) - : null} + : !hideWarnings && !showLibsWarning && basicEnabled + ? ssaWarnings.filter((x) => !x.options.isLibrary && x.hasWarning) + .map((x, i) => ( +
+ +
+ )) : null}
@@ -912,7 +1001,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { ), }, - ]; + ] const checkBasicStatus = () => { return Object.values(groupedModules) @@ -923,7 +1012,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { }) .flat() .every((el) => categoryIndex.includes(el)); - }; + } return (
@@ -1027,7 +1116,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { buttonText={`Analyze ${state.file}`} title={`${runButtonTitle}`} classList="btn btn-sm btn-primary btn-block" - onClick={async () => + onClick={async () => { await run( state.data, state.source, @@ -1055,7 +1144,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { solhintEnabled, basicEnabled ) - } + }} disabled={ state.data === null || !isSupportedVersion || @@ -1063,7 +1152,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { } /> )} - {ssaWarnings.length > 0 && hints.length > 0 ? ( + {ssaWarnings.length > 0 || hints.length > 0 ? (
{slitherWarnings.length > 0 || hints.length > 0 || @@ -1130,7 +1219,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { ) : null} {solhintEnabled ? ( - + { ) : null} {slitherEnabled && showSlither ? ( - + {
- ); -}; + ) +} export default RemixUiStaticAnalyser;