refactored static analysis to improve performance

pull/1104/head
tizah 4 years ago
parent 2a5ffe1df8
commit 704010894a
  1. 45
      libs/remix-ui/static-analyser/src/lib/Checkbox/StaticAnalyserCheckedBox.tsx
  2. 96
      libs/remix-ui/static-analyser/src/lib/remix-ui-static-analyser.tsx

@ -1,45 +0,0 @@
import React from 'react' //eslint-disable-line
interface StaticAnalyserCheckBoxProps {
onClick?: (event) => void
onChange?: (event) => void
label?: string
inputType?: string
name?: string
checked?: boolean
id?: string
itemName?: string
categoryId?: string
}
const StaticAnalyserCheckedBox = ({
id,
label,
onClick,
inputType,
name,
checked,
onChange,
itemName,
categoryId
}: StaticAnalyserCheckBoxProps) => {
return (
<div className="listenOnNetwork_2A0YE0 custom-control custom-checkbox" style={{ display: 'flex', alignItems: 'center' }} onClick={onClick}>
<input
id={id}
type={inputType}
onChange={onChange}
style={{ verticalAlign: 'bottom' }}
name={name}
className="custom-control-input"
checked={checked}
/>
<label className="form-check-label custom-control-label" id={`heading${categoryId}`} style={{ paddingTop: '0.15rem' }}>
{name ? <div className="font-weight-bold">{itemName}</div> : ''}
{label}
</label>
</div>
)
}
export default StaticAnalyserCheckedBox

