Skip to content

Commit 6d08b61

Browse files
authored
Focus syntax highlighting on tasks (#11)
* Focus syntax highlighting on tasks * Make variables more clear
1 parent a7ab371 commit 6d08b61

File tree

3 files changed

+77
-12
lines changed

3 files changed

+77
-12
lines changed

src/components/Generator/GeneredTaskfile/Highlighter/highlighter.module.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,7 @@
3333
.text-blue-light {
3434
color: #93c5fd;
3535
}
36+
37+
.text-green {
38+
color: #1d8525;
39+
}

src/components/Generator/GeneredTaskfile/Highlighter/lineRenderers.tsx

Lines changed: 72 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,16 @@ import styles from './highlighter.module.css';
44

55
enum RendererType {
66
EmptyLines,
7+
TaskDefinitions,
78
FunctionDefinitions,
9+
Sections,
810
Comments,
911
Variables,
12+
TaskCalls,
1013
Conditionals,
1114
EchoStatements,
15+
Titles,
16+
FunctionEnds,
1217
}
1318

1419
type LineRenderer = {
@@ -21,23 +26,48 @@ export const lineRenderers: Record<RendererType, LineRenderer> = {
2126
test: (line) => line.trim() === '',
2227
render: (_, i) => <div key={i}>&nbsp;</div>,
2328
},
24-
[RendererType.FunctionDefinitions]: {
25-
test: (line) => /^function\s+[a-zA-Z_:]+/.test(line),
29+
[RendererType.TaskDefinitions]: {
30+
test: (line) => /^function\stask:+[a-zA-Z-_:]+/.test(line),
2631
render: (line, i) => {
27-
const [, name, rest] = line.match(/^function\s+([a-zA-Z_:]+)(.*)/) || [];
32+
const [, name, rest] = line.match(/^function\stask:+([a-zA-Z-_:]+)\s{\s##(.*)/) || [];
2833
return (
2934
<div key={i} className={styles.line}>
30-
<span className={styles['text-purple']}>function </span>
35+
<span className={styles['text-gray']}>function</span>
36+
<span className={styles['text-white']}> task:</span>
3137
<span className={styles['text-yellow']}>{name}</span>
38+
<span className={styles['text-gray']}>{' {'}</span>
39+
<span className={styles['text-green']}>{' ##'}</span>
3240
<span className={styles['text-white']}>{rest}</span>
3341
</div>
3442
);
3543
},
3644
},
45+
[RendererType.FunctionDefinitions]: {
46+
test: (line) => /^function\s+[a-zA-Z-_:]+/.test(line),
47+
render: (line, i) => {
48+
const [, name, rest] = line.match(/^function\s+([a-zA-Z-_:]+)(.*)/) || [];
49+
return (
50+
<div key={i} className={styles.line}>
51+
<span className={styles['text-gray']}>function </span>
52+
<span className={styles['text-white']}>{name}</span>
53+
<span className={styles['text-gray']}>{rest}</span>
54+
</div>
55+
);
56+
},
57+
},
58+
[RendererType.Sections]: {
59+
test: (line) => line.startsWith('## '),
60+
render: (line, i) => (
61+
<div key={i} className={styles.line}>
62+
<span className={styles['text-green']}>## </span>
63+
<span className={styles['text-white']}>{line.substring(3)}</span>
64+
</div>
65+
),
66+
},
3767
[RendererType.Comments]: {
3868
test: (line) => line.trim().startsWith('#'),
3969
render: (line, i) => (
40-
<div key={i} className={styles['text-gray']}>
70+
<div key={i} className={styles['text-green']}>
4171
{line}
4272
</div>
4373
),
@@ -49,14 +79,14 @@ export const lineRenderers: Record<RendererType, LineRenderer> = {
4979
return (
5080
<div key={i} className={styles.line}>
5181
<span className={styles['text-blue']}>{varName}</span>
52-
<span className={styles['text-white']}>=</span>
53-
<span className={styles['text-yellow-light']}>{rest.join('=')}</span>
82+
<span className={styles['text-gray']}>=</span>
83+
<span className={styles['text-white']}>{rest.join('=')}</span>
5484
</div>
5585
);
5686
},
5787
},
5888
[RendererType.Conditionals]: {
59-
test: (line) => /^\s*if\s+|^\s*then\s+|^\s*else\s+|^\s*fi\s*/.test(line),
89+
test: (line) => /^if+|^then+|^else+|^fi/.test(line.trim()),
6090
render: (line, i) => (
6191
<div key={i} className={styles['text-pink']}>
6292
{line}
@@ -69,11 +99,43 @@ export const lineRenderers: Record<RendererType, LineRenderer> = {
6999
const parts = line.split('echo');
70100
return (
71101
<div key={i} className={styles.line}>
72-
<span className={styles['text-white']}>{parts[0]}</span>
73-
<span className={styles['text-blue-light']}>echo</span>
102+
<span className={styles['text-white']}>{parts[0]}echo</span>
103+
<span className={styles['text-yellow-light']}>{parts[1]}</span>
104+
</div>
105+
);
106+
},
107+
},
108+
[RendererType.Titles]: {
109+
test: (line) => line.trim().startsWith('title'),
110+
render: (line, i) => {
111+
const parts = line.split('title');
112+
return (
113+
<div key={i} className={styles.line}>
114+
<span className={styles['text-white']}>{parts[0]}title</span>
74115
<span className={styles['text-yellow-light']}>{parts[1]}</span>
75116
</div>
76117
);
77118
},
78119
},
120+
[RendererType.TaskCalls]: {
121+
test: (line) => /^\stask:+[a-zA-Z-_:]+/.test(line),
122+
render: (line, i) => {
123+
const [, space, task] = line.match(/(\s)task:+([a-zA-Z-_:]+)/) || [];
124+
125+
return (
126+
<div key={i} className={styles.line}>
127+
<span className={styles['text-white']}>{space}task:</span>
128+
<span className={styles['text-yellow']}>{task}</span>
129+
</div>
130+
);
131+
},
132+
},
133+
[RendererType.FunctionEnds]: {
134+
test: (line) => line.trim().startsWith('}'),
135+
render: (line, i) => (
136+
<div key={i} className={styles['text-gray']}>
137+
{line}
138+
</div>
139+
),
140+
},
79141
};

src/components/Generator/GeneredTaskfile/taskfile-base.sh

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,7 @@ function task:help { ## Show all available tasks
6363

6464
function task:shorthand { ## Create CLI shorthand task instead of ./Taskfile
6565
title "Creating task shorthand"
66-
if [ -f /usr/local/bin/task ]
67-
then
66+
if [ -f /usr/local/bin/task ]; then
6867
echo "/usr/local/bin/task already exists."
6968
else
7069
echo -e "You are about to create /usr/local/bin/task that requires root permission..."

0 commit comments

Comments
 (0)