From 1da59f7e4d0bf06c517e5073b5a2892af7952ebf Mon Sep 17 00:00:00 2001
From: Valentin Perrelle <valentin.perrelle@cea.fr>
Date: Wed, 19 Apr 2023 12:14:34 +0200
Subject: [PATCH] [Ivette] add some spacing lint rules

---
 ivette/.eslintrc.js                           | 33 ++++++++++++++++
 ivette/src/dome/main/dome.ts                  |  2 +-
 ivette/src/dome/renderer/controls/labels.tsx  |  3 +-
 ivette/src/dome/renderer/data/json.ts         | 14 +++----
 ivette/src/dome/renderer/dnd.tsx              | 28 +++++++-------
 ivette/src/dome/renderer/dome.tsx             |  2 +-
 ivette/src/dome/renderer/layout/qsplit.tsx    | 38 +++++++++----------
 ivette/src/dome/renderer/text/editor.tsx      |  2 +-
 ivette/src/dome/renderer/themes.tsx           |  2 +-
 ivette/src/frama-c/kernel/ASTview.tsx         | 20 +++++-----
 ivette/src/frama-c/kernel/Globals.tsx         |  8 ++--
 ivette/src/frama-c/kernel/Messages.tsx        |  2 +-
 ivette/src/frama-c/kernel/PivotTable.tsx      |  6 +--
 ivette/src/frama-c/kernel/Properties.tsx      | 12 +++---
 ivette/src/frama-c/kernel/SourceCode.tsx      | 12 +++---
 ivette/src/frama-c/plugins/eva/valuetable.tsx |  2 +-
 ivette/src/frama-c/server.ts                  |  2 +-
 ivette/src/frama-c/states.ts                  | 16 ++++----
 ivette/src/renderer/Controller.tsx            |  6 +--
 19 files changed, 121 insertions(+), 89 deletions(-)