@ -55,47 +55,9 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
return indexOfCategory return indexOfCategory
} }
const [autoRun, setAutoRun] = useState(true) const [autoRun, setAutoRun] = useState(true)
const [categoryIndex, setCategoryIndex] = useState(groupedModuleIndex(groupedModules))
// const initialState = { categoryIndex: [] }
// const reducer = (state, action) => {
// console.log({ action })
// switch (action.type) {
// case 'initialize':
// return { categoryIndex: groupedModuleIndex(groupedModules) }
// case 'uncheck':
// return {
// categoryIndex: state.categoryIndex.filter((el) => {
// return !action.payload.includes(el)
// })
// }
// case 'check':
// return { categoryIndex: _.uniq([...state.categoryIndex, ...action.payload]) }
// case 'uncheckSingle':
// return { categoryIndex: state.categoryIndex.filter(val => val !== action.payload) }
// case 'checkSingle':
// return { categoryIndex: _.uniq([...state.categoryIndex, action.payload]) }
// default:
// return { categoryIndex: groupedModuleIndex(groupedModules) }
// }
// }
const [state, dispatch] = useReducer(analysisReducer, initialState)
const warningContainer = React.useRef(null) const warningContainer = React.useRef(null)
const [runButtonState, setRunButtonState] = useState(true)
const [result, setResult] = useState({
lastCompilationResult: null,
lastCompilationSource: null,
currentFile: 'No file compiled'
})
const [, setModuleNameResult] = useState(null)
const [, setWarning] = useState({
options: {},
hasWarning: false,
warningErrors: []
})
const [warningState, setWarningState] = useState([]) const [warningState, setWarningState] = useState([])
const [state, dispatch] = useReducer(analysisReducer, initialState) const [state, dispatch] = useReducer(analysisReducer, initialState)
@ -151,7 +113,10 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
? (<span><a href={more} target='_blank'>more</a></span>) ? (<span><a href={more} target='_blank'>more</a></span>)
: (<span> </span>) : (<span> </span>)
} }
}, [autoRun, state, props.analysisModule, setWarning]) <span className="" title={Position in ${fileName}}>Pos: ${locationString}</span>
</span>`
)
}
const run = (lastCompilationResult, lastCompilationSource, currentFile) => { const run = (lastCompilationResult, lastCompilationSource, currentFile) => {
if (autoRun) { if (autoRun) {
@ -159,7 +124,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
let warningCount = 0 let warningCount = 0
const warningMessage = [] const warningMessage = []
runner.run(lastCompilationResult, state.categoryIndex, results => { runner.run(lastCompilationResult, categoryIndex, results => {
results.map((result) => { results.map((result) => {
let moduleName let moduleName
Object.keys(groupedModules).map(key => { Object.keys(groupedModules).map(key => {
@ -195,6 +160,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
fileName = Object.keys(lastCompilationResult.contracts)[file] fileName = Object.keys(lastCompilationResult.contracts)[file]
} }
warningCount++ warningCount++
const msg = message(item.name, item.warning, item.more, fileName, locationString)
const options = { const options = {
type: 'warning', type: 'warning',
useSpan: true, useSpan: true,
@ -227,16 +193,11 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
return acc return acc
}, {}) }, {})
} }
const groupedCategory = groupBy(resultArray, 'warningModuleName') const groupedCategory = groupBy(resultArray, 'warningModuleName')
console.log({ warningCount }, ' 221')
console.log({ groupedCategory })
setWarningState(groupedCategory) setWarningState(groupedCategory)
console.log({ warningState })
console.log({ warningCount }, ' 223')
}) })
console.log({ warningCount }, ' CategoryIndex outside function') if (categoryIndex.length > 0) {
if (state.categoryIndex.length > 0) {
console.log(state.categoryIndex, ' CategoryIndex in execute funtions')
props.event.trigger('staticAnaysisWarning', [warningCount]) props.event.trigger('staticAnaysisWarning', [warningCount])
} }
} else { } else {
@ -250,19 +211,27 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
const handleCheckAllModules = (groupedModules) => { const handleCheckAllModules = (groupedModules) => {
const index = groupedModuleIndex(groupedModules) const index = groupedModuleIndex(groupedModules)
if (index.every(el => state.categoryIndex.includes(el))) { if (index.every(el => categoryIndex.includes(el))) {
dispatch({ type: 'uncheck', payload: index }) setCategoryIndex(
categoryIndex.filter((el) => {
return !index.includes(el)
})
)
} else { } else {
dispatch({ type: 'check', payload: index }) setCategoryIndex(_.uniq([...categoryIndex, ...index]))
} }
} }
const handleCheckOrUncheckCategory = (category) => { const handleCheckOrUncheckCategory = (category) => {
const index = groupedModuleIndex(category) const index = groupedModuleIndex(category)
if (index.every(el => state.categoryIndex.includes(el))) { if (index.every(el => categoryIndex.includes(el))) {
dispatch({ type: 'uncheck', payload: index }) setCategoryIndex(
categoryIndex.filter((el) => {
return !index.includes(el)
})
)
} else { } else {
dispatch({ type: 'check', payload: index }) setCategoryIndex(_.uniq([...categoryIndex, ...index]))
} }
} }
@ -276,10 +245,10 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
const handleCheckSingle = (event, _index) => { const handleCheckSingle = (event, _index) => {
_index = _index.toString() _index = _index.toString()
if (state.categoryIndex.includes(_index)) { if (categoryIndex.includes(_index)) {
dispatch({ type: 'uncheckSingle', payload: _index }) setCategoryIndex(categoryIndex.filter(val => val !== _index))
} else { } else {
dispatch({ type: 'checkSingle', payload: _index }) setCategoryIndex(_.uniq([...categoryIndex, _index]))
} }
} }
@ -294,7 +263,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
itemName={item.name} itemName={item.name}
label={item.description} label={item.description}
onClick={event => handleCheckSingle(event, item._index)} onClick={event => handleCheckSingle(event, item._index)}
checked={state.categoryIndex.includes(item._index.toString())} checked={categoryIndex.includes(item._index.toString())}
onChange={() => {}} onChange={() => {}}
/> />
</div> </div>
@ -323,7 +292,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
expand={false} expand={false}
> >
<div> <div>
<RemixUiCheckbox onClick={() => handleCheckOrUncheckCategory(category)} id={categoryId} inputType="checkbox" label={`Select ${category[0].categoryDisplayName}`} name='checkCategoryEntry' checked={category.map(x => x._index.toString()).every(el => state.categoryIndex.includes(el))} onChange={() => {}}/> <RemixUiCheckbox onClick={() => handleCheckOrUncheckCategory(category)} id={categoryId} inputType="checkbox" label={`Select ${category[0].categoryDisplayName}`} name='checkCategoryEntry' checked={category.map(x => x._index.toString()).every(el => categoryIndex.includes(el))} onChange={() => {}}/>
</div> </div>
<div className="w-100 d-block px-2 my-1 entries collapse multi-collapse" id={`heading${categoryId}`}> <div className="w-100 d-block px-2 my-1 entries collapse multi-collapse" id={`heading${categoryId}`}>
{category.map((item, i) => { {category.map((item, i) => {
@ -351,7 +320,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
return (value.map(x => { return (value.map(x => {
return x._index.toString() return x._index.toString()
})) }))
}).flat().every(el => state.categoryIndex.includes(el))} }).flat().every(el => categoryIndex.includes(el))}
label="Select all" label="Select all"
onClick={() => handleCheckAllModules(groupedModules)} onClick={() => handleCheckAllModules(groupedModules)}
onChange={() => {}} onChange={() => {}}
@ -385,11 +354,10 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
{state.file} {state.file}
</span> </span>
</div> </div>
{ console.log({ warningState }) } { categoryIndex.length > 0 && Object.entries(warningState).length > 0 &&
{ state.categoryIndex.length > 0 && Object.entries(warningState).length > 0 &&
<div id='staticanalysisresult' > <div id='staticanalysisresult' >
<div className="mb-4"> <div className="mb-4">
{/* { {
(Object.entries(warningState).map((element) => ( (Object.entries(warningState).map((element) => (
<> <>
<span className="text-dark h6">{element[0]}</span> <span className="text-dark h6">{element[0]}</span>
@ -403,7 +371,7 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
))} ))}
</> </>
))) )))
} */} }
</div> </div>
</div> </div>
} }

Loading…
Cancel
Save