From 197ad08f357a6a294758c179ede64a8979438e03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr> Date: Thu, 28 Apr 2022 14:41:57 +0200 Subject: [PATCH] [ivette] rebasing types --- ivette/src/dome/main/dome.ts | 2 +- ivette/src/dome/renderer/dome.tsx | 4 +- ivette/src/dome/renderer/frame/toolbars.tsx | 77 +++++++++++---------- ivette/src/frama-c/kernel/ASTview.tsx | 9 +-- ivette/src/frama-c/states.ts | 6 +- ivette/src/renderer/Controller.tsx | 8 +-- ivette/src/renderer/Extensions.tsx | 2 +- 7 files changed, 53 insertions(+), 55 deletions(-) diff --git a/ivette/src/dome/main/dome.ts b/ivette/src/dome/main/dome.ts index 4bf31f95ae2..6b77b345566 100644 --- a/ivette/src/dome/main/dome.ts +++ b/ivette/src/dome/main/dome.ts @@ -526,7 +526,7 @@ function createSecondaryWindow( _event: Electron.Event, chromiumArgv: string[], wdir: string, -) { +): void { const argStart = "--second-instance="; let argString = chromiumArgv.find(a => a.startsWith(argStart)); if (argString) { diff --git a/ivette/src/dome/renderer/dome.tsx b/ivette/src/dome/renderer/dome.tsx index 467645b1915..e3abbb21fe4 100644 --- a/ivette/src/dome/renderer/dome.tsx +++ b/ivette/src/dome/renderer/dome.tsx @@ -372,7 +372,7 @@ const customItemCallbacks = new Map<string, callback>(); @param label - the menu title (shall be unique) */ -export function addMenu(label: string) { +export function addMenu(label: string): void { ipcRenderer.send('dome.ipc.menu.addmenu', label); } @@ -417,7 +417,7 @@ export interface MenuItemProps { windows would be ignored. It is also possible to call this function from the main process. */ -export function addMenuItem(props: MenuItemProps) { +export function addMenuItem(props: MenuItemProps): void { if (!props.id && props.type !== 'separator') { // eslint-disable-next-line no-console console.error('[Dome] Missing menu-item identifier', props); diff --git a/ivette/src/dome/renderer/frame/toolbars.tsx b/ivette/src/dome/renderer/frame/toolbars.tsx index dfc38bfb89c..4693b33655e 100644 --- a/ivette/src/dome/renderer/frame/toolbars.tsx +++ b/ivette/src/dome/renderer/frame/toolbars.tsx @@ -286,7 +286,7 @@ export interface Hint { } /** Total order on hints. */ -export function byHint(a: Hint, b: Hint) { +export function byHint(a: Hint, b: Hint): number { return (a.rank ?? 0) - (b.rank ?? 0); } @@ -322,15 +322,18 @@ export interface ActionMode { const searchEvaluators = new Map<string, HintsEvaluator>(); // Updates to the new evaluator if the id is already registered -export function registerSearchHints(id: string, search: HintsEvaluator) { +export function registerSearchHints( + id: string, + search: HintsEvaluator +): void { searchEvaluators.set(id, search); } -export function unregisterSearchHints(id: string) { +export function unregisterSearchHints(id: string): void { searchEvaluators.delete(id); } -async function searchHints(pattern: string) { +async function searchHints(pattern: string): Promise<Hint[]> { if (pattern === '') return []; const promises = Array.from(searchEvaluators).map(([_id, E]) => E(pattern)); const hints = await Promise.all(promises); @@ -356,7 +359,7 @@ interface ModeButtonComponentProps { onClick: () => void; } -function ModeButton(props: ModeButtonComponentProps) { +function ModeButton(props: ModeButtonComponentProps): JSX.Element { const { current, onClick } = props; return ( <div @@ -382,11 +385,11 @@ interface SuggestionsProps { index: number; } -function scrollToRef (r: null | HTMLLabelElement) { +function scrollToRef(r: null | HTMLLabelElement): void { if (r) r.scrollIntoView({ block: 'nearest' }); } -function Suggestions(props: SuggestionsProps) { +function Suggestions(props: SuggestionsProps): JSX.Element { const { hints, onHint, index } = props; // Computing the relevant suggestions. */ @@ -413,17 +416,13 @@ function Suggestions(props: SuggestionsProps) { <div style={{ visibility: suggestions.length > 0 ? 'visible' : 'hidden' }} className='dome-xToolBar-suggestions' - onMouseDown={ (event) => event.preventDefault() } + onMouseDown={(event) => event.preventDefault()} > {suggestions} </div> ); } -interface Searching { - pattern?: string; - timer?: NodeJS.Timeout | undefined; - onSearch?: ((p: string) => void); // -------------------------------------------------------------------------- // --- ModalActionField input field component // -------------------------------------------------------------------------- @@ -441,16 +440,16 @@ interface ActionInputProps { inputRef: React.MutableRefObject<HTMLInputElement | null>; } -function ActionInput(props: ActionInputProps) { +function ActionInput(props: ActionInputProps): JSX.Element { const { title, placeholder, hints, onHint, onEnter } = props; const { index, setIndex, pattern, setPattern, inputRef } = props; // Blur Event - const onBlur = () => { setPattern(''); setIndex(-1); }; + const onBlur = (): void => { setPattern(''); setIndex(-1); }; // Key Up Events - const onKeyUp = (evt: React.KeyboardEvent) => { - const blur = () => inputRef.current?.blur(); + const onKeyUp = (evt: React.KeyboardEvent): void => { + const blur = (): void => inputRef.current?.blur(); switch (evt.key) { case 'Escape': blur(); @@ -473,12 +472,12 @@ function ActionInput(props: ActionInputProps) { }; // Key Down Events. Disables the default behavior on ArrowUp and ArrowDown. - const onKeyDown = (evt: React.KeyboardEvent) => { + const onKeyDown = (evt: React.KeyboardEvent): void => { if (evt.key === 'ArrowUp' || evt.key === 'ArrowDown') evt.preventDefault(); }; // // Input Events - const onChange = (evt: React.ChangeEvent<HTMLInputElement>) => { + const onChange = (evt: React.ChangeEvent<HTMLInputElement>): void => { setIndex(-1); setPattern(evt.target.value); }; @@ -508,27 +507,29 @@ export const RegisterMode: Event<ActionMode> = export const UnregisterMode: Event<ActionMode> = new Event('dome.actionmode.unregister'); -export function ModalActionField() { - +export function ModalActionField(): JSX.Element { + // Internal state of the component along with useful functions acting on it. const inputRef = React.useRef<HTMLInputElement | null>(null); const [index, setIndex] = React.useState(-1); const [pattern, setPattern] = React.useState(''); const [current, onModeChange] = React.useState<ActionMode>(searchMode); - const focus = () => inputRef.current?.focus(); - const changeMode = (m: ActionMode) => () => { onModeChange(m); focus(); }; - const toDefault = () => onModeChange(searchMode); - const reset = (m: ActionMode) => { if (current === m) toDefault(); }; + const focus = (): void => inputRef.current?.focus(); + const changeMode = (m: ActionMode) => + (): void => { onModeChange(m); focus(); }; + const toDefault = (): void => onModeChange(searchMode); + const reset = (m: ActionMode): void => { if (current === m) toDefault(); }; // Set of all modes currently active. We populate it by reacting to // RegisterMode and UnregisterMode events. We also activate the mode event if // available. Everything is cleaned when the component is unmounted. - const [allModes] = React.useState<Set<ActionMode>>(new Set()); + const [allModes] = React.useState<Set<ActionMode>>(new Set()); React.useEffect(() => { - const on = (m: ActionMode) => m.event?.on(changeMode(m)); - const register = (m: ActionMode) => { allModes.add(m); on(m); }; - const off = (m: ActionMode) => m.event?.off(changeMode(m)); - const remove = (m: ActionMode) => { allModes.delete(m); off(m); reset(m); }; + const on = (m: ActionMode): void => m.event?.on(changeMode(m)); + const register = (m: ActionMode): void => { allModes.add(m); on(m); }; + const off = (m: ActionMode): void => m.event?.off(changeMode(m)); + const remove = + (m: ActionMode): void => { allModes.delete(m); off(m); reset(m); }; RegisterMode.on(register); UnregisterMode.on(remove); return () => { RegisterMode.off(register); UnregisterMode.off(remove); }; }); @@ -542,17 +543,17 @@ export function ModalActionField() { const { result = [] } = usePromise(hintsPromise); // Auxiliary function that build a Hint from an ActionMode. - const modeToHint = (mode: ActionMode) => { + const modeToHint = (mode: ActionMode): Hint => { const { label, title = '', icon } = mode; const id = 'ActionMode-' + title + '-' + icon; - const value = () => { onModeChange(mode); }; + const value = (): void => { onModeChange(mode); }; return { id, icon, label, title, value, rank: -1000 }; }; // Hints provider for the mode of all modes. const modesHints = React.useCallback((input: string) => { const p = input.toLowerCase(); - const fit = (m: ActionMode) => m.label.toLowerCase().includes(p); + const fit = (m: ActionMode): boolean => m.label.toLowerCase().includes(p); return Promise.resolve(Array.from(allModes).filter(fit).map(modeToHint)); }, [allModes]); @@ -571,20 +572,20 @@ export function ModalActionField() { // the possible search hints. const searchModeHints = React.useCallback(async (input: string) => { const hs = await modesMode.hints(input); - const notCurrent = (h: Hint) => !(h.label.includes(current.label)); + const notCurrent = (h: Hint): boolean => !(h.label.includes(current.label)); return hs.filter(notCurrent); }, [current.label, modesMode]); // Register the new search engine. React.useEffect(() => { - registerSearchHints('ModesMode', searchModeHints); - return () => unregisterSearchHints('ModesMode'); - }, [searchModeHints]); + registerSearchHints('ModesMode', searchModeHints); + return () => unregisterSearchHints('ModesMode'); + }, [searchModeHints]); // Build the component. const { title, placeholder } = current; const handleModeClick = changeMode(modesMode); - const onBlur = () => reset(modesMode); + const onBlur = (): void => reset(modesMode); return ( <div className="dome-xToolBar-actionComponent" onBlur={onBlur}> <div className="dome-xToolBar-actionField"> @@ -603,7 +604,7 @@ export function ModalActionField() { /> </div> <Suggestions hints={result} onHint={onHint} index={index} /> - </div> + </div> ); } diff --git a/ivette/src/frama-c/kernel/ASTview.tsx b/ivette/src/frama-c/kernel/ASTview.tsx index 9a503192784..c2f657e33a1 100644 --- a/ivette/src/frama-c/kernel/ASTview.tsx +++ b/ivette/src/frama-c/kernel/ASTview.tsx @@ -26,9 +26,6 @@ import React from 'react'; import _ from 'lodash'; -import * as Server from 'frama-c/server'; -import * as States from 'frama-c/states'; -import * as RichText from 'frama-c/richtext'; import * as Dome from 'dome'; import * as Settings from 'dome/data/settings'; @@ -40,7 +37,7 @@ import * as Preferences from 'ivette/prefs'; import * as Server from 'frama-c/server'; import * as States from 'frama-c/states'; -import * as Utils from 'frama-c/utils'; +import * as RichText from 'frama-c/richtext'; import * as Ast from 'frama-c/kernel/api/ast'; import * as Properties from 'frama-c/kernel/api/properties'; import { getCallers, getDeadCode } from 'frama-c/plugins/eva/api/general'; @@ -245,13 +242,13 @@ export default function ASTview(): JSX.Element { if (theMarker) buffer.scroll(theMarker); }, [buffer, theMarker]); - function onHover(markerId?: string) { + function onHover(markerId?: string): void { const marker = Ast.jMarker(markerId); const fct = selection?.current?.fct; States.setHovered(marker ? { fct, marker } : undefined); } - function onSelection(markerId: string, meta = false) { + function onSelection(markerId: string, meta = false): void { const fct = selection?.current?.fct; const location = { fct, marker: Ast.jMarker(markerId) }; updateSelection({ location }); diff --git a/ivette/src/frama-c/states.ts b/ivette/src/frama-c/states.ts index a33f5fef80f..c6b360cc86a 100644 --- a/ivette/src/frama-c/states.ts +++ b/ivette/src/frama-c/states.ts @@ -773,12 +773,12 @@ export const GlobalSelection = new GlobalState<Selection>(emptySelection); Server.onShutdown(() => GlobalSelection.setValue(emptySelection)); -export function setHovered(h: Hovered) { GlobalHovered.setValue(h); } +export function setHovered(h: Hovered): void { GlobalHovered.setValue(h); } export function useHovered(): [Hovered, (h: Hovered) => void] { return useGlobalState(GlobalHovered); } -export function setSelection(location: Location, meta = false) { +export function setSelection(location: Location, meta = false): void { const s = GlobalSelection.getValue(); GlobalSelection.setValue(reducer(s, { location })); if (meta) MetaSelection.emit(location); @@ -789,7 +789,7 @@ export function useSelection(): [Selection, (a: SelectionActions) => void] { const [current, setCurrent] = useGlobalState(GlobalSelection); const callback = React.useCallback((action) => { setCurrent(reducer(current, action)); - }, [ current, setCurrent ]); + }, [current, setCurrent]); return [current, callback]; } diff --git a/ivette/src/renderer/Controller.tsx b/ivette/src/renderer/Controller.tsx index e13eaf09b2f..50ab35b2bf0 100644 --- a/ivette/src/renderer/Controller.tsx +++ b/ivette/src/renderer/Controller.tsx @@ -217,7 +217,7 @@ export const Control = (): JSX.Element => { /> </Toolbars.ButtonGroup> ); -} +}; // -------------------------------------------------------------------------- // --- Server Console @@ -370,7 +370,7 @@ const RenderConsole = (): JSX.Element => { /> </> ); -} +}; Ivette.registerComponent({ id: 'frama-c.console', @@ -451,7 +451,7 @@ export const Status = (): JSX.Element => { <Toolbars.Separator /> </> ); -} +}; // -------------------------------------------------------------------------- // --- Server Stats @@ -461,6 +461,6 @@ export const Stats = (): (null | JSX.Element) => { Server.useStatus(); const pending = Server.getPending(); return pending > 0 ? <Code>{pending} rq.</Code> : null; -} +}; // -------------------------------------------------------------------------- diff --git a/ivette/src/renderer/Extensions.tsx b/ivette/src/renderer/Extensions.tsx index e9ab3239b29..acd7d6ec63c 100644 --- a/ivette/src/renderer/Extensions.tsx +++ b/ivette/src/renderer/Extensions.tsx @@ -56,7 +56,7 @@ export class ElementRack { private rank = 1; private readonly items = new Map<string, ElementProps>(); - register(elt: ElementProps) { + register(elt: ElementProps): void { if (elt.rank === undefined) elt.rank = this.rank; this.rank++; this.items.set(elt.id, elt); -- GitLab