Skip to content

Commit ddc455a

Browse files
Merge pull request #177 from wttech/colorful-output
Colorful output
2 parents a069f39 + dacf529 commit ddc455a

File tree

12 files changed

+73
-26
lines changed

12 files changed

+73
-26
lines changed

core/src/main/java/dev/vml/es/acm/core/code/CodeLoggerPrinter.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@ public class CodeLoggerPrinter extends AppenderBase<ILoggingEvent> {
1818
public static final String[] NAMES = {NAME_ACL, NAME_REPO};
1919

2020
private final LoggerContext loggerContext;
21-
2221
private final Set<String> loggerNames;
23-
2422
private final PrintStream printStream;
2523

2624
public CodeLoggerPrinter(LoggerContext loggerContext, OutputStream outputStream) {
@@ -65,9 +63,10 @@ protected void append(ILoggingEvent event) {
6563
String loggerName = event.getLoggerName();
6664
for (String loggerPrefix : loggerNames) {
6765
if (StringUtils.startsWith(loggerName, loggerPrefix)) {
68-
printStream.println(event.getFormattedMessage());
66+
String level = event.getLevel().toString();
67+
printStream.println('[' + level + "] " + event.getFormattedMessage());
6968
break;
7069
}
7170
}
7271
}
73-
}
72+
}

ui.frontend/src/components/CodeEditor.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import { useEffect, useRef, useState } from 'react';
77
import { SyntaxError } from '../hooks/code';
88
import { debounce } from '../utils/debounce';
99
import { modelStorage } from '../utils/modelStorage';
10-
import { registerGroovyLanguage } from '../utils/monaco/groovy';
10+
import { GROOVY_LANGUAGE_ID, registerGroovyLanguage } from '../utils/monaco/groovy';
11+
import { LOG_LANGUAGE_ID, LOG_THEME_ID, registerLogLanguage } from '../utils/monaco/log';
12+
import { DEFAULT_THEME_ID } from '../utils/monaco/theme';
1113

