Skip to content

Commit f7a779a

Browse files
akoclaude
andcommitted
feat: add missing document types to project tree and syntax highlighting
Add JSON structures, import/export mappings, consumed REST services, and project settings to the VS Code project tree view. Add missing MDL keywords (STRUCTURE, MAPPING, JSON, WORKFLOW, etc.) to TextMate grammar for syntax highlighting. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 1bba596 commit f7a779a

3 files changed

Lines changed: 105 additions & 1 deletion

File tree

cmd/mxcli/project_tree.go

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,65 @@ func buildProjectTree(projectPath string) ([]*TreeNode, error) {
331331
md.documents = append(md.documents, treeElement{Name: bes.Name, ContainerID: bes.ContainerID, Type: "businesseventservice", Children: children})
332332
}
333333

334+
// Collect JSON structures
335+
jss, _ := reader.ListJsonStructures()
336+
for _, js := range jss {
337+
modID := h.FindModuleID(js.ContainerID)
338+
md, ok := modData[modID]
339+
if !ok {
340+
continue
341+
}
342+
md.documents = append(md.documents, treeElement{Name: js.Name, ContainerID: js.ContainerID, Type: "jsonstructure"})
343+
}
344+
345+
// Collect import mappings
346+
ims, _ := reader.ListImportMappings()
347+
for _, im := range ims {
348+
modID := h.FindModuleID(im.ContainerID)
349+
md, ok := modData[modID]
350+
if !ok {
351+
continue
352+
}
353+
md.documents = append(md.documents, treeElement{Name: im.Name, ContainerID: im.ContainerID, Type: "importmapping"})
354+
}
355+
356+
// Collect export mappings
357+
ems, _ := reader.ListExportMappings()
358+
for _, em := range ems {
359+
modID := h.FindModuleID(em.ContainerID)
360+
md, ok := modData[modID]
361+
if !ok {
362+
continue
363+
}
364+
md.documents = append(md.documents, treeElement{Name: em.Name, ContainerID: em.ContainerID, Type: "exportmapping"})
365+
}
366+
367+
// Collect consumed REST services (with operations as children)
368+
restClients, _ := reader.ListConsumedRestServices()
369+
for _, rc := range restClients {
370+
modID := h.FindModuleID(rc.ContainerID)
371+
md, ok := modData[modID]
372+
if !ok {
373+
continue
374+
}
375+
var children []*TreeNode
376+
for _, op := range rc.Operations {
377+
method := op.HttpMethod
378+
if method == "" {
379+
method = "GET"
380+
}
381+
label := method
382+
if op.Path != "" {
383+
label += " " + op.Path
384+
}
385+
children = append(children, &TreeNode{
386+
Label: label,
387+
Type: "restoperation",
388+
})
389+
}
390+
md.documents = append(md.documents, treeElement{Name: rc.Name, ContainerID: rc.ContainerID, Type: "restclient", Children: children})
391+
}
392+
334393
// Collect database connections (with queries as children)
335394
dbcs, _ := reader.ListDatabaseConnections()
336395
for _, dbc := range dbcs {
@@ -486,6 +545,37 @@ func buildProjectTree(projectPath string) ([]*TreeNode, error) {
486545
tree = append([]*TreeNode{psNode}, tree...)
487546
}
488547

548+
// Project Settings top-level node
549+
settings, settingsErr := reader.GetProjectSettings()
550+
if settingsErr == nil {
551+
settingsNode := &TreeNode{Label: "Settings", Type: "settings", QualifiedName: "Settings"}
552+
if settings.Model != nil {
553+
modelNode := &TreeNode{Label: "Model", Type: "settingscategory"}
554+
if settings.Model.AfterStartupMicroflow != "" {
555+
modelNode.Children = append(modelNode.Children, &TreeNode{
556+
Label: "After Startup: " + settings.Model.AfterStartupMicroflow,
557+
Type: "settingsitem",
558+
})
559+
}
560+
if settings.Model.BeforeShutdownMicroflow != "" {
561+
modelNode.Children = append(modelNode.Children, &TreeNode{
562+
Label: "Before Shutdown: " + settings.Model.BeforeShutdownMicroflow,
563+
Type: "settingsitem",
564+
})
565+
}
566+
if len(modelNode.Children) > 0 {
567+
settingsNode.Children = append(settingsNode.Children, modelNode)
568+
}
569+
}
570+
if settings.Language != nil && settings.Language.DefaultLanguageCode != "" {
571+
settingsNode.Children = append(settingsNode.Children, &TreeNode{
572+
Label: "Default Language: " + settings.Language.DefaultLanguageCode,
573+
Type: "settingsitem",
574+
})
575+
}
576+
tree = append([]*TreeNode{settingsNode}, tree...)
577+
}
578+
489579
// Navigation top-level node
490580
nav, navErr := reader.GetNavigation()
491581
if navErr == nil && len(nav.Profiles) > 0 {

vscode-mdl/src/projectTreeProvider.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,20 @@ export class MendixProjectTreeProvider implements vscode.TreeDataProvider<Mendix
261261
return new vscode.ThemeIcon('file-media');
262262
case 'businesseventservice':
263263
return new vscode.ThemeIcon('broadcast');
264+
case 'jsonstructure':
265+
return new vscode.ThemeIcon('json');
266+
case 'importmapping':
267+
return new vscode.ThemeIcon('arrow-down');
268+
case 'exportmapping':
269+
return new vscode.ThemeIcon('arrow-up');
270+
case 'restclient':
271+
return new vscode.ThemeIcon('cloud-download');
272+
case 'settings':
273+
return new vscode.ThemeIcon('gear');
274+
case 'settingscategory':
275+
return new vscode.ThemeIcon('folder-library');
276+
case 'settingsitem':
277+
return new vscode.ThemeIcon('symbol-property');
264278
case 'databaseconnection':
265279
return new vscode.ThemeIcon('plug');
266280
case 'publishedrestservice':

vscode-mdl/syntaxes/mdl.tmLanguage.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@
117117
"patterns": [
118118
{
119119
"name": "keyword.other.mdl",
120-
"match": "(?i)\\b(MICROFLOW|NANOFLOW|ENTITY|ASSOCIATION|ENUMERATION|PAGE|SNIPPET|LAYOUT|NOTEBOOK|CONSTANT|MODULE|ATTRIBUTE|INDEX|GENERALIZATION|EXTENDS|PERSISTENT|NON-PERSISTENT|REFERENCE|REFERENCE_?SET|WIDGET|DATASOURCE|SELECTION|DATABASE|FOLDER)\\b"
120+
"match": "(?i)\\b(MICROFLOW|NANOFLOW|ENTITY|ASSOCIATION|ENUMERATION|PAGE|SNIPPET|LAYOUT|NOTEBOOK|CONSTANT|MODULE|ATTRIBUTE|INDEX|GENERALIZATION|EXTENDS|PERSISTENT|NON-PERSISTENT|REFERENCE|REFERENCE_?SET|WIDGET|DATASOURCE|SELECTION|DATABASE|FOLDER|WORKFLOW|STRUCTURE|MAPPING|JSON|CONFIGURATION|CONTRACT|NAVIGATION|SETTINGS)\\b"
121121
}
122122
]
123123
},

0 commit comments

Comments
 (0)