diff --git a/ivette/.eslintrc.js b/ivette/.eslintrc.js
index 3c9037c5af4..0e6507eab9d 100644
--- a/ivette/.eslintrc.js
+++ b/ivette/.eslintrc.js
@@ -52,6 +52,39 @@ module.exports = {
     // Disallow the use of console.* to prevent the release of code producing
     // various debuging messages
     "no-console": "error",
+    // Enforce consistent spacing after the // or /* in a comment
+    "spaced-comment": ["error", "always"],
+    // Enforce consistent spacing before and after the arrow in arrow functions
+    "arrow-spacing": "error",
+    // Enforce spaces inside of blocks after opening block and
+    // before closing block
+    "block-spacing": "error",
+    // Enforce consistent spacing before and after commas
+    "comma-spacing": "error",
+    // Enforce consistent newlines before and after dots
+    "dot-location": "error",
+    // Require newline at the end of files
+    "eol-last": "error",
+    // Disallow spacing between function identifiers and their invocations
+    "func-call-spacing": "error",
+    // Enforce consistent spacing between keys and values in object literal
+    // properties
+    "key-spacing": "error",
+    // Disallow trailing whitespace at the end of lines
+    "no-trailing-spaces": "error",
+    // Enforce consistent spacing before and after semicolons
+    "semi-spacing": "error",
+    // Enforce location of semicolons
+    "semi-style": "error",
+    // Enforce spacing around colons of switch statements
+    "switch-colon-spacing": "error",
+    // Enforce consistent spacing before blocks
+    "space-before-blocks": "error",
+    // Enforce consistent spacing before function definition opening parenthesis
+    "space-before-function-paren": [
+      "error",
+      {"anonymous": "always", "named": "never", "asyncArrow": "always"}
+    ], 
 
     // --- Safety rules ---
 
diff --git a/ivette/src/dome/main/dome.ts b/ivette/src/dome/main/dome.ts
index bec195e27ee..7c5db4f83c0 100644
--- a/ivette/src/dome/main/dome.ts
+++ b/ivette/src/dome/main/dome.ts
@@ -505,7 +505,7 @@ interface Cmd { wdir: string; argv: string[] }
 
 function stripElectronArgv(cmd: Cmd): Cmd
 {
-  const wdir = DEVEL ? cmd.argv[3] : cmd.wdir ;
+  const wdir = DEVEL ? cmd.argv[3] : cmd.wdir;
   const argv = cmd.argv.slice(DEVEL ? 4 : (LOCAL ? 2 : 1)).filter((p) => !!p);
   return { wdir, argv };
 }
diff --git a/ivette/src/dome/renderer/controls/labels.tsx b/ivette/src/dome/renderer/controls/labels.tsx
index 382828a4f5c..9bf33338966 100644
--- a/ivette/src/dome/renderer/controls/labels.tsx
+++ b/ivette/src/dome/renderer/controls/labels.tsx
@@ -63,8 +63,7 @@ export interface LabelProps {
 }
 
 const makeLabel = (className: string) =>
-  function Label
-    (
+  function Label(
       props: LabelProps,
       ref: LegacyRef<HTMLLabelElement> | undefined
     ): JSX.Element {
diff --git a/ivette/src/dome/renderer/data/json.ts b/ivette/src/dome/renderer/data/json.ts
index 11f7a039384..f323711d086 100644
--- a/ivette/src/dome/renderer/data/json.ts
+++ b/ivette/src/dome/renderer/data/json.ts
@@ -200,7 +200,7 @@ export const jInt: Decoder<number> = (js: json) => {
     return js;
   }
   else {
-    throw new JsonTypeError("integer", js); 
+    throw new JsonTypeError("integer", js);
   }
 };
 
@@ -215,7 +215,7 @@ export const jBoolean: Decoder<boolean> = (js: json) => {
     return js;
   }
   else {
-    throw new JsonTypeError("boolean", js); 
+    throw new JsonTypeError("boolean", js);
   }
 };
 
@@ -235,10 +235,10 @@ export const jString: Decoder<string> = (js: json) => {
       return js;
     }
     else {
-      throw new JsonTypeError("string", js); 
+      throw new JsonTypeError("string", js);
     }
   };
-  
+
 
 /** JSON constant.
     Capture the tag or throw JsonError.
@@ -251,7 +251,7 @@ export function jTag<A>(tg: A): Decoder<A> {
       return tg;
     }
     else {
-      throw new JsonTypeError(`"${tg}"`, js); 
+      throw new JsonTypeError(`"${tg}"`, js);
     }
   };
 }
@@ -589,7 +589,7 @@ export function jKey<K>(kd: K): Decoder<key<K>> {
       return forge(kd, js);
     }
     else {
-      throw new JsonTypeError(`key<${kd}>`, js); 
+      throw new JsonTypeError(`key<${kd}>`, js);
     }
   };
 }
@@ -601,7 +601,7 @@ export function jIndex<K>(kd: K): Decoder<index<K>> {
       return forge(kd, js);
     }
     else {
-      throw new JsonTypeError(`index<${kd}>`, js); 
+      throw new JsonTypeError(`index<${kd}>`, js);
     }
   };
 }
diff --git a/ivette/src/dome/renderer/dnd.tsx b/ivette/src/dome/renderer/dnd.tsx
index d1ad128c736..f79a85ae8b9 100644
--- a/ivette/src/dome/renderer/dnd.tsx
+++ b/ivette/src/dome/renderer/dnd.tsx
@@ -143,9 +143,9 @@ export class DnD {
 
   handleEvent(e: DraggableEvent): void {
     if (this.dragging && e instanceof MouseEvent) {
-      const element = document
-        .elementsFromPoint(e.clientX, e.clientY)
-        .find((elt) => elt !== this.dragging && this.registry.get(elt.id));
+      const element = document.
+        elementsFromPoint(e.clientX, e.clientY).
+        find((elt) => elt !== this.dragging && this.registry.get(elt.id));
       const hover = element ? this.registry.get(element.id) : undefined;
       const curr = this.hovering;
       if (hover !== curr) {
@@ -352,14 +352,14 @@ export interface DragSourceProps extends DragHandler, DropHandler {
    as a Drop Target into the DnD controller.
  */
 export function DragSource(props: DragSourceProps): JSX.Element {
-  //--- Props
+  // --- Props
   const { dnd, disabled = false, handle, children } = props;
   const { onStart, onDrag, onStop } = props;
-  //--- Dragging State
+  // --- Dragging State
   const [dragging, setDragging] = React.useState<Dragging | undefined>();
-  //--- Dropping Ref
+  // --- Dropping Ref
   const nodeRef = useDropTarget(dnd, disabled ? undefined : props);
-  //--- onStart
+  // --- onStart
   const handleStart: DraggableEventHandler = React.useCallback(
     (_, { x, y, node }) => {
       if (dnd && nodeRef.current)
@@ -371,7 +371,7 @@ export function DragSource(props: DragSourceProps): JSX.Element {
       });
       if (onStart) onStart();
     }, [dnd, nodeRef, onStart]);
