Skip to content

Commit

Permalink
Semantic tokens (#87)
Browse files Browse the repository at this point in the history
Co-authored-by: Michal Bali <michalbali32@gmail.com>
  • Loading branch information
marcel1hruska and michalbali256 authored Dec 17, 2020
1 parent dd75d4e commit af48148
Show file tree
Hide file tree
Showing 66 changed files with 1,616 additions and 1,100 deletions.
6 changes: 4 additions & 2 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -284,5 +284,7 @@ jobs:
with:
name: hlasm-language-support-${{ env.VERSION }}-alpine.vsix
path: clients/vscode-hlasmplugin/plugin/
- name: Run Tests
run: cd clients/vscode-hlasmplugin && npm install && npm run compile && node ./build/bin/theiaTest.js /home/theia/
- name: npm install
run: cd clients/vscode-hlasmplugin && npm install
- name: Run Theia Tests
run: cd clients/vscode-hlasmplugin && npm run test:theia /home/theia/
6 changes: 6 additions & 0 deletions clients/vscode-hlasmplugin/build/bin/theiaTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,12 @@ async function main() {
child.on('close', function() {
process.exit(2);
})

// Give all the tests 60 seconds to finish, otherwise timeout
setTimeout(async function() {
process.exit(2);
}, 60000)

}

main();
2 changes: 1 addition & 1 deletion clients/vscode-hlasmplugin/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

199 changes: 121 additions & 78 deletions clients/vscode-hlasmplugin/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,124 @@
},
"scripts": {
"postinstall": "npm run compile",
"compile": "tsc -p ./tsconfig.json && node ./build/bin/prepareWorkspace.js",
"compile": "tsc -p ./tsconfig.json",
"clean": "node ./build/bin/clean.js",
"package": "vsce package",
"test": "npm run compile && node ./lib/test/runTest.js",
"test:insiders": "npm run compile && node ./lib/test/runTest.js insiders"
"test": "npm run compile && node ./build/bin/prepareWorkspace.js && node ./lib/test/runTest.js",
"test:insiders": "npm run compile && node ./build/bin/prepareWorkspace.js && node ./lib/test/runTest.js insiders",
"test:theia": "npm run compile && node ./build/bin/prepareWorkspace.js && node ./build/bin/theiaTest.js"
},
"contributes": {
"colors": [
{
"id": "hlasm.function",
"description": "Color for HLASM instructions",
"defaults": {
"dark": "#DCDCAA",
"light": "#795E26",
"highContrast": "#DCDCAA"
}
},
{
"id": "hlasm.comment",
"description": "Color for comments and remarks",
"defaults": {
"dark": "#6A9955",
"light": "#008000",
"highContrast": "#7CA668"
}
},
{
"id": "hlasm.event",
"description": "Color for ignored characters",
"defaults": {
"dark": "#F44747",
"light": "#CD3131",
"highContrast": "#F44747"
}
},
{
"id": "hlasm.modifier",
"description": "Color for continuation characters and data definition type extension character",
"defaults": {
"dark": "#569CD6",
"light": "#0000FF",
"highContrast": "#569CD6"
}
},
{
"id": "hlasm.regexp",
"description": "Color for data definition type character",
"defaults": {
"dark": "#646695",
"light": "#811F3F",
"highContrast": "#B46695"
}
},
{
"id": "hlasm.variable",
"description": "Color for variable symbols",
"defaults": {
"dark": "#9CDCFE",
"light": "#001080",
"highContrast": "#9CDCFE"
}
},
{
"id": "hlasm.string",
"description": "Color for strings",
"defaults": {
"dark": "#CE9178",
"light": "#A31515",
"highContrast": "#CE9178"
}
},
{
"id": "hlasm.number",
"description": "Color for numbers",
"defaults": {
"dark": "#B5CEA8",
"light": "#098658",
"highContrast": "#B5CEA8"
}
},
{
"id": "hlasm.keyword",
"description": "Color for sequence symbols",
"defaults": {
"dark": "#C586C0",
"light": "#AF00DB",
"highContrast": "#C586C0"
}
},
{
"id": "hlasm.class",
"description": "Color for labels",
"defaults": {
"dark": "#4EC9B0",
"light": "#267F99",
"highContrast": "#4EC9B0"
}
},
{
"id": "hlasm.operator",
"description": "Color for operators",
"defaults": {
"dark": "#D4D4D4",
"light": "#000000",
"highContrast": "#D4D4D4"
}
},
{
"id": "hlasm.parameter",
"description": "Color for operands",
"defaults": {
"dark": "#808080",
"light": "#800000",
"highContrast": "#808080"
}
}
],
"jsonValidation": [
{
"fileMatch": "pgm_conf.json",
Expand Down Expand Up @@ -161,6 +272,13 @@
"firstLine": " *MACRO *"
}
],
"grammars": [
{
"language": "hlasm",
"scopeName": "source.hlasm",
"path": "./syntaxes/hlasm.tmLanguage.json"
}
],
"configurationDefaults": {
"[hlasm]": {
"editor.rulers": [
Expand Down Expand Up @@ -197,81 +315,6 @@
"type": "object",
"title": "hlasmplugin configuration",
"properties": {
"hlasm.semanticHighlightingColors": {
"type": "array",
"default": [
{
"id": "comment",
"description": "Color for comments",
"hex": "#4c9b3f"
},
{
"id": "ignored",
"description": "Color for ignored characters",
"hex": "#b0a6c9"
},
{
"id": "continuation",
"description": "Color for continuation characters",
"hex": "#5fffff"
},
{
"id": "data_def_type",
"description": "Color for data definition type character",
"hex": "#6699ff"
},
{
"id": "data_def_extension",
"description": "Color for data definition type extension character",
"hex": "#6699AA"
},
{
"id": "remark",
"description": "Color for remarks",
"hex": "#06aed8"
},
{
"id": "varSymbol",
"description": "Color for variable symbols",
"hex": "#ee4f7c"
},
{
"id": "string",
"description": "Color for strings",
"hex": "#ff6600"
},
{
"id": "number",
"description": "Color for numbers",
"hex": "#2a397a"
},
{
"id": "seqSymbol",
"description": "Color for sequence symbols",
"hex": "#8b7d6b"
},
{
"id": "label",
"description": "Color for labels",
"hex": "#ffff00"
},
{
"id": "operator",
"description": "Color for operators",
"hex": "#f5e5c2"
},
{
"id": "instruction",
"description": "Color for instructions",
"hex": "#ff0000"
},
{
"id": "operand",
"description": "Color for operands",
"hex": "#797979"
}
]
},
"hlasm.arguments": {
"type": "array",
"default": [],
Expand Down
20 changes: 5 additions & 15 deletions clients/vscode-hlasmplugin/src/continuationHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,8 @@

import * as vscode from 'vscode';

import { setCursor } from './customEditorCommands'
import { setCursor, isLineContinued } from './customEditorCommands'
import { getConfig } from './eventsHandler'
import { ContinuationDocumentsInfo } from './hlasmSemanticHighlighting'

/**
* Implements removeContinuation and insertContinuation commands.
Expand All @@ -25,17 +24,12 @@ export class ContinuationHandler {
dispose() { }

// insert continuation character X to the current line
insertContinuation(editor: vscode.TextEditor, edit: vscode.TextEditorEdit, info: ContinuationDocumentsInfo) {
insertContinuation(editor: vscode.TextEditor, edit: vscode.TextEditorEdit, continuationOffset: number, continueColumn: number) {
if (!getConfig<boolean>('continuationHandling', false))
return;

// retrieve continuation information
const foundDoc = info.get(editor.document.uri.toString());
if (!foundDoc)
return;
const continuationOffset = foundDoc.continuationColumn;
const continueColumn = foundDoc.continueColumn;
const isContinued = foundDoc.lineContinuations.get(editor.selection.active.line);
const isContinued = isLineContinued(editor.document, editor.selection.active.line, continuationOffset);

if (!isContinued) {
if (editor.selection.active.character < continuationOffset) {
Expand Down Expand Up @@ -64,15 +58,11 @@ export class ContinuationHandler {
}

// remove continuation from previous line
removeContinuation(editor: vscode.TextEditor, edit: vscode.TextEditorEdit, info: ContinuationDocumentsInfo) {
removeContinuation(editor: vscode.TextEditor, edit: vscode.TextEditorEdit, continuationOffset: number) {
if (!getConfig<boolean>('continuationHandling', false))
return;

const foundDoc = info.get(editor.document.uri.toString());
if (!foundDoc)
return;
const continuationOffset = foundDoc.continuationColumn;
const wasLastContinued = foundDoc.lineContinuations.get(editor.selection.active.line - 1);
const wasLastContinued = isLineContinued(editor.document, editor.selection.active.line - 1, continuationOffset);

if (editor.selection.active.line > 0 && wasLastContinued) {
const continuationPosition = new vscode.Position(
Expand Down
17 changes: 15 additions & 2 deletions clients/vscode-hlasmplugin/src/customEditorCommands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,9 @@ export class CustomEditorCommands {
editor.selection.active.character - ((selectionSize >= -1) ? selectionSize : 0));

// there is a continuation and it is after our position, handle it
if (continuationOffset && editor.selection.active.character < continuationOffset && editor.selection.isSingleLine) {
if (isLineContinued(editor.document,editor.selection.active.line, continuationOffset) &&
editor.selection.active.character < continuationOffset &&
editor.selection.isSingleLine) {
const beforeContinuationChars =
new vscode.Range(editor.selection.active.line,
continuationOffset - Math.abs(selectionSize),
Expand Down Expand Up @@ -142,7 +144,10 @@ export class CustomEditorCommands {
: editor.selection.active.character;

// there is a continuation and it is after our position, handle it
if (continuationOffset && endPos < continuationOffset && (editor.selection.active.character > 0 || selectionSize > 0) && editor.selection.isSingleLine) {
if (isLineContinued(editor.document,editor.selection.active.line, continuationOffset) &&
endPos < continuationOffset &&
(editor.selection.active.character > 0 || selectionSize > 0) &&
editor.selection.isSingleLine) {
const beforeContinuationChars = new vscode.Range(
editor.selection.active.line, continuationOffset - Math.abs(selectionSize),
editor.selection.active.line, continuationOffset);
Expand Down Expand Up @@ -184,3 +189,11 @@ export class CustomEditorCommands {
export function setCursor(editor: vscode.TextEditor, position: vscode.Position) {
editor.selection = new vscode.Selection(position, position);
}

export function isLineContinued(document: vscode.TextDocument, line: number, offset: number): boolean {
if (line < 0 || offset < 0)
return false;
const continuationPosition = new vscode.Position(line, offset);
return document.validatePosition(continuationPosition) == continuationPosition &&
document.lineAt(line).text[offset] != " ";
}
Loading

0 comments on commit af48148

Please sign in to comment.