From 6f5aaa35700a7df0f06059a05e77885264f968ad Mon Sep 17 00:00:00 2001 From: thejoecode <1725110+thejoecode@users.noreply.github.com> Date: Sat, 24 Aug 2024 06:53:01 -0400 Subject: [PATCH 1/4] Update imports to match latest (#251) LangiumDocumentFactory was missing and LangiumSharedServices has moved to langium/lsp --- hugo/content/docs/recipes/builtin-library.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hugo/content/docs/recipes/builtin-library.md b/hugo/content/docs/recipes/builtin-library.md index 974047cd..8401d61e 100644 --- a/hugo/content/docs/recipes/builtin-library.md +++ b/hugo/content/docs/recipes/builtin-library.md @@ -24,8 +24,9 @@ import { AstNode, DefaultWorkspaceManager, LangiumDocument, - LangiumSharedServices + LangiumDocumentFactory } from "langium"; +import { LangiumSharedServices } from "langium/lsp"; import { WorkspaceFolder } from 'vscode-languageserver'; import { URI } from "vscode-uri"; import { builtinHelloWorld } from './builtins'; From 4dfaa9b649a85a07ee845618f05e5b0c4dcfa9fe Mon Sep 17 00:00:00 2001 From: Markus Rudolph Date: Wed, 28 Aug 2024 14:36:34 +0200 Subject: [PATCH 2/4] Recipe: Dependency loop detection (#240) --- .../content/docs/recipes/validation/_index.md | 4 + .../recipes/validation/dependency-loops.md | 336 ++++++++++++++++++ hugo/static/assets/dependency-loops.png | Bin 0 -> 159971 bytes 3 files changed, 340 insertions(+) create mode 100644 hugo/content/docs/recipes/validation/_index.md create mode 100644 hugo/content/docs/recipes/validation/dependency-loops.md create mode 100644 hugo/static/assets/dependency-loops.png diff --git a/hugo/content/docs/recipes/validation/_index.md b/hugo/content/docs/recipes/validation/_index.md new file mode 100644 index 00000000..9f65581c --- /dev/null +++ b/hugo/content/docs/recipes/validation/_index.md @@ -0,0 +1,4 @@ +--- +title: Validation +weight: 150 +--- \ No newline at end of file diff --git a/hugo/content/docs/recipes/validation/dependency-loops.md b/hugo/content/docs/recipes/validation/dependency-loops.md new file mode 100644 index 00000000..c02a7505 --- /dev/null +++ b/hugo/content/docs/recipes/validation/dependency-loops.md @@ -0,0 +1,336 @@ +--- +title: "Dependency Loops" +weight: 100 +--- + +## What is the problem? + +If you are building some composite data structures or have some computation flow, you might be interested whether the product, that you are generating, does contain any loops back to the already used product. We want to implement a validation that does this detection in the background and notifies us by highlighting the lines causing this problem. +The second part of the problem is the resolution of the dependencies. If there are no loops, we want to get a resolution of the dependencies in a loop-free order. + +Examples for such dependency loops are: + +* For data structures you could think of a structure in C that references itself (without using the pointer notation). This would lead to an infinitely expanding data type, which is practically not doable. + + ```c + typedef struct { + int value; + LinkedList next; //error, should be "MyStruct* next;", a pointer to next + } LinkedList; + ``` + +* Or for control flows these loops can be interpreted as recursion detection, a function that calls itself (with any number of function calls to other functions in-between). + + ```c + void foo() { + bar(); + } + void bar() { + answer42(); + } + void answer42() { + bar(); //error, foo calls bar, bar calls answer42, answer42 calls foo + } + ``` + +Regardless of what usecase you have, you might have an interest to detect those loops and get early feedback in the shape of a validation error. + +The other point is the **resolution for loop-free dependencies**. Think of a net of package imports in +a programming language. You want to know the order in which you can import the packages without getting into trouble. + +```plaintext +A -> B -> C +A -> C +C -> D + +//resolution: A, B, C, D +``` + +Or think of a function call graph. You want to know the order in which you can build the functions such that every dependency was built before the dependent function. + +```c +void answer42() { + printf("42\n"); +} +void bar1() { + answer42(); +} +void foo() { + bar1(); + bar2(); +} +void bar2() { + answer42(); +} +``` + +Here the resolution would be: `answer42`, `bar1`, `bar2`, `foo`. + +## How to solve it? + +There are two approaches for a loop detection and the loop-free resolution depending on the nature of your situation. + +### Simple nature + +#### Simple detection + +If you have a `1:n` relationship like the `super class`-to-`sub class` relation for classes, you can do it by simply walking along the parent route (or in this specific example the `super class`-route). Just keep in mind all visited places and if one parent is already in that list, you have detected a loop! + +```java +public class A extends B {} +public class B extends C {} +public class C extends A {} //error +``` + +#### Simple resolution + +Assuming that you have no loops back, you can resolve a list of dependencies. +You do a simple depth-first-search, starting with the parent visiting the children afterwards (recursively). + +```java +public class A {} //add A +public class B extends A {} //add A -> B +public class C extends A {} //add A -> C +public class D extends C {} //add C -> D +public class E extends C {} //add C -> E + +//resolution: A, (B or (C, (D or E))) +``` + +### Complex nature + +#### Complex detection + +If you have a `n:m` relationship like it is given for function calls (a function can be called by `m` function and can call `n` functions), you can solve the question for loops by creating a directed graph. + +In this example the nodes are the set of all functions and function calls are stored as edges (for each call from function A to every function B). +The key algorithm is the search for the so-called strongly-connected components in the resulting graph. + +Please use an existing solution for the algorithm (keep in mind the effort you can avoid and a quality you can gain)! The algorithm is able to output every loop with all its members of that loop. But you are free to make your own implementation. + +#### Complex resolution + +The directed graph approach can be processed further when there were no loops found: + +With a "topological sort" you can get an order that respects all dependencies. Means more or less: You start with the node that has no dependencies, remove it, put it into your sorted list and do the same for the resulting graph again and again until all dependencies were resolved. + +The topological sort (as well as the strongly-connected component search) is a standard algorithm in every good graph library. + +## How to make it work in Langium? + +In the following example we will resolve the dependencies for a complex nature of data. + +Therefore we will take the `HelloWorld` example from the learning section and extend it with a validation that checks for greeting loops. Greeting loops are forbidden in this example. When `A` greets `B` and `B` greets `C`, then `C` must not greet `A`. + +### Adapt the grammar + +We will change the `HelloWorld` grammar, so that persons can greet each other. After that, we will introduce a validation in order to forbid "greeting loops". + +```langium +grammar HelloWorld + +entry Model: + (persons+=Person | greetings+=Greeting)*; + +Person: + 'person' name=ID; + +Greeting: + greeter=[Person:ID] 'greets' greeted=[Person:ID] '!'; + +hidden terminal WS: /\s+/; +terminal ID: /[_a-zA-Z][\w_]*/; +```` + +After the change build your grammar with `npm run langium:generate`. + +### Loop detection + +Now we will add the validation. Here we will use the graph library ‚graphology‘. Please install these three packages (`graphology` contains the data structure, `graphology-components` contains the strongly-connected component search, `graphology-dag` contains the topological sort): + +```bash +npm install graphology graphology-components graphology-dag +``` + +Open the `hello-world-validator.ts` and add another validator for `Model`. It is important to say that we do not create a check on the `Greeting` level, because we need the overview over all greetings. The complete overview is given for the `Model` AST node. It would be possible to just calculate cycles for a single greeting or person, but that is more complex and less performant! + +```typescript +const checks: ValidationChecks = { + Model: validator.checkGreetingCycles, // new!!! + Person: validator.checkPersonStartsWithCapital +}; +``` + +And here is the implementation: + +```typescript +checkGreetingCycles(model: Model, accept: ValidationAcceptor): void { + //arrange the graph + const graph = new DirectedGraph<{}, {greeting: Greeting}>(); + model.persons.forEach(person => { + graph.addNode(person.name); + }) + model.greetings.forEach(greeting => { + if(greeting.greeter.ref && greeting.greeted.ref && !graph.hasDirectedEdge(greeting.greeter.ref.name, greeting.greeted.ref.name)) { + graph.addEdge(greeting.greeter.ref.name, greeting.greeted.ref.name, { + greeting //we store the greeting for later reference in the validation message + }); + } + }); + + //compute the components + const components = stronglyConnectedComponents(graph); + + //evaluate result (filter out size-1-components) + const actualLoops = components.filter(c => c.length > 1); + for (const component of actualLoops) { + const set = new Set(component); + //for each node in the component... + for (const from of set) { + //check whether the out edges... + for (const { target: to, attributes: { greeting } } of graph.outEdgeEntries(from)) { + //are within the component + if(set.has(to)) { + //if yes, set an error on the corresponding greeting + accept("error", "Greeting loop detected!", { + node: greeting + }); + } + } + } + } +} +``` + +After finishing your validator, do not forget to build your project with `npm run build`. +So a `.hello` file like this one, would have 3 greetings with an error: + +```plaintext +person Homer +person Marge +person Pinky +person Brain + +Homer greets Marge! //error +Marge greets Brain! //error +Brain greets Homer! //error +Pinky greets Marge! +``` + +Here is the screenshot of VS Code with the error: + +![Greeting loop errors](/assets/dependency-loops.png) + +### Dependency resolution + +The topological sort can be done like this: + +```typescript +import { topologicalSort } from 'graphology-dag'; + +//resolvedOrder is an array of person names! +const resolvedOrder = topologicalSort(graph); +``` + +This will give you back an order of greeters. The rule would be like: `You can only greet if every greeting addressed to you was already spoken out.` +For a `.hello` file like this, we would get the order: `Homer`, `Brain`, `Pinky`, `Marge`. + +```plaintext +person Homer +person Marge + +person Pinky +person Brain + +Homer greets Marge! +Brain greets Pinky! +Pinky greets Marge! +``` + +* `Homer` is not greeted by anyone, so he can start greeting `Marge`. +* `Marge` and `Pinky` are blocked by `Pinky` and `Brain`. +* `Brain` is the next and unblocks `Pinky`. +* After `Pinky` is done, `Marge` is unblocked as well. +* But `Marge` has no one to greet. +* So, we are done. + +## Appendix + +
+Full Implementation + +```ts +import type { ValidationAcceptor, ValidationChecks } from 'langium'; +import type { Greeting, HelloWorldAstType, Model } from './generated/ast.js'; +import type { HelloWorldServices } from './hello-world-module.js'; +import { DirectedGraph } from 'graphology'; +import { stronglyConnectedComponents } from 'graphology-components'; +import { topologicalSort } from 'graphology-dag'; + +/** + * Register custom validation checks. + */ +export function registerValidationChecks(services: HelloWorldServices) { + const registry = services.validation.ValidationRegistry; + const validator = services.validation.HelloWorldValidator; + const checks: ValidationChecks = { + Model: validator.checkGreetingCycles, + //Not needed for this example + //Person: validator.checkPersonStartsWithCapital + }; + registry.register(checks, validator); +} + +/** + * Implementation of custom validations. + */ +export class HelloWorldValidator { + checkGreetingCycles(model: Model, accept: ValidationAcceptor): void { + //arrange the graph + const graph = new DirectedGraph<{}, {greeting: Greeting}>(); + model.persons.forEach(person => { + graph.addNode(person.name); + }) + model.greetings.forEach(greeting => { + if(greeting.greeter.ref && greeting.greeted.ref && !graph.hasDirectedEdge(greeting.greeter.ref.name, greeting.greeted.ref.name)) { + graph.addEdge(greeting.greeter.ref.name, greeting.greeted.ref.name, { + greeting + }); + } + }); + + //compute the components + const components = stronglyConnectedComponents(graph); + + //evaluate result (filter out size-1-components) + const actualLoops = components.filter(c => c.length > 1); + for (const component of actualLoops) { + const set = new Set(component); + //for each node in the component... + for (const from of set) { + //check whether the out edges... + for (const { target: to, attributes: { greeting } } of graph.outEdgeEntries(from)) { + //are within the component + if(set.has(to)) { + //if yes, set an error on the corresponding greeting + accept("error", "Greeting loop detected!", { + node: greeting + }); + } + } + } + } + + //resolve all dependencies + if(actualLoops.length === 0) { + const resolvedOrder = topologicalSort(graph); + //this is done as a hint, just for demonstration purposes + accept('hint', "Please greet in the following greeter order: "+resolvedOrder.join(", "), { + node: model + }); + } + } +} +``` + +
diff --git a/hugo/static/assets/dependency-loops.png b/hugo/static/assets/dependency-loops.png new file mode 100644 index 0000000000000000000000000000000000000000..f658d0ddd91d3cd7faca378f650b2fead5753291 GIT binary patch literal 159971 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 literal 0 HcmV?d00001 From 7f098d8ab7d4ff09fb55b81a51b1f544947d23f2 Mon Sep 17 00:00:00 2001 From: Markus Rudolph Date: Wed, 4 Sep 2024 17:31:14 +0200 Subject: [PATCH 3/4] Recipe: Caches (#241) Co-authored-by: Benjamin Friedman Wilson --- .../docs/recipes/performance/_index.md | 4 + .../docs/recipes/performance/caches.md | 215 ++++++++++++++++++ 2 files changed, 219 insertions(+) create mode 100644 hugo/content/docs/recipes/performance/_index.md create mode 100644 hugo/content/docs/recipes/performance/caches.md diff --git a/hugo/content/docs/recipes/performance/_index.md b/hugo/content/docs/recipes/performance/_index.md new file mode 100644 index 00000000..5f2a4082 --- /dev/null +++ b/hugo/content/docs/recipes/performance/_index.md @@ -0,0 +1,4 @@ +--- +title: "Performance" +weight: 175 +--- \ No newline at end of file diff --git a/hugo/content/docs/recipes/performance/caches.md b/hugo/content/docs/recipes/performance/caches.md new file mode 100644 index 00000000..f2a7a1b6 --- /dev/null +++ b/hugo/content/docs/recipes/performance/caches.md @@ -0,0 +1,215 @@ +--- +title: "Caches" +weight: 0 +--- + +## What is the problem? + +You have parsed a document and you would like to execute some computation on the AST. But you don’t want to do this every time you see a certain node. You want to do it once for the lifetime of a document. Where to save it? + +## How to solve it? + +For data that depends on the lifetime of a document or even the entire workspace, Langium has several kinds of caches: + +* the document cache saves key-value-pairs of given types `K` and `V` for each document. If the document gets changed or deleted the cache gets cleared automatically for the single files +* the workspace cache also saves key-value-pairs of given types `K` and `V`, but gets cleared entirely when something in the workspace gets changed + +Besides those specific caches, Langium also provides: + +* a simple cache that can be used for any kind of key-value-data +* a context cache that stores a simple cache for each context object. The document cache and workspace cache are implemented using the context cache + +## How to use it? + +Here we will use the `HelloWorld` example from the learning section. Let's keep it simple and just list people in a document, which will come from a comic book. + +We will have a computation for each person that determines from which publisher it comes from. + +### Add a database + +Let's build a "publisher inferer service". First let's create a small database of known publishers and known persons: + +```typescript +type KnownPublisher = 'DC' | 'Marvel' | 'Egmont'; +const KnownPersonNames: Record = { + DC: ['Superman', 'Batman', 'Aquaman', 'Wonderwoman', 'Flash'], + Marvel: ['Spiderman', 'Wolverine', 'Deadpool'], + Egmont: ['Asterix', 'Obelix'] +}; +``` + +### Define the computation service + +For our service we define an interface: + +```typescript +export interface InferPublisherService { + inferPublisher(person: Person): KnownPublisher | undefined; +} +``` + +Now we implement the service: + +```typescript +class UncachedInferPublisherService implements InferPublisherService { + inferPublisher(person: Person): KnownPublisher | undefined { + for (const [publisher, persons] of Object.entries(KnownPersonNames)) { + if (persons.includes(person.name)) { + return publisher as KnownPublisher; + } + } + return undefined; + } +} +``` + +### Add a cache + +Now we want to cache the results of the `inferPublisher` method. We can use the `DocumentCache` for this. We will reuse the uncached service as base class and override the `inferPublisher` method: + +```typescript +export class CachedInferPublisherService extends UncachedInferPublisherService { + private readonly cache: DocumentCache; + constructor(services: HelloWorldServices) { + super(); + this.cache = new DocumentCache(services.shared); + } + override inferPublisher(person: Person): KnownPublisher | undefined { + const documentUri = AstUtils.getDocument(person).uri; + //get cache entry for the documentUri and the person + //if it does not exist, calculate the value and store it + return this.cache.get(documentUri, person, () => super.inferPublisher(person)); + } +} +``` + +### Use the service + +To use this service, let's create a validator that checks if the publisher of a person is known. Go to the `hello-world-validator.ts` file and add the following code: + +```typescript +import type { ValidationAcceptor, ValidationChecks } from 'langium'; +import type { HelloWorldAstType, Person } from './generated/ast.js'; +import type { HelloWorldServices } from './hello-world-module.js'; +import { InferPublisherService } from './infer-publisher-service.js'; + +/** + * Register custom validation checks. + */ +export function registerValidationChecks(services: HelloWorldServices) { + const registry = services.validation.ValidationRegistry; + const validator = services.validation.HelloWorldValidator; + const checks: ValidationChecks = { + Person: validator.checkPersonIsFromKnownPublisher + }; + registry.register(checks, validator); +} + +/** + * Implementation of custom validations. + */ +export class HelloWorldValidator { + private readonly inferPublisherService: InferPublisherService; + + constructor(services: HelloWorldServices) { + this.inferPublisherService = services.utilities.inferPublisherService; + } + + checkPersonIsFromKnownPublisher(person: Person, accept: ValidationAcceptor): void { + if (!this.inferPublisherService.inferPublisher(person)) { + accept('warning', `"${person.name}" is not from a known publisher.`, { + node: person + }); + } + } + +} +``` + +### Register the service + +Finally, we need to register the service in the module. Go to the `hello-world-module.ts` file and add the following code: + +```typescript +export type HelloWorldAddedServices = { + utilities: { + inferPublisherService: InferPublisherService + }, + validation: { + HelloWorldValidator: HelloWorldValidator + } +} +//... +export const HelloWorldModule: Module = { + utilities: { + inferPublisherService: (services) => new CachedInferPublisherService(services) + }, + validation: { + //add `services` parameter here + HelloWorldValidator: (services) => new HelloWorldValidator(services) + } +}; +``` + +### Test the result + +Start the extension and create a `.hello` file with several persons, like this one: + +```plaintext +person Wonderwoman +person Spiderman +person Homer //warning: unknown publisher!! +person Obelix +``` + +## Last words + +Caching can improve the performance of your language server. It is especially useful for computations that are expensive to calculate. The `DocumentCache` and `WorkspaceCache` are the most common caches to use. The `ContextCache` is useful if you need to store data for a specific context object. If you only need a key-value store, you can use the `SimpleCache`. +All of these caches are disposable compared to a simple `Map`. If you dispose them by calling `dispose()` the entries will be removed and the memory will be freed. Plus, from the moment you have called `dispose()`, the cache will not react to changes in the workspace anymore. + +## Appendix + +

+Full implementation + +```typescript +import { AstUtils, DocumentCache } from "langium"; +import { Person } from "./generated/ast.js"; +import { HelloWorldServices } from "./hello-world-module.js"; + +type KnownPublisher = 'DC' | 'Marvel' | 'Egmont'; +const KnownPersonNames: Record = { + DC: ['Superman', 'Batman', 'Aquaman', 'Wonderwoman', 'Flash'], + Marvel: ['Spiderman', 'Wolverine', 'Deadpool'], + Egmont: ['Asterix', 'Obelix'] +}; + +export interface InferPublisherService { + inferPublisher(person: Person): KnownPublisher | undefined; +} + +class UncachedInferPublisherService implements InferPublisherService { + inferPublisher(person: Person): KnownPublisher | undefined { + for (const [publisher, persons] of Object.entries(KnownPersonNames)) { + if (persons.includes(person.name)) { + return publisher as KnownPublisher; + } + } + return undefined; + } +} + +export class CachedInferPublisherService extends UncachedInferPublisherService { + private readonly cache: DocumentCache; + constructor(services: HelloWorldServices) { + super(); + this.cache = new DocumentCache(services.shared); + } + override inferPublisher(person: Person): KnownPublisher | undefined { + const documentUri = AstUtils.getDocument(person).uri; + return this.cache.get(documentUri, person, () => super.inferPublisher(person)); + } +} +``` + +
From 8461fcbd3cc6bba651c4bfdc1b09073b5232ac1e Mon Sep 17 00:00:00 2001 From: Yannick Daveluy Date: Thu, 5 Sep 2024 11:55:00 +0200 Subject: [PATCH 4/4] Update builtin-library.md (#252) --- hugo/content/docs/recipes/builtin-library.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/hugo/content/docs/recipes/builtin-library.md b/hugo/content/docs/recipes/builtin-library.md index 8401d61e..fcb3e902 100644 --- a/hugo/content/docs/recipes/builtin-library.md +++ b/hugo/content/docs/recipes/builtin-library.md @@ -163,3 +163,14 @@ export function activate(context: vscode.ExtensionContext) { This registers an in-memory file system for vscode to use for the `builtin` file schema. Every time vscode is supposed to open a file with this schema, it will invoke the `stat` and `readFile` methods of the registered file system provider. + +To ensure that LSP services (such as hover, outline, go to definition, etc.) work properly inside a built-in file, make sure that LanguageClientOptions is correctly configured. The document selector used for your language should handle the `builtin` scheme. It is recommended to support all schemes, either by removing the scheme option or by setting the scheme option to `'*'`. + +```ts +// Options to control the language client +clientOptions: LanguageClientOptions = { + documentSelector: [{ language: 'mydsl' }], + // Alternatively: + documentSelector: [{ scheme: '*', language: 'mydsl' }], +} +```