UNPKG

made-beta

Version:

It allows you to create tasks in your project manager (e.g., Github) automatically based on predefined processes. Additionally, it generates documentation based on the project.

102 lines (85 loc) 5.3 kB
import { AstNode, AstNodeDescription, DefaultScopeComputation, LangiumDocument } from "langium"; import { CancellationToken } from "vscode-languageclient"; import { Model, isBacklog, isEpic, isProcess, isAtomicUserStory, isTeam, isTaskBacklog, isRoadmap } from "./generated/ast.js"; export class CustomScopeComputation extends DefaultScopeComputation { override async computeExports(document: LangiumDocument<AstNode>, cancelToken?: CancellationToken): Promise<AstNodeDescription[]> { const defaultGlobal = await super.computeExports(document, cancelToken); const root = document.parseResult.value as Model; if (!root.components) { // Handle the case where root.components is not defined or empty return defaultGlobal; } // Process Epics and User Stories const epics = this.getEpics(root, document); const userStories = this.getUserStories(root, document); const taskBacklog = this.getTaskBacklog(root, document) const USEpic = this.getUSEpics(root,document); const taskUSEPIC = this.getTaskUSEpics(root,document) const processes = this.getProcesses(root, document); const activities = this.getActivities(root, document); const tasks = this.getTasks(root, document); const people = this.getPeople(root, document); const milestones = this.getMileStone(root, document) return defaultGlobal.concat(epics, userStories, taskBacklog, processes, activities, tasks, people,milestones, USEpic,taskUSEPIC); } private getMileStone(root: Model, document: LangiumDocument<AstNode>): AstNodeDescription[] { return root.components .filter(isRoadmap) .flatMap(roadmap => roadmap.milestones .map(milestone => this.descriptions.createDescription(milestone, `${milestone.$container.id}.${milestone.id}`, document))); } private getEpics(root: Model, document: LangiumDocument<AstNode>): AstNodeDescription[] { return root.components .filter(isBacklog) .flatMap(backlog => backlog.items.filter(isEpic)) .map(epic => this.descriptions.createDescription(epic, `${epic.$container.id}.${epic.id}`, document)); } private getUSEpics(root: Model, document: LangiumDocument<AstNode>): AstNodeDescription[] { return root.components .filter(isBacklog) .flatMap(backlog => backlog.items.filter(isEpic)) .flatMap(epic => epic.userstories.map (us => this.descriptions.createDescription(us, `${epic.$container.id}.${epic.id}.${us.id}`, document))); } private getTaskUSEpics(root: Model, document: LangiumDocument<AstNode>): AstNodeDescription[] { return root.components .filter(isBacklog) .flatMap(backlog => backlog.items.filter(isEpic)) .flatMap(epic => epic.userstories.flatMap (us => us.tasks.map(task => this.descriptions.createDescription(task, `${epic.$container.id}.${epic.id}.${us.id}.${task.id}`, document)))); } private getUserStories(root: Model, document: LangiumDocument<AstNode>): AstNodeDescription[] { return root.components .filter(isBacklog) .flatMap(backlog => backlog.items.filter(isAtomicUserStory)) .map(atomicUserStory => this.descriptions.createDescription(atomicUserStory, `${atomicUserStory.$container.id}.${atomicUserStory.id}`, document)); } private getTaskBacklog(root: Model, document: LangiumDocument<AstNode>): AstNodeDescription[] { return root.components .filter(isBacklog) .flatMap(backlog => backlog.items.filter(isTaskBacklog)) .map(taskBacklog => this.descriptions.createDescription(taskBacklog, `${taskBacklog.$container.id}.${taskBacklog.id}`, document)); } private getProcesses(root: Model, document: LangiumDocument<AstNode>): AstNodeDescription[] { return root.components .filter(isProcess) .map(process => this.descriptions.createDescription(process, `${process.id}`, document)); } private getActivities(root: Model, document: LangiumDocument<AstNode>): AstNodeDescription[] { return root.components .filter(isProcess) .flatMap(process => process.activities) .map(activity => this.descriptions.createDescription(activity, `${activity.$container.id}.${activity.id}`, document)); } private getTasks(root: Model, document: LangiumDocument<AstNode>): AstNodeDescription[] { return root.components .filter(isProcess) .flatMap(process => process.activities) .flatMap(activity => activity.tasks) .map(task => this.descriptions.createDescription(task, `${task.$container.id}.${task.id}`, document)); } private getPeople(root: Model, document: LangiumDocument<AstNode>): AstNodeDescription[] { return root.components .filter(isTeam) .flatMap(team => team.teammember) .map(teammember => this.descriptions.createDescription(teammember, `${teammember.$container.id}.${teammember.id}`, document)); } }