From d2ef593cbb097ed04f38a09680a656598dd7d8d3 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Wed, 3 Jan 2024 02:47:05 +0100 Subject: refactor(web): subtler error predicate highlight --- subprojects/frontend/src/editor/EditorTheme.ts | 5 ++++ .../ProblemSemanticHighlightingCalculator.java | 31 +++++++++++++--------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/subprojects/frontend/src/editor/EditorTheme.ts b/subprojects/frontend/src/editor/EditorTheme.ts index 383e1b75..b536dc0c 100644 --- a/subprojects/frontend/src/editor/EditorTheme.ts +++ b/subprojects/frontend/src/editor/EditorTheme.ts @@ -132,6 +132,11 @@ export default styled('div', { textDecorationSkipInk: 'none', }, '.tok-problem-error': { + '&, & .tok-typeName': { + color: theme.palette.highlight.comment, + }, + }, + '.tok-invalid': { '&, & .tok-typeName': { color: theme.palette.error.main, }, diff --git a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java index 4c775fc6..f64d4066 100644 --- a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java +++ b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java @@ -43,7 +43,7 @@ public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighli @Override protected boolean highlightElement(EObject object, IHighlightedPositionAcceptor acceptor, - CancelIndicator cancelIndicator) { + CancelIndicator cancelIndicator) { highlightName(object, acceptor); highlightCrossReferences(object, acceptor, cancelIndicator); return false; @@ -60,7 +60,7 @@ public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighli } protected void highlightCrossReferences(EObject object, IHighlightedPositionAcceptor acceptor, - CancelIndicator cancelIndicator) { + CancelIndicator cancelIndicator) { for (EReference reference : object.eClass().getEAllReferences()) { if (reference.isContainment()) { continue; @@ -101,7 +101,7 @@ public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighli boolean isError = ProblemUtil.isError(eObject); if (ProblemUtil.isBuiltIn(eObject)) { var className = isError ? ERROR_CLASS : BUILTIN_CLASS; - return new String[] { className }; + return new String[]{className}; } return getUserDefinedElementHighlightClass(eObject, reference, isError); } @@ -116,19 +116,12 @@ public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighli && desugarer.isContainmentReference(referenceDeclaration)) { classesBuilder.add(CONTAINMENT_CLASS); } - if (isError) { + if (isError && reference != null) { + // References to error patterns should be highlighted as errors, but error pattern definitions shouldn't. classesBuilder.add(ERROR_CLASS); } if (eObject instanceof Node node) { - if (reference == ProblemPackage.Literals.VARIABLE_OR_NODE_EXPR__VARIABLE_OR_NODE) { - classesBuilder.add(NODE_CLASS); - } - if (ProblemUtil.isIndividualNode(node)) { - classesBuilder.add(INDIVIDUAL_NODE_CLASS); - } - if (ProblemUtil.isNewNode(node)) { - classesBuilder.add(NEW_NODE_CLASS); - } + highlightNode(node, reference, classesBuilder); } if (eObject instanceof Relation relation) { var typeHash = typeHashProvider.getTypeHash(relation); @@ -139,4 +132,16 @@ public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighli List classes = classesBuilder.build(); return classes.toArray(new String[0]); } + + private static void highlightNode(Node node, EReference reference, ImmutableList.Builder classesBuilder) { + if (reference == ProblemPackage.Literals.VARIABLE_OR_NODE_EXPR__VARIABLE_OR_NODE) { + classesBuilder.add(NODE_CLASS); + } + if (ProblemUtil.isIndividualNode(node)) { + classesBuilder.add(INDIVIDUAL_NODE_CLASS); + } + if (ProblemUtil.isNewNode(node)) { + classesBuilder.add(NEW_NODE_CLASS); + } + } } -- cgit v1.2.3-70-g09d2