Skip to content

Commit

Permalink
Cardinality tokens (#713)
Browse files Browse the repository at this point in the history
* Implemented semantic modifiers to reflect cardinality

* Implemented semantic tokens for multi cardinality objects

* Cleaned

* Fixed actions

* Fixed actions

* Test

* Test

* Fix action

* Cleaned
  • Loading branch information
SimonCockx authored Dec 18, 2023
1 parent 51b45f7 commit 4851b1e
Show file tree
Hide file tree
Showing 17 changed files with 360 additions and 263 deletions.
8 changes: 4 additions & 4 deletions .github/actions/maven-build/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ inputs:
build-command:
description: The Maven command to build the project. The default is `package`.
required: false
type: string
# type: string - `type` field is not supported (yet). See comment below.
default: package
run-tests:
description: Whether or not to run tests. The default is true.
required: false
type: boolean
default: true
# type: boolean - This is not supported (yet). All inputs are of type `string`. See https://github.com/actions/runner/issues/2238.
default: 'true'

runs:
using: "composite"
Expand All @@ -28,4 +28,4 @@ runs:
server-password: CI_DEPLOY_PASSWORD
- name: Build with Maven
shell: bash
run: mvn -B -U clean ${{ inputs.build-command }}${{ inputs.run-tests && '' || ' -DskipTests' }}
run: mvn -B -U clean ${{ inputs.build-command }}${{ inputs.run-tests == 'false' && ' -DskipTests' || '' }}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import com.regnosys.rosetta.ide.inlayhints.IInlayHintsService
import com.regnosys.rosetta.ide.util.RangeUtils
import com.regnosys.rosetta.ide.semantictokens.ISemanticTokenTypesProvider
import com.regnosys.rosetta.ide.semantictokens.ISemanticTokenModifiersProvider
import com.regnosys.rosetta.ide.semantictokens.lsp.LSPSemanticTokenModifiersProvider
import com.regnosys.rosetta.ide.semantictokens.ISemanticTokensService
import com.regnosys.rosetta.ide.semantictokens.RosettaSemanticTokensService
import com.regnosys.rosetta.ide.semantictokens.RosettaSemanticTokenTypesProvider
Expand All @@ -30,6 +29,7 @@ import com.regnosys.rosetta.ide.contentassist.cancellable.ICancellableContentAss
import com.regnosys.rosetta.ide.contentassist.cancellable.CancellableRosettaParser
import com.regnosys.rosetta.ide.contentassist.cancellable.CancellableContentAssistService
import com.regnosys.rosetta.ide.contentassist.cancellable.RosettaOperationCanceledManager
import com.regnosys.rosetta.ide.semantictokens.RosettaSemanticTokenModifiersProvider

/**
* Use this class to register ide components.
Expand Down Expand Up @@ -61,7 +61,7 @@ class RosettaIdeModule extends AbstractRosettaIdeModule {
}

def Class<? extends ISemanticTokenModifiersProvider> bindISemanticTokenModifiersProvider() {
LSPSemanticTokenModifiersProvider
RosettaSemanticTokenModifiersProvider
}

def Class<? extends ISemanticTokensService> bindISemanticTokensService() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.regnosys.rosetta.ide.hover;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import javax.inject.Inject;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.documentation.IEObjectDocumentationProvider;

import com.regnosys.rosetta.rosetta.RosettaDefinable;
import com.regnosys.rosetta.rosetta.RosettaSymbol;
import com.regnosys.rosetta.types.CardinalityProvider;

public class RosettaDocumentationProvider implements IEObjectDocumentationProvider {

@Inject
private CardinalityProvider cardinalityProvider;

@Override
public String getDocumentation(EObject o) {
List<String> docs = new ArrayList<>();
if (o instanceof RosettaSymbol) {
RosettaSymbol symbol = (RosettaSymbol)o;
boolean isMulti = cardinalityProvider.isSymbolMulti(symbol);

if (isMulti) {
docs.add("**Multi cardinality.**");
}
}
if (o instanceof RosettaDefinable) {
RosettaDefinable objectWithDocs = (RosettaDefinable)o;
if (objectWithDocs.getDefinition() != null) {
docs.add(objectWithDocs.getDefinition());
}
}
if (docs.isEmpty()) {
return null;
}
return docs.stream().collect(Collectors.joining("\n\n"));
}

}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ private int getTokenModifiersRepr(final ISemanticTokenModifier[] tokenModifiers)
if (repr == -1) {
throw new Error(String.format("Token modifier `%s` not found. Did you forget to bind it in the `%s`?", mod.getValue(), ISemanticTokenModifiersProvider.class.getSimpleName()));
}
bitmask |= repr;
bitmask |= 1 << repr;
}
return bitmask;
}
Expand All @@ -118,7 +118,7 @@ protected SemanticToken createSemanticToken(EObject tokenObject, ISemanticTokenT
}

protected SemanticToken createSemanticToken(EObject tokenObject, EStructuralFeature feature, ISemanticTokenType tokenType, ISemanticTokenModifier... tokenModifiers) {
return createSemanticToken(tokenObject, feature, -1, tokenType);
return createSemanticToken(tokenObject, feature, -1, tokenType, tokenModifiers);
}

protected SemanticToken createSemanticToken(EObject tokenObject, EStructuralFeature feature, int featureIndex, ISemanticTokenType tokenType, ISemanticTokenModifier... tokenModifiers) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.regnosys.rosetta.ide.semantictokens;

public enum RosettaSemanticTokenModifiersEnum implements ISemanticTokenModifier {
// Predefined by the LS protocol:
DEFAULT_LIBRARY("defaultLibrary"),
// Custom ones
SINGLE_CARDINALITY("singleCardinality"),
MULTI_CARDINALITY("multiCardinality");

private final String value;

RosettaSemanticTokenModifiersEnum(String value) {
this.value = value;
}

@Override
public String getValue() {
return this.value;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.regnosys.rosetta.ide.semantictokens;

import java.util.Arrays;
import java.util.List;

public class RosettaSemanticTokenModifiersProvider implements ISemanticTokenModifiersProvider {
@Override
public List<ISemanticTokenModifier> getSemanticTokenModifiers() {
return Arrays.asList(RosettaSemanticTokenModifiersEnum.values());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ public enum RosettaSemanticTokenTypesEnum implements ISemanticTokenType {
DOCUMENT_SEGMENT("documentSegment"),
META_MEMBER("metaMember"),
INLINE_PARAMETER("inlineParameter"),
RULE("rule");
OUTPUT("output"),
RULE("rule"),
IMPLICIT_VARIABLE("implicitVariable");

private final String value;

Expand Down
Loading

0 comments on commit 4851b1e

Please sign in to comment.