From f72d0c15ee39bb026722b95c07448f265fd62a5e Mon Sep 17 00:00:00 2001 From: Arthur Geel Date: Fri, 15 Nov 2024 18:08:36 +0100 Subject: [PATCH] Prefer using Records over of keyed arrays --- .../Highlighter/Highlighter.tsx | 2 +- .../Highlighter/lineRenderers.tsx | 40 +++++++++++-------- .../GeneredTaskfile/Highlighter/types.ts | 16 -------- 3 files changed, 24 insertions(+), 34 deletions(-) delete mode 100644 src/components/Generator/GeneredTaskfile/Highlighter/types.ts diff --git a/src/components/Generator/GeneredTaskfile/Highlighter/Highlighter.tsx b/src/components/Generator/GeneredTaskfile/Highlighter/Highlighter.tsx index 3211a5b..c379269 100644 --- a/src/components/Generator/GeneredTaskfile/Highlighter/Highlighter.tsx +++ b/src/components/Generator/GeneredTaskfile/Highlighter/Highlighter.tsx @@ -9,7 +9,7 @@ export const highlighter = (code: string): ReactElement[] => { const lines = normalizedCode.split('\n').slice(0, -1); return lines.map((line, index) => { - const renderer = lineRenderers.find((r) => r.test(line)); + const renderer = Object.values(lineRenderers).find((r) => r.test(line)); if (renderer) { return renderer.render(line, index); diff --git a/src/components/Generator/GeneredTaskfile/Highlighter/lineRenderers.tsx b/src/components/Generator/GeneredTaskfile/Highlighter/lineRenderers.tsx index 7c07dca..f6d94ec 100644 --- a/src/components/Generator/GeneredTaskfile/Highlighter/lineRenderers.tsx +++ b/src/components/Generator/GeneredTaskfile/Highlighter/lineRenderers.tsx @@ -1,17 +1,27 @@ -import React from 'react'; - -import { LineRenderer, RendererType } from './types'; +import React, { ReactElement } from 'react'; import styles from './highlighter.module.css'; -export const lineRenderers: LineRenderer[] = [ - { - type: RendererType.EmptyLines, +enum RendererType { + EmptyLines, + FunctionDefinitions, + Comments, + Variables, + Conditionals, + EchoStatements, +} + +type LineRenderer = { + test: (line: string) => boolean; + render: (line: string, index: number) => ReactElement; +}; + +export const lineRenderers: Record = { + [RendererType.EmptyLines]: { test: (line) => line.trim() === '', render: (_, i) =>
 
, }, - { - type: RendererType.FunctionDefinitions, + [RendererType.FunctionDefinitions]: { test: (line) => /^function\s+[a-zA-Z_:]+/.test(line), render: (line, i) => { const [, name, rest] = line.match(/^function\s+([a-zA-Z_:]+)(.*)/) || []; @@ -24,8 +34,7 @@ export const lineRenderers: LineRenderer[] = [ ); }, }, - { - type: RendererType.Comments, + [RendererType.Comments]: { test: (line) => line.trim().startsWith('#'), render: (line, i) => (
@@ -33,8 +42,7 @@ export const lineRenderers: LineRenderer[] = [
), }, - { - type: RendererType.Variables, + [RendererType.Variables]: { test: (line) => /^[A-Z_]+=.*/.test(line), render: (line, i) => { const [varName, ...rest] = line.split('='); @@ -47,8 +55,7 @@ export const lineRenderers: LineRenderer[] = [ ); }, }, - { - type: RendererType.Conditionals, + [RendererType.Conditionals]: { test: (line) => /^\s*if\s+|^\s*then\s+|^\s*else\s+|^\s*fi\s*/.test(line), render: (line, i) => (
@@ -56,8 +63,7 @@ export const lineRenderers: LineRenderer[] = [
), }, - { - type: RendererType.EchoStatements, + [RendererType.EchoStatements]: { test: (line) => line.includes('echo'), render: (line, i) => { const parts = line.split('echo'); @@ -70,4 +76,4 @@ export const lineRenderers: LineRenderer[] = [ ); }, }, -]; +}; diff --git a/src/components/Generator/GeneredTaskfile/Highlighter/types.ts b/src/components/Generator/GeneredTaskfile/Highlighter/types.ts deleted file mode 100644 index 41fa6a8..0000000 --- a/src/components/Generator/GeneredTaskfile/Highlighter/types.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ReactElement } from 'react'; - -export enum RendererType { - EmptyLines, - FunctionDefinitions, - Comments, - Variables, - Conditionals, - EchoStatements, -} - -export type LineRenderer = { - type: RendererType; - test: (line: string) => boolean; - render: (line: string, index: number) => ReactElement; -};