Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>drive-langiumNew to Visual Studio Code? Get it now.
drive-langium

drive-langium

AM1190326

|
1 install
| (0) | Free
A Langium project made for a thesis project with the ojective of streamlining the development of a front-end application in Angular.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info
"displayName": "Drive3 Page Generator",
"description": "A Langium based extension to generate Drive3 pages from a .drv3 file.",

Drive Angular DSL

A domain-specific language (DSL) to automate the generation of Angular components and tables using custom patterns. Designed to streamline front-end development for teams working with repetitive data tables.

Features

  • Supports .drv3 files
  • Generates .ts, .html, .scss files
  • Customizable table configurations
  • Optional submenu generation
  • Easy to extend for new patterns

How to Use

  1. Create a .drv3 file with your component structure
  2. Save the file — the Angular files will be generated automatically
  3. Check the generatedDriveAngularFiles folder (or your custom destination)

Grammar Fefinition

The input file must match the expected grammar syntax show below. Each file must start with the declaration of a DrivePage concept and each subsequent concept must follow the structure show in the grammar. QualifiedName is a default type which is simply a unique string.

entry DrivePage:
    'Page' name=QualifiedName '{' 
        'SubMenu:' submenu=SubMenu
        mainContent=MainContent
    '}'
;

SubMenu:
    TabSubMenu | ViewsSubMenu
;

TabSubMenu:
    'TabSubMenu' name=QualifiedName '{'
        'Tabs:' tabs+=Tab+
        submenuService=SubMenuService
    '}'
;

ViewsSubMenu:
    'ViewsSubMenu' name=QualifiedName '{'
        'Views:' views+=View*
        submenuService=SubMenuService
    '}'
;

SubMenuService:
    'SubMenuService' name=QualifiedName '{'
    '}'
;

Tab:
    'Tab' name=QualifiedName '{'
        ('Route:' route=STR)?
    '}'
;

View:
    'View' name=QualifiedName '{'
        'Filters:' fitlters+=Filter*
    '}'
;

MainContent:
    'MainContent' '{'
        'Tables:' table+=Table*
    '}'
;

Table:
    'Table' name=QualifiedName '{'
        tableservice=TableService
        tablecomponent=TableComponent
    '}'
;

TableComponent:
    'TableComponent' name=QualifiedName '{'
        'Identifier:' identifier=STR
        'Service:' tableservice=[TableService]
        'Columns' '{' (columns+=Column)* '}'
        'Filters' '{' (filters+=Filter)* '}'
        'Variables' '{' (variables+=Variable)* '}'
        'Conditions' '{' (conditions+=Condition)* '}'
    '}'
;

TableService:
    'TableService' name=QualifiedName '{' 
        'Fields' '{' fields+=Field* '}'
    '}'
;

Field:
    'Field' name=QualifiedName '{'
        'Type:' type=DataType
    '}'
;

Column:
    ActionColumn | FieldBasedColumn | ComplexColum | CheckboxColumn;

FieldBasedColumn:
    'FieldBasedColumn' name=QualifiedName '{'
        'Type:' type=ColumnType
        'Field:' field=[Field]
        'Identifier:' Identifier=STR
        'WidthPercentage:' WidthPercentage=INT
    '}'
;

ComplexColum:
    'ComplexColumn' name=QualifiedName '{'
        'Type:' type=ColumnType
        'Fields:' fields+=[Field]+
        'FilterableField:' filterableField=[Field]
        'Identifier:' Identifier=STR
        'WidthPercentage:' WidthPercentage=INT
    '}'
;

ActionColumn:
    'ActionColumn' name=QualifiedName '{'
        'Type:' type=ColumnType
        'Identifier:' Identifier=STR
        'Action:' action=Action
        'Icon:' icon=STR
        'WidthPercentage:' WidthPercentage=INT
    '}'
;

CheckboxColumn:
    'CheckboxColumn' name=QualifiedName '{'
        'Type:' type=ColumnType
        'Identifier:' Identifier=STR
        'WidthPercentage:' WidthPercentage=INT
    '}'
;

Action:
    ListAction | UserDefinedAction;

ListAction:
    'ListAction' name=QualifiedName '{'
        'Type:' actionType=ActionType
    '}'
;