1214
type CodeEditorProps<C extends ColorVersion> = editor.IStandaloneEditorConstructionOptions & {
1315
id: string;
@@ -45,8 +47,10 @@ const CodeEditor = <C extends ColorVersion>({ containerProps, syntaxError, onCha
4547
return;
4648
}
4749

48-
if (language === 'groovy') {
50+
if (language === GROOVY_LANGUAGE_ID) {
4951
registerGroovyLanguage(monacoRef);
52+
} else if (language === LOG_LANGUAGE_ID) {
53+
registerLogLanguage(monacoRef);
5054
}
5155

5256
const storedModel = modelStorage.getModel(id);
@@ -59,7 +63,7 @@ const CodeEditor = <C extends ColorVersion>({ containerProps, syntaxError, onCha
5963
const mountedEditor = monacoRef.editor.create(containerRef.current, {
6064
model: textModel,
6165
scrollBeyondLastLine: false,
62-
theme: 'vs-dark',
66+
theme: language === LOG_LANGUAGE_ID ? LOG_THEME_ID : DEFAULT_THEME_ID,
6367
value: initialValue ?? value,
6468
fixedOverflowWidgets: true,
6569
automaticLayout: true,

ui.frontend/src/pages/ConsolePage.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import { useCompilation } from '../hooks/code';
1818
import { useExecutionPolling } from '../hooks/execution';
1919
import { apiRequest, toastRequest } from '../utils/api';
2020
import { ArgumentValues, ConsoleDefaultScriptContent, ConsoleDefaultScriptPath, Description, ExecutableIdConsole, Execution, isExecutionPending, QueueOutput, ScriptOutput } from '../utils/api.types.ts';
21+
import { GROOVY_LANGUAGE_ID } from '../utils/monaco/groovy.ts';
22+
import { LOG_LANGUAGE_ID } from '../utils/monaco/log.ts';
2123
import { ToastTimeoutQuick } from '../utils/spectrum.ts';
2224
import { StorageKeys } from '../utils/storage';
2325

@@ -137,7 +139,7 @@ const ConsolePage = () => {
137139
<KeyboardShortcutsButton />
138140
</Flex>
139141
</Flex>
140-
<CodeEditor id="code-editor" initialValue={code} readOnly={executing} onChange={setCode} syntaxError={syntaxError} language="groovy" />
142+
<CodeEditor id="code-editor" initialValue={code} readOnly={executing} onChange={setCode} syntaxError={syntaxError} language={GROOVY_LANGUAGE_ID} />
141143
</Flex>
142144
</Item>
143145
<Item key="output" aria-label="Output">
@@ -159,7 +161,7 @@ const ConsolePage = () => {
159161
<ConsoleHelpButton />
160162
</Flex>
161163
</Flex>
162-
<CodeEditor id="output-preview" value={executionOutput} readOnly scrollToBottomOnUpdate={autoscroll} />
164+
<CodeEditor id="output-preview" value={executionOutput} readOnly scrollToBottomOnUpdate={autoscroll} language={LOG_LANGUAGE_ID} />
163165
</Flex>
164166
</Item>
165167
</TabPanels>

ui.frontend/src/pages/ExecutionView.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import { useExecutionPolling } from '../hooks/execution';
2121
import { useFormatter } from '../hooks/formatter';
2222
import { useNavigationTab } from '../hooks/navigation';
2323
import { isExecutableScript, isExecutionPending } from '../utils/api.types';
24+
import { GROOVY_LANGUAGE_ID } from '../utils/monaco/groovy.ts';
25+
import { LOG_LANGUAGE_ID } from '../utils/monaco/log.ts';
2426
import { Objects } from '../utils/objects';
2527
import { ToastTimeoutQuick } from '../utils/spectrum.ts';
2628

@@ -142,7 +144,7 @@ const ExecutionView = () => {
142144
</ButtonGroup>
143145
</Flex>
144146
</View>
145-
<CodeEditor id="execution-view" value={execution.executable.content} language="groovy" readOnly />
147+
<CodeEditor id="execution-view" value={execution.executable.content} language={GROOVY_LANGUAGE_ID} readOnly />
146148
</Flex>
147149
</Item>
148150
<Item key="output" aria-label="Output">
@@ -169,7 +171,7 @@ const ExecutionView = () => {
169171
</Switch>
170172
</Flex>
171173
</Flex>
172-
<CodeEditor id="execution-output" value={executionOutput} readOnly scrollToBottomOnUpdate={autoscrollOutput} />
174+
<CodeEditor id="execution-output" value={executionOutput} readOnly scrollToBottomOnUpdate={autoscrollOutput} language={LOG_LANGUAGE_ID} />
173175
</Flex>
174176
</Item>
175177
</TabPanels>

ui.frontend/src/utils/monaco/groovy.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ import { registerCommands } from './groovy/commands.ts';
44
import { registerCompletions } from './groovy/completions.ts';
55
import { registerSyntax } from './groovy/syntax.ts';
66

7-
export const LANGUAGE_ID = 'groovy';
7+
export const GROOVY_LANGUAGE_ID = 'groovy';
88

99
export function registerGroovyLanguage(instance: Monaco) {
1010
const languages = instance.languages.getLanguages();
11-
const registered = languages.some((lang) => lang.id === LANGUAGE_ID);
11+
const registered = languages.some((lang) => lang.id === GROOVY_LANGUAGE_ID);
1212

1313
if (!registered) {
1414
registerSyntax(instance);

ui.frontend/src/utils/monaco/groovy/code-actions/replace-with-short-class.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { Monaco } from '@monaco-editor/react';
22
import * as monaco from 'monaco-editor';
3-
import { LANGUAGE_ID } from '../../groovy.ts';
3+
import { GROOVY_LANGUAGE_ID } from '../../groovy.ts';
44

55
export function replaceWithShortClass(instance: Monaco) {
6-
instance.languages.registerCodeActionProvider(LANGUAGE_ID, {
6+
instance.languages.registerCodeActionProvider(GROOVY_LANGUAGE_ID, {
77
provideCodeActions: (model: monaco.editor.ITextModel, range: monaco.Range) => {
88
const codeActions = [] as monaco.languages.CodeAction[];
99

ui.frontend/src/utils/monaco/groovy/completions/aem-code.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ import { languages } from 'monaco-editor/esm/vs/editor/editor.api';
55
import { apiRequest } from '../../../api.ts';
66
import { AssistCodeOutput, Suggestion, SuggestionKind } from '../../../api.types.ts';
77
import { Strings } from '../../../strings.ts';
8-
import { LANGUAGE_ID } from '../../groovy.ts';
8+
import { GROOVY_LANGUAGE_ID } from '../../groovy.ts';
99

1010
export function registerAemCodeCompletions(instance: Monaco) {
1111
registerWordCompletion(instance);
1212
registerResourceCompletion(instance);
1313
}
1414

1515
function registerWordCompletion(instance: Monaco) {
16-
instance.languages.registerCompletionItemProvider(LANGUAGE_ID, {
16+
instance.languages.registerCompletionItemProvider(GROOVY_LANGUAGE_ID, {
1717
provideCompletionItems: async (model: monaco.editor.ITextModel, position: monaco.Position): Promise<monaco.languages.CompletionList> => {
1818
// Do not suggest paths as done separately
1919
const path = extractPath(model.getLineContent(position.lineNumber), position);
@@ -58,7 +58,7 @@ function registerWordCompletion(instance: Monaco) {
5858
}
5959

6060
function registerResourceCompletion(instance: Monaco) {
61-
instance.languages.registerCompletionItemProvider(LANGUAGE_ID, {
61+
instance.languages.registerCompletionItemProvider(GROOVY_LANGUAGE_ID, {
6262
triggerCharacters: ['/'],
6363

6464
provideCompletionItems: async (model: monaco.editor.ITextModel, position: monaco.Position): Promise<monaco.languages.CompletionList> => {

ui.frontend/src/utils/monaco/groovy/completions/core.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Monaco } from '@monaco-editor/react';
22
import * as monaco from 'monaco-editor';
33
import { MarkdownString } from 'monaco-editor/esm/vs/base/common/htmlContent';
4-
import { LANGUAGE_ID } from '../../groovy.ts';
4+
import { GROOVY_LANGUAGE_ID } from '../../groovy.ts';
55

66
export function registerCoreCompletions(instance: Monaco) {
77
registerScriptCompletions(instance);
@@ -11,7 +11,7 @@ export function registerCoreCompletions(instance: Monaco) {
1111
* Completions for class 'groovy.lang.Script' which is the base class for all Groovy scripts.
1212
*/
1313
export function registerScriptCompletions(instance: Monaco) {
14-
instance.languages.registerCompletionItemProvider(LANGUAGE_ID, {
14+
instance.languages.registerCompletionItemProvider(GROOVY_LANGUAGE_ID, {
1515
provideCompletionItems: (model: monaco.editor.ITextModel, position: monaco.Position) => {
1616
const modelPosition = model.getWordUntilPosition(position);
1717
const range = new monaco.Range(position.lineNumber, modelPosition.startColumn, position.lineNumber, modelPosition.endColumn);

ui.frontend/src/utils/monaco/groovy/completions/self-code.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { Monaco } from '@monaco-editor/react';
22
import * as monaco from 'monaco-editor';
3-
import { LANGUAGE_ID } from '../../groovy.ts';
3+
import { GROOVY_LANGUAGE_ID } from '../../groovy.ts';
44

55
export function registerSelfCodeCompletions(instance: Monaco) {
6-
instance.languages.registerCompletionItemProvider(LANGUAGE_ID, {
6+
instance.languages.registerCompletionItemProvider(GROOVY_LANGUAGE_ID, {
77
provideCompletionItems: (model: monaco.editor.ITextModel, position: monaco.Position) => {
88
const textUntilPosition = model.getValueInRange({
99
startLineNumber: 1,

ui.frontend/src/utils/monaco/groovy/syntax.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Monaco } from '@monaco-editor/react';
22
import { language as javaLanguage, conf as javaLanguageConfiguration } from 'monaco-editor/esm/vs/basic-languages/java/java.js';
3-
import { LANGUAGE_ID } from '../groovy.ts';
3+
import { GROOVY_LANGUAGE_ID } from '../groovy.ts';
44

55
export function registerSyntax(instance: Monaco) {
66
// Check if conf and language are not null or undefined
@@ -104,7 +104,7 @@ export function registerSyntax(instance: Monaco) {
104104
};
105105

106106
// Register the Groovy language using the modified configuration and tokenizer
107-
instance.languages.register({ id: LANGUAGE_ID });
108-
instance.languages.setMonarchTokensProvider(LANGUAGE_ID, groovyLanguage);
109-
instance.languages.setLanguageConfiguration(LANGUAGE_ID, groovyLanguageConfiguration);
107+
instance.languages.register({ id: GROOVY_LANGUAGE_ID });
108+
instance.languages.setMonarchTokensProvider(GROOVY_LANGUAGE_ID, groovyLanguage);
109+
instance.languages.setLanguageConfiguration(GROOVY_LANGUAGE_ID, groovyLanguageConfiguration);
110110
}

0 commit comments

Comments
 (0)