-  //--- onDrag
+  // --- onDrag
   const handleDrag: DraggableEventHandler = React.useCallback(
     (e, { x, y }) => {
       if (e && dnd) dnd.handleEvent(e);
@@ -381,14 +381,14 @@ export function DragSource(props: DragSourceProps): JSX.Element {
         if (onDrag) onDrag(newDragging);
       }
     }, [dnd, dragging, onDrag]);
-  //--- onStop
+  // --- onStop
   const handleStop: DraggableEventHandler = React.useCallback(
     () => {
       if (dnd) dnd.handleDrop();
       setDragging(undefined);
       if (onStop) onStop();
     }, [dnd, onStop]);
-  //--- Renderer
+  // --- Renderer
   const render = RenderOverlay(props, dragging);
   return (
     <DraggableCore
@@ -447,25 +447,25 @@ export interface ItemProps {
    item contents is rendered inside a `<DragSource/>` component automatically
    connected to the englobing `<List/>` DnD controller.  */
 export function Item(props: ItemProps): JSX.Element {
-  //--- Ordering
+  // --- Ordering
   const { dnd, items, setSource, setTarget, onStop } =
     React.useContext(CurrentList);
   const { id, className, children } = props;
   const order = getItem(items, id);
-  //--- D&D Events
+  // --- D&D Events
   const onStart = React.useCallback(() => {
     if (setSource) setSource(id);
   }, [setSource, id]);
   const onDropIn = React.useCallback(() => {
     if (setTarget) setTarget(id);
   }, [setTarget, id]);
-  //--- Styling
+  // --- Styling
   const style = styles(
     props.style,
     order < 0 && { display: 'none' },
     0 <= order && { order },
   );
-  //--- Rendering
+  // --- Rendering
   return (
     <DragSource
       className={className}
diff --git a/ivette/src/dome/renderer/dome.tsx b/ivette/src/dome/renderer/dome.tsx
index 2a19d1ec505..4410ed078d7 100644
--- a/ivette/src/dome/renderer/dome.tsx
+++ b/ivette/src/dome/renderer/dome.tsx
@@ -603,7 +603,7 @@ export function usePromise<A>(job: Promise<A>): PromiseHook<A> {
     let c = false;
     const set = (x?: A, e?: Error): void => { setResult(x); setError(e); };
     const doCancel = (): boolean => { if (!c) setLoading(false); return c; };
-    const onResult = (x: A): void => { if (!doCancel()) set(x, undefined);};
+    const onResult = (x: A): void => { if (!doCancel()) set(x, undefined); };
     const onError = (e: Error): void => { if (!doCancel()) set(undefined, e); };
     job.then(onResult, onError);
     return () => { c = true; };
diff --git a/ivette/src/dome/renderer/layout/qsplit.tsx b/ivette/src/dome/renderer/layout/qsplit.tsx
index ec10dd95311..5241ef0a3ae 100644
--- a/ivette/src/dome/renderer/layout/qsplit.tsx
+++ b/ivette/src/dome/renderer/layout/qsplit.tsx
@@ -307,31 +307,31 @@ function QSplitEngine(props: QSplitEngineProps): JSX.Element {
   const BD = sameOf(B, D);
   const CD = sameOf(C, D);
   const ABCD = fullOf(A, B, C, D);
-  //----------------------------------------
+  // ----------------------------------------
   // [ A ]
-  //---------------------------------------
+  // ---------------------------------------
   if (ABCD) {
     DISPLAY(layout, ABCD, 0, width, 0, height);
   }
-  //----------------------------------------
+  // ----------------------------------------
   // [ A - C ]
-  //---------------------------------------
+  // ---------------------------------------
   else if (AB && CD) {
     vsplit = VSPLIT(0, Y, width);
     DISPLAY(layout, AB, 0, width, 0, Y);
     DISPLAY(layout, CD, 0, width, Y + 1, RY);
   }
-  //----------------------------------------
+  // ----------------------------------------
   // [ A | B ]
-  //---------------------------------------
+  // ---------------------------------------
   else if (AC && BD) {
     hsplit = HSPLIT(X, 0, height);
     DISPLAY(layout, AC, 0, X, 0, height);
     DISPLAY(layout, BD, X + 1, RX, 0, height);
   }
-  //----------------------------------------
+  // ----------------------------------------
   // [ A – C|D ]
-  //----------------------------------------
+  // ----------------------------------------
   else if (AB) {
     hsplit = HSPLIT(X, Y, RY);
     vsplit = VSPLIT(0, Y, width);
@@ -339,9 +339,9 @@ function QSplitEngine(props: QSplitEngineProps): JSX.Element {
     DISPLAY(layout, C, 0, X, Y + 1, RY);
     DISPLAY(layout, D, X + 1, RX, Y + 1, RY);
   }
-  //----------------------------------------
+  // ----------------------------------------
   // [ A | B-D ]
-  //----------------------------------------
+  // ----------------------------------------
   else if (AC) {
     hsplit = HSPLIT(X, 0, height);
     vsplit = VSPLIT(X, Y, RY);
@@ -349,9 +349,9 @@ function QSplitEngine(props: QSplitEngineProps): JSX.Element {
     DISPLAY(layout, B, X + 1, RX, 0, Y);
     DISPLAY(layout, D, X + 1, RX, Y + 1, RY);
   }
-  //----------------------------------------
+  // ----------------------------------------
   // [ A-C | B ]
-  //----------------------------------------
+  // ----------------------------------------
   else if (BD) {
     hsplit = HSPLIT(X, 0, height);
     vsplit = VSPLIT(0, Y, X);
@@ -359,9 +359,9 @@ function QSplitEngine(props: QSplitEngineProps): JSX.Element {
     DISPLAY(layout, BD, X + 1, RX, 0, height);
     DISPLAY(layout, C, 0, X, Y + 1, RY);
   }
-  //----------------------------------------
+  // ----------------------------------------
   // [ A|B - C ]
-  //----------------------------------------
+  // ----------------------------------------
   else if (CD) {
     hsplit = HSPLIT(X, 0, Y);
     vsplit = VSPLIT(0, Y, width);
@@ -369,9 +369,9 @@ function QSplitEngine(props: QSplitEngineProps): JSX.Element {
     DISPLAY(layout, B, X + 1, RX, 0, Y);
     DISPLAY(layout, CD, 0, width, Y + 1, RY);
   }
-  //----------------------------------------
+  // ----------------------------------------
   // [ A, B, C, D ]
-  //----------------------------------------
+  // ----------------------------------------
   else {
     hsplit = HSPLIT(X, 0, height);
     vsplit = VSPLIT(0, Y, width);
@@ -380,12 +380,12 @@ function QSplitEngine(props: QSplitEngineProps): JSX.Element {
     DISPLAY(layout, C, 0, X, Y + 1, RY);
     DISPLAY(layout, D, X + 1, RX, Y + 1, RY);
   }
-  //----------------------------------------
+  // ----------------------------------------
   if (hsplit !== NODISPLAY && vsplit !== NODISPLAY)
     hvsplit = { display: 'block', left: X, top: Y };
-  //----------------------------------------
+  // ----------------------------------------
   // Rendering
-  //----------------------------------------
+  // ----------------------------------------
   return (
     <QSplitContext.Provider value={layout}>
       <BSplitter
diff --git a/ivette/src/dome/renderer/text/editor.tsx b/ivette/src/dome/renderer/text/editor.tsx
index c22c6f6835c..17c74c8c895 100644
--- a/ivette/src/dome/renderer/text/editor.tsx
+++ b/ivette/src/dome/renderer/text/editor.tsx
@@ -310,7 +310,7 @@ const Highlight = Language.syntaxHighlighting(Language.HighlightStyle.define([
   { tag: tags.typeName, class: 'cm-type' },
   { tag: tags.number, class: 'cm-number' },
   { tag: tags.controlKeyword, class: 'cm-keyword' },
-  { tag: tags.definition(tags.variableName) , class: 'cm-def' },
+  { tag: tags.definition(tags.variableName), class: 'cm-def' },
 ]));
 
 // A language provider based on the [Lezer C++ parser], extended with
diff --git a/ivette/src/dome/renderer/themes.tsx b/ivette/src/dome/renderer/themes.tsx
index 9cbccae6908..5a21d6b45c1 100644
--- a/ivette/src/dome/renderer/themes.tsx
+++ b/ivette/src/dome/renderer/themes.tsx
@@ -29,7 +29,7 @@
    @module dome/themes
  */
 
-//import React from 'react';
+// import React from 'react';
 import * as Dome from 'dome';
 import * as Settings from 'dome/data/settings';
 import { State } from 'dome/data/states';
diff --git a/ivette/src/frama-c/kernel/ASTview.tsx b/ivette/src/frama-c/kernel/ASTview.tsx
index e5f61224461..19342920466 100644
--- a/ivette/src/frama-c/kernel/ASTview.tsx
+++ b/ivette/src/frama-c/kernel/ASTview.tsx
@@ -118,7 +118,7 @@ function textToString(text: text): string {
 
 // Computes, for each markers of a tree, its range. Returns the map containing
 // all those bindings.
-function markersRanges(tree: Tree): Map<string, Range[]>{
+function markersRanges(tree: Tree): Map<string, Range[]> {
   const ranges: Map<string, Range[]> = new Map();
   const toRanges = (tree: Tree): void => {
     if (!isNode(tree)) return;
@@ -238,7 +238,7 @@ const Hovered = Editor.createField<Marker>(undefined);
 // The Ivette hovered element must be updated by CodeMirror plugins. This
 // field add the callback in the CodeMirror internal state.
 type UpdateHovered = (h: States.Hovered) => void;
-const UpdateHovered = Editor.createField<UpdateHovered>(() => { return ; });
+const UpdateHovered = Editor.createField<UpdateHovered>(() => { return; });
 
 // The Hovered field is updated each time the mouse moves through the CodeMirror
 // document. The handlers updates the Ivette hovered information, which is then
@@ -376,15 +376,15 @@ function createDeadCodeGutter(): Editor.Extension {
   return Editor.createGutter(deps, cls, (props, block, view) => {
     const doc = view.state.doc;
     const line = doc.lineAt(block.from);
-    const unreachable = props.unreach
-      .filter(r => r.from <= doc.length)
-      .map(r => ({ from: doc.lineAt(r.from).from, to: doc.lineAt(r.to).to }))
-      .find(r => r.from <= line.from && line.to <= r.to);
+    const unreachable = props.unreach.
+      filter(r => r.from <= doc.length).
+      map(r => ({ from: doc.lineAt(r.from).from, to: doc.lineAt(r.to).to })).
+      find(r => r.from <= line.from && line.to <= r.to);
     if (unreachable) return new DeadCodeGutterMarker('unreachable');
-    const nonTerm = props.nonTerm
-      .filter(r => r.from <= doc.length)
-      .map(r => ({ from: doc.lineAt(r.from).from, to: doc.lineAt(r.to).to }))
-      .find(r => r.from <= line.from && line.to <= r.to);
+    const nonTerm = props.nonTerm.
+      filter(r => r.from <= doc.length).
+      map(r => ({ from: doc.lineAt(r.from).from, to: doc.lineAt(r.to).to })).
+      find(r => r.from <= line.from && line.to <= r.to);
     if (nonTerm) return new DeadCodeGutterMarker('non terminating');
     return null;
   });
diff --git a/ivette/src/frama-c/kernel/Globals.tsx b/ivette/src/frama-c/kernel/Globals.tsx
index 88b47f820ed..299a87d749a 100644
--- a/ivette/src/frama-c/kernel/Globals.tsx
+++ b/ivette/src/frama-c/kernel/Globals.tsx
@@ -104,13 +104,13 @@ type functionsData =
 type FctKey = Json.key<'#functions'>;
 
 function computeFcts(
-  ker: States.ArrayProxy<FctKey,Kernel.functionsData>,
-  eva: States.ArrayProxy<FctKey,Eva.functionsData>,
+  ker: States.ArrayProxy<FctKey, Kernel.functionsData>,
+  eva: States.ArrayProxy<FctKey, Eva.functionsData>,
 ): functionsData[] {
   const arr: functionsData[] = [];
   ker.forEach((kf) => {
     const ef = eva.getData(kf.key);
-    arr.push({...ef,...kf});
+    arr.push({...ef, ...kf});
   });
   return arr.sort((f, g) => alpha(f.name, g.name));
 }
@@ -121,7 +121,7 @@ export default function Globals(): JSX.Element {
   const [selection, updateSelection] = States.useSelection();
   const ker = States.useSyncArrayProxy(Kernel.functions);
   const eva = States.useSyncArrayProxy(Eva.functions);
-  const fcts = React.useMemo(() => computeFcts(ker,eva), [ker,eva]);
+  const fcts = React.useMemo(() => computeFcts(ker, eva), [ker, eva]);
   const { useFlipSettings } = Dome;
   const [stdlib, flipStdlib] =
     useFlipSettings('ivette.globals.stdlib', false);
diff --git a/ivette/src/frama-c/kernel/Messages.tsx b/ivette/src/frama-c/kernel/Messages.tsx
index b6421cda814..b3d26cfc80b 100644
--- a/ivette/src/frama-c/kernel/Messages.tsx
+++ b/ivette/src/frama-c/kernel/Messages.tsx
@@ -455,7 +455,7 @@ export default function RenderMessages(): JSX.Element {
       selectMsg(msg);
       setText(msg.message);
       if (msg.fct && msg.marker) {
-        const location = { fct:msg.fct, marker:msg.marker };
+        const location = { fct: msg.fct, marker: msg.marker };
         updateSelection({ location });
       }
     }, [updateSelection],
diff --git a/ivette/src/frama-c/kernel/PivotTable.tsx b/ivette/src/frama-c/kernel/PivotTable.tsx
index 89fe885aaf6..9911029de55 100644
--- a/ivette/src/frama-c/kernel/PivotTable.tsx
+++ b/ivette/src/frama-c/kernel/PivotTable.tsx
@@ -86,9 +86,9 @@ function PivotTableBuild(): JSX.Element {
   async function compute(): Promise<void> {
     setComputing(true);
     setError('');
-    Server.send(PivotState.compute, [])
-      .then(() => setComputing(false))
-      .catch((err) => { setComputing(false); handleError(err); });
+    Server.send(PivotState.compute, []).
+      then(() => setComputing(false)).
+      catch((err) => { setComputing(false); handleError(err); });
   }
   if (rawData && rawData.length > 0) {
     return (PivotTable(rawData));
diff --git a/ivette/src/frama-c/kernel/Properties.tsx b/ivette/src/frama-c/kernel/Properties.tsx
index 0b2bd023257..1e32d93af70 100644
--- a/ivette/src/frama-c/kernel/Properties.tsx
+++ b/ivette/src/frama-c/kernel/Properties.tsx
@@ -427,7 +427,7 @@ function FilterSection(props: SectionProps): JSX.Element {
     } : undefined;
   const update = Dome.useForceUpdate();
   Settings.useWindowSettingsEvent(update);
-  const summary = prefix ? filterSummary(prefix) : undefined ;
+  const summary = prefix ? filterSummary(prefix) : undefined;
   return (
     <Section
       label={label}
@@ -654,8 +654,8 @@ function FilterRatio({ model }: { model: PropertyModel }): JSX.Element {
 // --- Properties Table
 // -------------------------------------------------------------------------
 
-type PropsModel = States.ArrayProxy<PropKey,Properties.statusData>;
-type EvapsModel = States.ArrayProxy<PropKey,Eva.propertiesData>;
+type PropsModel = States.ArrayProxy<PropKey, Properties.statusData>;
+type EvapsModel = States.ArrayProxy<PropKey, Eva.propertiesData>;
 
 function populateModel(
   model: PropertyModel,
@@ -666,7 +666,7 @@ function populateModel(
   props.forEach((prop) => {
     const { key } = prop;
     const eva = evaps.getData(key);
-    model.setData(key,{ ...eva, ...prop });
+    model.setData(key, { ...eva, ...prop });
   });
   model.reload();
 }
@@ -678,8 +678,8 @@ export default function RenderProperties(): JSX.Element {
   const props = States.useSyncArrayProxy(Properties.status);
   const evaps = States.useSyncArrayProxy(Eva.properties);
   React.useEffect(() => {
-    populateModel(model,props,evaps);
-  },[model,props,evaps]);
+    populateModel(model, props, evaps);
+  }, [model, props, evaps]);
 
   const [selection, updateSelection] = States.useSelection();
 
diff --git a/ivette/src/frama-c/kernel/SourceCode.tsx b/ivette/src/frama-c/kernel/SourceCode.tsx
index 03bc698ca28..7e36a45e925 100644
--- a/ivette/src/frama-c/kernel/SourceCode.tsx
+++ b/ivette/src/frama-c/kernel/SourceCode.tsx
@@ -66,11 +66,11 @@ function setError(text: string): void {
 // Function launching the external editor at the currently selected position.
 async function edit(file: string, pos: Position, cmd: string): Promise<void> {
   if (file === '') return;
-  const args = cmd
-    .replace('%s', file)
-    .replace('%n', pos.line.toString())
-    .replace('%c', pos.column.toString())
-    .split(' ');
+  const args = cmd.
+    replace('%s', file).
+    replace('%n', pos.line.toString()).
+    replace('%c', pos.column.toString()).
+    split(' ');
   const prog = args.shift(); if (!prog) return;
   const text = `An error has occured when opening the external editor ${prog}`;
   System.spawn(prog, args).catch(() => setError(text));
@@ -276,7 +276,7 @@ export default function SourceCode(): JSX.Element {
 
   async function displayShortcuts(): Promise<void> {
     await Dialogs.showMessageBox({
-      buttons: [{label:"Ok"}],
+      buttons: [{label: "Ok"}],
       details: shortcuts,
       message: 'Useful shortcuts'
     });
diff --git a/ivette/src/frama-c/plugins/eva/valuetable.tsx b/ivette/src/frama-c/plugins/eva/valuetable.tsx
index fb777a26aee..d31f94ca99b 100644
--- a/ivette/src/frama-c/plugins/eva/valuetable.tsx
+++ b/ivette/src/frama-c/plugins/eva/valuetable.tsx
@@ -59,7 +59,7 @@ function getAlarmStatus(alarms: Alarm[] | undefined): string {
 }
 
 type MarkerTracked = [ 'Tracked', boolean ]
-type MarkerPinned  = [ 'Pinned' , boolean ]
+type MarkerPinned  = [ 'Pinned', boolean ]
 type MarkerStatus  = MarkerTracked | MarkerPinned | 'JustFocused'
 
 function MarkerStatusClass(status: MarkerStatus): string {
diff --git a/ivette/src/frama-c/server.ts b/ivette/src/frama-c/server.ts
index 2d404a244c3..122f9378047 100644
--- a/ivette/src/frama-c/server.ts
+++ b/ivette/src/frama-c/server.ts
@@ -39,7 +39,7 @@ import * as Json from 'dome/data/json';
 import { RichTextBuffer } from 'dome/text/buffers';
 import { ChildProcess } from 'child_process';
 import { client } from './client_socket';
-//import { client } from './client_zmq';
+// import { client } from './client_zmq';
 
 // --------------------------------------------------------------------------
 // --- Server Status
diff --git a/ivette/src/frama-c/states.ts b/ivette/src/frama-c/states.ts
index 01ff09edb8a..00ccbcc1a45 100644
--- a/ivette/src/frama-c/states.ts
+++ b/ivette/src/frama-c/states.ts
@@ -402,7 +402,7 @@ export function reloadArray<K, A>(arr: Array<K, A>): void {
 }
 
 /** Access to Synchronized Array elements. */
-export interface ArrayProxy<K,A> {
+export interface ArrayProxy<K, A> {
   length: number;
   getData(elt: K | undefined): (A | undefined);
   forEach(fn: (row: A, elt: K) => void): void;
@@ -410,22 +410,22 @@ export interface ArrayProxy<K,A> {
 
 // --- Utility functions
 
-function arrayGet<K,A>(
-  model: CompactModel<K,A>,
+function arrayGet<K, A>(
+  model: CompactModel<K, A>,
   elt: K | undefined,
   _stamp: number,
 ): A | undefined {
   return elt ? model.getData(elt) : undefined;
 }
 
-function arrayProxy<K,A>(
-  model: CompactModel<K,A>,
+function arrayProxy<K, A>(
+  model: CompactModel<K, A>,
   _stamp: number,
-): ArrayProxy<K,A> {
+): ArrayProxy<K, A> {
   return {
     length: model.length(),
     getData: (elt) => elt ? model.getData(elt) : undefined,
-    forEach: (fn) => model.forEach((r) => fn(r,model.getkey(r))),
+    forEach: (fn) => model.forEach((r) => fn(r, model.getkey(r))),
   };
 }
 
@@ -481,7 +481,7 @@ export function useSyncArrayGetter<K, A>(
 /** Use Synchronized Array as an array proxy. */
 export function useSyncArrayProxy<K, A>(
   arr: Array<K, A>
-): ArrayProxy<K,A> {
+): ArrayProxy<K, A> {
   const model = useSyncArrayModel<K, A>(arr);
   const stamp = useModel(model);
   return React.useMemo(
diff --git a/ivette/src/renderer/Controller.tsx b/ivette/src/renderer/Controller.tsx
index d69dd226989..75d43176011 100644
--- a/ivette/src/renderer/Controller.tsx
+++ b/ivette/src/renderer/Controller.tsx
@@ -135,9 +135,9 @@ function useHistory(): [string[], ((hs: string[]) => void)] {
 function insertConfig(hs: string[], cfg: Server.Configuration): string[] {
   const cmd = dumpServerConfig(cfg).trim();
   const newhs =
-    hs.map((h) => h.trim())
-      .filter((h: string) => h !== cmd && h !== '')
-      .slice(0, 50);
+    hs.map((h) => h.trim()).
+      filter((h: string) => h !== cmd && h !== '').
+      slice(0, 50);
   newhs.unshift(cmd);
   return newhs;
 }
-- 
GitLab