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 485c605038..63cdca20b6 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 @@ -110,12 +110,9 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { if (lastCompilationResult && categoryIndex.length > 0) { let warningCount = 0 const warningMessage = [] - if (slitherEnabled) { - props.analysisModule.call('solidity-logic', 'getCompilerState').then((compilerState) => { - const { currentVersion, optimize, evmVersion } = compilerState - props.analysisModule.call('slither', 'analyse', state.file, { currentVersion, optimize, evmVersion }).then(console.log) - }) - } + const warningErrors = [] + + /******************** Remix Analyzer ********************/ runner.run(lastCompilationResult, categoryIndex, results => { results.map((result) => { let moduleName @@ -126,7 +123,6 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { } }) }) - const warningErrors = [] result.report.map((item) => { let location: any = {} let locationString = 'not available' @@ -170,25 +166,85 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { warningMessage.push({ msg, options, hasWarning: true, warningModuleName: moduleName }) }) }) - const resultArray = [] - warningMessage.map(x => { - resultArray.push(x) - }) - function groupBy (objectArray, property) { - return objectArray.reduce((acc, obj) => { - const key = obj[property] - if (!acc[key]) { - acc[key] = [] + }) + + /******************** Slither Analyzer Start ********************/ + + if (slitherEnabled) { + props.analysisModule.call('solidity-logic', 'getCompilerState').then((compilerState) => { + const { currentVersion, optimize, evmVersion } = compilerState + props.analysisModule.call('slither', 'analyse', state.file, { currentVersion, optimize, evmVersion }).then((result) => { + console.log('slither result') + if (result.status) { + const report = result.data + report.map((item) => { + let location: any = {} + let locationString = 'not available' + let column = 0 + let row = 0 + let fileName = currentFile + if (item.sourceMap & item.sourceMap.length) { + location = { + start: item.sourceMap[0].source_mapping.start, + length: item.sourceMap[0].source_mapping.length + } + location = props.analysisModule._deps.offsetToLineColumnConverter.offsetToLineColumn( + location, + 0, + lastCompilationSource.sources, + lastCompilationResult.sources + ) + console.log('location:', location) + row = location.start.line + column = location.start.column + locationString = row + 1 + ':' + column + ':' + fileName = Object.keys(lastCompilationResult.contracts)[0] + } + warningCount++ + const msg = message(item.title, item.description, item.more, fileName, locationString) + const options = { + type: 'warning', + useSpan: true, + errFile: fileName, + fileName, + errLine: row, + errCol: column, + item: item, + name: item.title, + locationString, + more: item.more, + location: location + } + warningErrors.push(options) + warningMessage.push({ msg, options, hasWarning: true, warningModuleName: item.title }) + }) + } + const resultArray = [] + warningMessage.map(x => { + resultArray.push(x) + }) + function groupBy (objectArray, property) { + return objectArray.reduce((acc, obj) => { + const key = obj[property] + if (!acc[key]) { + acc[key] = [] + } + // Add object to list for given key's value + acc[key].push(obj) + return acc + }, {}) } - // Add object to list for given key's value - acc[key].push(obj) - return acc - }, {}) - } - const groupedCategory = groupBy(resultArray, 'warningModuleName') - setWarningState(groupedCategory) - }) + const groupedCategory = groupBy(resultArray, 'warningModuleName') + setWarningState(groupedCategory) + }) + }) + + } + + + /******************** Slither Analyzer Finish ********************/ + if (categoryIndex.length > 0) { props.event.trigger('staticAnaysisWarning', [warningCount]) }