UserDefinedAction:
    'UserDefinedAction' name=QualifiedName '{'
    '}'
;

Variable:
    'Variable' name=QualifiedName '{'
        'datatype:' dataType=DataType
    '}'
;

Condition:
    'Condition' name=QualifiedName '{'
        'column:' column=[Column]
        'variable:' variable=[Variable]
    '}'
;

Filter:
    'Filter' '{'
        'Identifier:' Identifier=STR
        'filterConfiguration' ':' filterconfigurationreference=FilterConfigurationReference
    '}'
;

FilterConfigurationReference:
    'FilterConfigurationReference' '{'
        'Mode:'  mode=FilterMode
        'Type:' type=FilterType
    '}'
;

BOOL = 'TRUE' | 'FALSE';

ColumnType = 'TEXT' | 'DATE' | 'ACTION' | 'RANGEDATE' | 'DROPDOWN' | 'DROPDOWNMULTI' | 'REORDERHANDLE' | 'CHECKBOX';

FilterMode = 'STARTS' | 'ENDS' | 'CONTAINS' | 'EQUALS' | 'BETWEENDATE' | 'STARTSAT' | 'ENDSAT';

FilterType = 'STRING' | 'DATE' | 'COMPLEXARRAY' | 'ARRAY' | 'COMPLEXDATE' | 'NUMBER' | 'DATEANDDAY';

DataType = 'NUMBER' | 'STRING' | 'BOOLEAN' | 'DATE' | 'NUMBER_ARRAY' | 'STRING_ARRAY' | 'USER_DEFINED';

ActionType = 'DELETE' | 'DETAIL' | 'ATTACHMENTS';

Example

Page Contracts {
    SubMenu:
        TabSubMenu contractsSubMenu {
            Tabs: 
                Tab Summary {  
                }
                Tab Edit {
                }
        SubMenuService contracts {
        }
    }
    MainContent {
        Tables: 
            Table Contracts {
                TableService contracts {
                    Fields {
                        Field contractid {
                            Type: STRING
                        }
                        Field description {
                            Type: STRING
                        }
                        Field startDate {
                            Type: DATE
                        }
                        Field endDate {
                            Type: DATE
                        }
                        Field entity {
                            Type: USER_DEFINED
                        }
                        Field status {
                            Type: USER_DEFINED
                        }
                        Field contractInterlocutors {
                            Type: USER_DEFINED
                        }
                    }
                }
                TableComponent contractsTable {
                        Identifier: "WorkPlans-Contracts"
                        Service: contracts
                        Columns {  
                            FieldBasedColumn contractid {
                                Type: TEXT
                                Field: contractid
                                Identifier: "ContractID"
                                WidthPercentage: 100
                            }
                            FieldBasedColumn description { 
                                Type: TEXT
                                Field: description
                                Identifier: "Description"
                                WidthPercentage: 100
                            }
                            FieldBasedColumn startDate { 
                                Type: DATE
                                Field: startDate
                                Identifier: "StartDate"
                                WidthPercentage: 100
                            }
                            FieldBasedColumn endDate { 
                                Type: DATE
                                Field: endDate
                                Identifier: "EndDate"
                                WidthPercentage: 100
                            }
                            FieldBasedColumn entity { 
                                Type: TEXT
                                Field: entity
                                Identifier: "Entity"
                                WidthPercentage: 100
                            }
                            FieldBasedColumn status { 
                                Type: DROPDOWN
                                Field: status
                                Identifier: "Status"
                                WidthPercentage: 100
                            }
                            ActionColumn action {
                                Type: ACTION
                                Identifier: "Actions"
                                Action: ListAction details {
                                    Type: DETAIL
                                }
                                Icon: "three-dots.jpg"
                                WidthPercentage: 100
                            }
                        }
                        Filters { 
                            Filter {
                                Identifier: "contractid"
                                filterConfiguration: FilterConfigurationReference {
                                    Mode: CONTAINS
                                    Type: STRING
                                }
                            }
                        }
                        Variables {
                            Variable isEditMode {
                                datatype: BOOLEAN
                            }
                        }
                        Conditions {
                            Condition editModeColumns {
                                column: action
                                variable: isEditMode
                            }
                        }
                } 
            }
    }
}
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2025 Microsoft