From bda2c0a069c3e6b277538aed07c1c154ba43d062 Mon Sep 17 00:00:00 2001 From: kuro Date: Thu, 15 Oct 2026 20:02:59 +0000 Subject: [PATCH 1/2] =?UTF-8?q?README.md=20geupdated,=20hat=20nun=20auch?= =?UTF-8?q?=20englische=20=C3=BCbersetzung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 157 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 96 insertions(+), 61 deletions(-) diff --git a/README.md b/README.md index d6ccfea..a98c41a 100644 --- a/README.md +++ b/README.md @@ -1,84 +1,119 @@ -# BMC TPL Code All-Around +# BMC Discovery TPL - VS Code Extension -**Linter, Auto-Formatter, IntelliSense und Hover-Dokumentationen für die BMC TPL (Template Language).** +🌍 [*🇺🇸 English *](#english) *| [ 🇩🇪 Deutsch](#deutsch)* 🌍 -Diese Visual Studio Code Erweiterung verwandelt deinen Editor in eine vollwertige Entwicklungsumgebung für BMC Discovery TPL-Skripte. Sie nimmt dir Tipparbeit ab, formatiert Code nach strengen Best Practices, verhindert Syntax-Fehler noch vor dem Deployment und versteht projektübergreifende Abhängigkeiten. +## 🇺🇸 English + +**Transform your BMC Discovery TPL development from reactive scripting into proactive software engineering.** + +Writing Topology Pattern Language (TPL) for BMC Discovery used to mean writing code blindly, uploading it, and hoping the appliance wouldn't throw a cryptic error upon activation. This extension changes everything. It acts as a full-fledged Language Server tailored specifically for TPL, catching syntax errors and logic flaws *before* your code ever touches the server. + +### ✨ Key Features + +#### 🧠 Context-Aware IntelliSense + +The extension understands the logical structure of your TPL patterns. + +* **Zone Strictness:** You will only get code suggestions that are valid in your current block. No `if` statements in `metadata`, no `metadata` fields in the `body`. + +* **Smart Completion:** Completing a local method (e.g., `my_tools.doWork`) automatically inserts parentheses and a semicolon, placing your cursor perfectly for parameters (`$0`). + +* **Namespace Support:** Local `definitions` blocks are parsed as clean namespaces. + +#### 🌍 Workspace Indexing (Cross-File Support) + +Break the boundaries of single-file editing. The extension asynchronously indexes your entire workspace. + +* **Cross-File Imports:** Resolves `from Module import Definition` on the fly. External methods are immediately available in your autocomplete list. + +* **Intelligent Hover:** Hovering over imported methods fetches and displays the DocString (`"""..."""`) from the external file. + +#### 🛡️ Unforgiving Custom Linter + +A highly robust linter built to understand TPL's unique quirks and edge cases. + +* **Execution Zone Enforcement:** Instantly warns if executable code or assignments are placed outside valid zones (`body`, `triggers`, `constants`, `definitions`). + +* **Multi-Line Conditions:** Fully supports complex `if ... or ... then` constructs without throwing false semicolon errors. + +* **Stack-Tracking:** Monitors your control structures. Missing or mismatched `end if;`, `end for;`, or `end while;` tags are flagged immediately. + +* **URL/String Immunity:** Slashes (`//`) or semicolons inside strings and URLs will not break the comment or syntax parser. + +#### ✅ Developer Ergonomics & Workflow + +* **Workspace Scanning:** Run the `TPL: Scan Workspace` command to lint your entire project at once. All issues appear in VS Code's native "Problems" tab. + +* **Native TODO Tracking:** Comments containing `TODO:` are automatically indexed as blue "Information" hints in the Problems tab for easy navigation. + +* **Quick Fixes:** Missing mandatory metadata (like `author`, `tree_path`)? Click the lightbulb icon to generate the missing fields perfectly inside the block. + +### 🚀 Roadmap + +* **1-Click Test Deployment:** Integration of the BMC Helix REST API to push and activate patterns directly to a test appliance via VS Code. + +* **CI/CD Pipeline Integration:** A headless CLI version of the linter to block bad code in Git Merge Requests, enabling fully automated production deployments. + +### 📄 License + +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. --- -## ✨ Features +## 🇩🇪 Deutsch -### 🤖 Intelligenter Linter (Syntax-Scanner) -Der Linter analysiert den Code in Echtzeit, merkt sich Zustände über Zeilenumbrüche hinweg und warnt vor typischen TPL-Fehlern: -* **Strikte Hierarchie-Prüfung:** Überwacht die korrekte Reihenfolge der Blöcke innerhalb von Patterns und Syncmappings (`metadata` -> `overview` -> `constants` -> `triggers` -> `mapping`/`removal` -> `body`). -* **Smarter Zuweisungs-Check:** Findet fehlende Semikolons (toleriert sie aber in `enumeration`-Blöcken oder bei umgebrochenen Code-Zeilen). Warnt streng mit einem Fehler, wenn `=` anstelle von `:=` für Variablenzuweisungen genutzt wird (außerhalb von legitimen `if`/`where` Vergleichen). -* **Block- & Klammer-Tracking:** Erkennt nicht geschlossene Blöcke (wie fehlende `end body;` oder `end pattern;`) und findet ungeschlossene runde `(` oder eckige `[` Klammern. -* **Pflichtfeld-Validierung:** Prüft, ob auf Modul-Ebene zwingend benötigte Metadaten (`origin`, `author`, `products`, `publishers`, `tree_path`) vorhanden sind und ob im `body` ein initiales `log.debug` Statement steht. -* **Versions-Prüfung:** Gleicht die im Modul deklarierte TPL-Version mit der in deinen Settings definierten Version ab und warnt vor veralteten Skripten. +**Verwandle deine BMC Discovery TPL-Entwicklung von reaktivem Scripting in proaktives Software Engineering.** -### ⚙️ Konfigurierbare Plugin-Einstellungen (Settings) -Personalisiere das Plugin direkt über die VS Code Benutzeroberfläche (File > Preferences > Settings > Extensions > BMC TPL Einstellungen): -* **Standard Metadaten:** Hinterlege deine eigenen Werte für `Author`, `Publisher`, `Origin` und den `Tree Path`. Diese werden beim Generieren neuer Module automatisch eingesetzt. -* **TPL Zielversion:** Definiere die TPL-Version (z.B. `23` für 1.23), für die du standardmäßig entwickelst. -* **Live-Reload:** Änderungen an den Einstellungen greifen sofort, ganz ohne Neustart des Editors. +Bisher glich das Schreiben von Topology Pattern Language (TPL) oft einem Blindflug: Code tippen, manuell hochladen und hoffen, dass die Appliance bei der Aktivierung keinen kryptischen Fehler wirft. Diese Extension ändert alles. Sie verhält sich wie ein maßgeschneiderter Language Server für TPL, der Syntax- und Logikfehler abfängt, *bevor* der Code den Server überhaupt berührt. -### 🎨 Auto-Formatter & Visual Alignment (`Shift + Alt + F`) -Schluss mit kaputten Einrückungen! Der Formatter bringt deinen Code in Bestform: -* **VS Code Standard:** Erzwingt strikt 4 Leerzeichen pro Einrückungs-Ebene. -* **Dynamische Block-Einrückung:** Erkennt automatisch startende und endende Blöcke (`if`, `for`, `pattern`, `table` etc.) und passt die Einrückungsebene an. -* **Klammer-Gedächtnis (Visual Alignment):** Die Königsdisziplin! Der Formatter merkt sich die spaltengenaue Position von geöffneten Arrays `[` oder Funktionsaufrufen `(` und richtet alle Folgezeilen makellos an dieser Klammer aus. +### ✨ Hauptfunktionen -### 💡 IntelliSense & Autovervollständigung (Cross-File) -Spart extrem viel Zeit beim Coden durch massives Kontext-Wissen: -* **Volle BMC Standard-Bibliothek:** Nahtlose Integration aller Built-In Funktionen (z.B. `discovery`, `number`, `text`, `model`). Unterstützt Parameter-Überladungen (z.B. `number.toText` wahlweise mit oder ohne Basis) per Tab-Navigation. -* **Workspace-Scanning:** Importierst du ein Modul (z.B. `from company.helpers import my_helper`), durchsucht das Plugin im Hintergrund dein gesamtes Projekt. Tippst du `my_helper.`, werden dir automatisch alle verfügbaren `define`-Methoden vorgeschlagen. -* **Lokale Namespaces:** Erkennt `definitions`-Blöcke in der gleichen Datei und schlägt deren Methoden vor. -* **Variablen-Tracking:** Lernt alle Variablen, die du mit `:=` definiert hast, und schlägt sie dir später vor. +#### 🧠 Kontextsensitive IntelliSense -### 🔍 Hover-Dokumentation (Tooltips) -Wenn du mit der Maus über einem Methodennamen, einem Pattern oder einer Tabelle stehen bleibst: -* **Offizielle BMC Doku:** Volle Integration der originalen, mehrzeiligen BMC Dokumentationen für alle eingebauten Funktionen (kein Browser mehr nötig!). -* **DocString Extraction:** Liest eigene Multi-Line-Kommentare (`"""` oder `'''`) aus, die unter `define` oder `pattern` Deklarationen stehen, und rendert sie als saubere Markdown-Tooltips (auch projektübergreifend!). +Die Extension liest nicht nur Text, sie versteht die logische Struktur deiner TPL-Patterns. -### ⚡ Quick Fixes (Code Actions / Glühbirne) -Bietet sofortige Reparaturoptionen mit einem Klick: -* **"Fehlende Modul-Metadaten einfügen":** Generiert sofort alle 5 Pflichtfelder im Modul-Metadata-Block. -* **"Log-Statement einfügen":** Baut das fehlende `log.debug("Start pattern...");` direkt am Anfang des `body`-Blocks ein. -* **"Tabs zu Spaces":** Ersetzt sofort alle illegalen Tabs (`\t`) in einer Zeile durch jeweils 4 korrekte Leerzeichen. +* **Strikte Zonen:** Vorschläge gibt es nur dort, wo sie erlaubt sind. Keine `if`-Schleifen im `metadata`-Block, keine Metadaten-Felder im `body`. ---- +* **Smart Completion:** Bei der Autovervollständigung von Methoden (z.B. `my_tools.doWork`) werden Klammern und Semikolon automatisch generiert und der Cursor optimal platziert (`$0`). -## 🚀 Snippets (Code-Vorlagen) +* **Namespace Support:** Lokale `definitions`-Blöcke werden als saubere Namespaces verstanden und projektweit vorgeschlagen. -Einfach das Keyword tippen und `Enter` drücken, um komplette, perfekt eingerückte Blöcke zu generieren: +#### 🌍 Workspace Indexing (Cross-File Support) -| Keyword | Beschreibung | -| :--- | :--- | -| `tpl_skeleton` | **God-Snippet**: Generiert ein komplett frisches TPL Modul. Nutzt automatisch deine hinterlegten Settings für Metadaten und Version. | -| `pattern` / `syncmapping` | Baut einen leeren Pattern/Syncmapping-Block inklusive DocString und End-Tag. | -| `define` | Generiert eine Methodendefinition (`define name(params) ... end define;`). | -| `metadata`, `overview`, `body`... | Baut den jeweiligen Block auf und platziert den Cursor in der Mitte. | -| `table` | Erstellt eine Tabelle inklusive des `default -> "unknown";` Fallbacks. | -| `if`, `elif`, `else` | Baut bedingte Abfragen inkl. `then` und `end if;` und platziert den Cursor sauber bei der Bedingung. | -| `for`, `while` | Baut Standard-Schleifen inkl. `do` und End-Tag und lässt dich direkt iterieren. | +Die Extension durchbricht die Grenzen einzelner Dateien und scannt asynchron das gesamte Projekt. ---- +* **Cross-File Imports:** Versteht `from Modul import Definition`. Methoden aus anderen Dateien stehen sofort in der Autovervollständigung bereit. -## 🛠️ Installation & Nutzung +* **Intelligentes Hovering:** Fährt man mit der Maus über importierte Methoden, wird der zugehörige DocString (`"""..."""`) direkt aus der externen Datei als Tooltip geladen. -1. Das Plugin aktivieren. (Von den Releases das neueste herunterladen und einfach die `.vsix` Datei in die Add-ons von Visual Studio Code ziehen). -2. In einem Projekt mit TPL Dateien eine davon öffnen und die Analyse durchlaufen lassen. -3. Der Linter startet automatisch bei jedem Tastendruck. -4. **Formatieren:** Rechtsklick -> *Dokument formatieren* (oder `Shift + Alt + F`). -5. **Autovervollständigung:** Triggert automatisch beim Tippen, speziell nach einem Punkt (`.`) bei Modul-Aufrufen. -6. **Quick Fixes:** Auf die gelbe/rote Glühbirne am Zeilenanfang klicken oder `Ctrl + .` (Windows/Linux) / `Cmd + .` (Mac) drücken. +#### 🛡️ Unbestechlicher Custom Linter ---- +Ein hochgradig robuster Linter, der die Besonderheiten und Edge-Cases von TPL perfekt beherrscht. -## 📜 Lizenz +* **Strikte Ausführungszonen:** Warnt sofort, wenn ausführbarer Code außerhalb gültiger Zonen (`body`, `triggers`, `constants`, `definitions`) platziert wird. -Dieses Projekt ist unter der **MIT License** lizenziert. +* **Multi-Line Conditions:** Vollständige Unterstützung für mehrzeilige `if ... or ... then` Konstrukte, ohne fehlerhafte Semikolon-Warnungen auszulösen. -Copyright (c) 2026 Thomas Wehnert +* **Stack-Tracking:** Überwacht hierarchisch alle Kontrollstrukturen. Fehlende oder falsche `end if;`, `end for;` oder `end while;` Anweisungen leuchten sofort rot auf. -Jedem, der eine Kopie dieser Software erhält, wird hiermit kostenlos die Erlaubnis erteilt, ohne Einschränkung mit der Software zu handeln, einschließlich und ohne Einschränkung der Rechte zur Nutzung, zum Kopieren, Ändern, Zusammenführen, Veröffentlichen, Verteilen, Unterlizenzieren und/oder Verkaufen von Kopien der Software, sofern der obige Urheberrechtshinweis und dieser Genehmigungshinweis in allen Kopien oder wesentlichen Teilen der Software enthalten sind. Die Software wird "ohne Mängelgewähr" (as is) zur Verfügung gestellt. \ No newline at end of file +* **URL/String Immunität:** Komplexere Strings (inklusive URLs mit `//` oder Semikolons) bringen den Parser nicht mehr aus dem Tritt. + +#### ✅ Entwickler-Ergonomie & Workflow + +* **Workspace Scanning:** Mit dem Befehl `TPL: Gesamten Workspace prüfen` lässt sich das komplette Projekt auf einen Schlag durchleuchten. Alle Fehler landen übersichtlich im VS Code "Probleme"-Tab. + +* **Natives TODO-Tracking:** Kommentare mit `TODO:` werden automatisch erfasst und als blaue Info-Links im Probleme-Tab indiziert. + +* **Quick Fixes:** Fehlen Pflicht-Metadaten (wie `author`, `tree_path`), lassen sich diese per Klick auf das Glühbirnen-Symbol (Code Action) automatisch an der richtigen Stelle generieren. + +### 🚀 Roadmap + +* **1-Klick Test Deployment:** Integration der BMC Helix REST API, um Patterns direkt aus VS Code auf eine Test-Appliance zu pushen. + +* **CI/CD Pipeline Integration:** Eine "Headless"-Version des Linters für GitLab/GitHub, um fehlerhaften Code in Merge Requests zu blockieren und vollautomatisierte Deployments für die Produktion zu ermöglichen. + +### 📄 Lizenz + +Dieses Projekt ist unter der MIT-Lizenz lizenziert – weitere Details finden sich in der [LICENSE](LICENSE)-Datei. + +**© Thomas Wehnert (Kuro)** \ No newline at end of file From 9299eb63872f21a5ff21be40d2aa9dcfd0c76d34 Mon Sep 17 00:00:00 2001 From: kuro Date: Thu, 15 Oct 2026 20:08:38 +0000 Subject: [PATCH 2/2] Readme nochmal geupdated, wie sie sein sollte --- README.md | 239 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 151 insertions(+), 88 deletions(-) diff --git a/README.md b/README.md index a98c41a..a076bbe 100644 --- a/README.md +++ b/README.md @@ -1,119 +1,182 @@ -# BMC Discovery TPL - VS Code Extension - -🌍 [*🇺🇸 English *](#english) *| [ 🇩🇪 Deutsch](#deutsch)* 🌍 - -## 🇺🇸 English - -**Transform your BMC Discovery TPL development from reactive scripting into proactive software engineering.** - -Writing Topology Pattern Language (TPL) for BMC Discovery used to mean writing code blindly, uploading it, and hoping the appliance wouldn't throw a cryptic error upon activation. This extension changes everything. It acts as a full-fledged Language Server tailored specifically for TPL, catching syntax errors and logic flaws *before* your code ever touches the server. - -### ✨ Key Features - -#### 🧠 Context-Aware IntelliSense - -The extension understands the logical structure of your TPL patterns. - -* **Zone Strictness:** You will only get code suggestions that are valid in your current block. No `if` statements in `metadata`, no `metadata` fields in the `body`. - -* **Smart Completion:** Completing a local method (e.g., `my_tools.doWork`) automatically inserts parentheses and a semicolon, placing your cursor perfectly for parameters (`$0`). - -* **Namespace Support:** Local `definitions` blocks are parsed as clean namespaces. - -#### 🌍 Workspace Indexing (Cross-File Support) - -Break the boundaries of single-file editing. The extension asynchronously indexes your entire workspace. - -* **Cross-File Imports:** Resolves `from Module import Definition` on the fly. External methods are immediately available in your autocomplete list. - -* **Intelligent Hover:** Hovering over imported methods fetches and displays the DocString (`"""..."""`) from the external file. - -#### 🛡️ Unforgiving Custom Linter - -A highly robust linter built to understand TPL's unique quirks and edge cases. - -* **Execution Zone Enforcement:** Instantly warns if executable code or assignments are placed outside valid zones (`body`, `triggers`, `constants`, `definitions`). - -* **Multi-Line Conditions:** Fully supports complex `if ... or ... then` constructs without throwing false semicolon errors. - -* **Stack-Tracking:** Monitors your control structures. Missing or mismatched `end if;`, `end for;`, or `end while;` tags are flagged immediately. - -* **URL/String Immunity:** Slashes (`//`) or semicolons inside strings and URLs will not break the comment or syntax parser. - -#### ✅ Developer Ergonomics & Workflow - -* **Workspace Scanning:** Run the `TPL: Scan Workspace` command to lint your entire project at once. All issues appear in VS Code's native "Problems" tab. - -* **Native TODO Tracking:** Comments containing `TODO:` are automatically indexed as blue "Information" hints in the Problems tab for easy navigation. - -* **Quick Fixes:** Missing mandatory metadata (like `author`, `tree_path`)? Click the lightbulb icon to generate the missing fields perfectly inside the block. - -### 🚀 Roadmap - -* **1-Click Test Deployment:** Integration of the BMC Helix REST API to push and activate patterns directly to a test appliance via VS Code. - -* **CI/CD Pipeline Integration:** A headless CLI version of the linter to block bad code in Git Merge Requests, enabling fully automated production deployments. - -### 📄 License - -This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. +English Description first - after that comes the German Version. +Translation: +Englische beschreibung zuerst, danach kommt die Deutsche --- -## 🇩🇪 Deutsch +# BMC TPL Code All-Around -**Verwandle deine BMC Discovery TPL-Entwicklung von reaktivem Scripting in proaktives Software Engineering.** +**Linter, Auto-Formatter, IntelliSense, and Hover Documentation for the BMC TPL (Topology Pattern Language).** -Bisher glich das Schreiben von Topology Pattern Language (TPL) oft einem Blindflug: Code tippen, manuell hochladen und hoffen, dass die Appliance bei der Aktivierung keinen kryptischen Fehler wirft. Diese Extension ändert alles. Sie verhält sich wie ein maßgeschneiderter Language Server für TPL, der Syntax- und Logikfehler abfängt, *bevor* der Code den Server überhaupt berührt. +This Visual Studio Code extension transforms your editor into a fully-fledged development environment for BMC Discovery TPL scripts. It saves you typing, formats code according to strict best practices, prevents syntax errors before deployment, and understands cross-project dependencies. -### ✨ Hauptfunktionen +--- -#### 🧠 Kontextsensitive IntelliSense +## ✨ Features -Die Extension liest nicht nur Text, sie versteht die logische Struktur deiner TPL-Patterns. +### 🤖 Intelligent Linter (Syntax Scanner) +The linter analyzes the code in real-time, remembers states across line breaks, and warns you about typical TPL errors: +* **Strict Hierarchy Checking:** Monitors the correct order of blocks within patterns and syncmappings (`metadata` -> `overview` -> `constants` -> `triggers` -> `mapping`/`removal` -> `body`). +* **Smart Assignment Check:** Finds missing semicolons (but tolerates them in `enumeration` blocks or multi-line statements). Warns strictly with an error if `=` is used instead of `:=` for variable assignments (outside of legitimate `if`/`where` comparisons). +* **Block & Bracket Tracking:** Detects unclosed blocks (like missing `end body;` or `end pattern;`) and finds unclosed parentheses `(` or brackets `[`. +* **Mandatory Field Validation:** Checks if mandatory module-level metadata (`origin`, `author`, `products`, `publishers`, `tree_path`) are present and if an initial `log.debug` statement exists in the `body`. +* **Version Checking:** Compares the TPL version declared in the module with the target version defined in your settings and warns about outdated scripts. -* **Strikte Zonen:** Vorschläge gibt es nur dort, wo sie erlaubt sind. Keine `if`-Schleifen im `metadata`-Block, keine Metadaten-Felder im `body`. +### ⚙️ Configurable Plugin Settings +Personalize the plugin directly via the VS Code user interface (File > Preferences > Settings > Extensions > BMC TPL Settings): +* **Default Metadata:** Store your own values for `Author`, `Publisher`, `Origin`, and `Tree Path`. These are automatically inserted when generating new modules. +* **TPL Target Version:** Define the default TPL version (e.g., `23` for 1.23) you are developing for. +* **Live Reload:** Changes to settings take effect immediately, no editor restart required. -* **Smart Completion:** Bei der Autovervollständigung von Methoden (z.B. `my_tools.doWork`) werden Klammern und Semikolon automatisch generiert und der Cursor optimal platziert (`$0`). +### 🎨 Auto-Formatter & Visual Alignment (`Shift + Alt + F`) +No more broken indentations! The formatter gets your code in top shape: +* **VS Code Standard:** Strictly enforces 4 spaces per indentation level. +* **Dynamic Block Indentation:** Automatically detects starting and ending blocks (`if`, `for`, `pattern`, `table`, etc.) and adjusts the indentation level. +* **Bracket Memory (Visual Alignment):** The ultimate discipline! The formatter remembers the exact column position of opened arrays `[` or function calls `(` and flawlessly aligns all subsequent lines to this bracket. -* **Namespace Support:** Lokale `definitions`-Blöcke werden als saubere Namespaces verstanden und projektweit vorgeschlagen. +### 💡 IntelliSense & Autocomplete (Cross-File) +Saves an extreme amount of coding time through massive context awareness: +* **Full BMC Standard Library:** Seamless integration of all built-in functions (e.g., `discovery`, `number`, `text`, `model`). Supports parameter overloads (e.g., `number.toText` optionally with or without a base) via Tab navigation. +* **Workspace Scanning:** If you import a module (e.g., `from company.helpers import my_helper`), the plugin scans your entire project in the background. If you type `my_helper.`, it automatically suggests all available `define` methods. +* **Local Namespaces:** Detects `definitions` blocks in the same file and suggests their methods. +* **Variable Tracking:** Learns all variables you have defined with `:=` and suggests them to you later. -#### 🌍 Workspace Indexing (Cross-File Support) +### 🔍 Hover Documentation (Tooltips) +When you hover over a method name, a pattern, or a table: +* **Official BMC Docs:** Full integration of the original, multi-line BMC documentation for all built-in functions (no browser needed anymore!). +* **DocString Extraction:** Reads custom multi-line comments (`"""` or `'''`) placed under `define` or `pattern` declarations and renders them as clean Markdown tooltips (even cross-project!). -Die Extension durchbricht die Grenzen einzelner Dateien und scannt asynchron das gesamte Projekt. +### ⚡ Quick Fixes (Code Actions / Lightbulb) +Offers immediate repair options with a single click: +* **"Insert missing module metadata":** Instantly generates all 5 mandatory fields in the module metadata block. +* **"Insert log statement":** Adds the missing `log.debug("Start pattern...");` right at the beginning of the `body` block. +* **"Tabs to Spaces":** Instantly replaces all illegal tabs (`\t`) in a line with 4 correct spaces each. -* **Cross-File Imports:** Versteht `from Modul import Definition`. Methoden aus anderen Dateien stehen sofort in der Autovervollständigung bereit. +--- -* **Intelligentes Hovering:** Fährt man mit der Maus über importierte Methoden, wird der zugehörige DocString (`"""..."""`) direkt aus der externen Datei als Tooltip geladen. +## 🚀 Snippets (Code Templates) -#### 🛡️ Unbestechlicher Custom Linter +Just type the keyword and press `Enter` to generate complete, perfectly indented blocks: -Ein hochgradig robuster Linter, der die Besonderheiten und Edge-Cases von TPL perfekt beherrscht. +| Keyword | Description | +| :--- | :--- | +| `tpl_skeleton` | **God-Snippet**: Generates a completely fresh TPL module. Automatically uses your configured settings for metadata and version. | +| `pattern` / `syncmapping` | Builds an empty pattern/syncmapping block including DocString and end-tag. | +| `define` | Generates a method definition (`define name(params) ... end define;`). | +| `metadata`, `overview`, `body`... | Builds the respective block and places the cursor right in the middle. | +| `table` | Creates a table including the `default -> "unknown";` fallback. | +| `if`, `elif`, `else` | Builds conditional statements incl. `then` and `end if;`, placing the cursor neatly at the condition. | +| `for`, `while` | Builds standard loops incl. `do` and end-tag, letting you iterate directly. | -* **Strikte Ausführungszonen:** Warnt sofort, wenn ausführbarer Code außerhalb gültiger Zonen (`body`, `triggers`, `constants`, `definitions`) platziert wird. +--- -* **Multi-Line Conditions:** Vollständige Unterstützung für mehrzeilige `if ... or ... then` Konstrukte, ohne fehlerhafte Semikolon-Warnungen auszulösen. +## 🛠️ Installation & Usage -* **Stack-Tracking:** Überwacht hierarchisch alle Kontrollstrukturen. Fehlende oder falsche `end if;`, `end for;` oder `end while;` Anweisungen leuchten sofort rot auf. +1. Activate the plugin. (Download the latest from the releases and simply drag the `.vsix` file into the Visual Studio Code add-ons). +2. Open a TPL file in your project and let the analysis run. +3. The linter starts automatically with every keystroke. +4. **Formatting:** Right-click -> *Format Document* (or `Shift + Alt + F`). +5. **Autocomplete:** Triggers automatically while typing, especially after a dot (`.`) during module calls. +6. **Quick Fixes:** Click the yellow/red lightbulb at the beginning of the line or press `Ctrl + .` (Windows/Linux) / `Cmd + .` (Mac). -* **URL/String Immunität:** Komplexere Strings (inklusive URLs mit `//` oder Semikolons) bringen den Parser nicht mehr aus dem Tritt. +--- -#### ✅ Entwickler-Ergonomie & Workflow +## 📜 License -* **Workspace Scanning:** Mit dem Befehl `TPL: Gesamten Workspace prüfen` lässt sich das komplette Projekt auf einen Schlag durchleuchten. Alle Fehler landen übersichtlich im VS Code "Probleme"-Tab. +This project is licensed under the **MIT License**. -* **Natives TODO-Tracking:** Kommentare mit `TODO:` werden automatisch erfasst und als blaue Info-Links im Probleme-Tab indiziert. +Copyright (c) 2026 Thomas Wehnert -* **Quick Fixes:** Fehlen Pflicht-Metadaten (wie `author`, `tree_path`), lassen sich diese per Klick auf das Glühbirnen-Symbol (Code Action) automatisch an der richtigen Stelle generieren. +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -### 🚀 Roadmap +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -* **1-Klick Test Deployment:** Integration der BMC Helix REST API, um Patterns direkt aus VS Code auf eine Test-Appliance zu pushen. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. -* **CI/CD Pipeline Integration:** Eine "Headless"-Version des Linters für GitLab/GitHub, um fehlerhaften Code in Merge Requests zu blockieren und vollautomatisierte Deployments für die Produktion zu ermöglichen. +--- +--- -### 📄 Lizenz +# BMC TPL Code All-Around -Dieses Projekt ist unter der MIT-Lizenz lizenziert – weitere Details finden sich in der [LICENSE](LICENSE)-Datei. +**Linter, Auto-Formatter, IntelliSense und Hover-Dokumentationen für die BMC TPL (Template Language).** -**© Thomas Wehnert (Kuro)** \ No newline at end of file +Diese Visual Studio Code Erweiterung verwandelt deinen Editor in eine vollwertige Entwicklungsumgebung für BMC Discovery TPL-Skripte. Sie nimmt dir Tipparbeit ab, formatiert Code nach strengen Best Practices, verhindert Syntax-Fehler noch vor dem Deployment und versteht projektübergreifende Abhängigkeiten. + +--- + +## ✨ Features + +### 🤖 Intelligenter Linter (Syntax-Scanner) +Der Linter analysiert den Code in Echtzeit, merkt sich Zustände über Zeilenumbrüche hinweg und warnt vor typischen TPL-Fehlern: +* **Strikte Hierarchie-Prüfung:** Überwacht die korrekte Reihenfolge der Blöcke innerhalb von Patterns und Syncmappings (`metadata` -> `overview` -> `constants` -> `triggers` -> `mapping`/`removal` -> `body`). +* **Smarter Zuweisungs-Check:** Findet fehlende Semikolons (toleriert sie aber in `enumeration`-Blöcken oder bei umgebrochenen Code-Zeilen). Warnt streng mit einem Fehler, wenn `=` anstelle von `:=` für Variablenzuweisungen genutzt wird (außerhalb von legitimen `if`/`where` Vergleichen). +* **Block- & Klammer-Tracking:** Erkennt nicht geschlossene Blöcke (wie fehlende `end body;` oder `end pattern;`) und findet ungeschlossene runde `(` oder eckige `[` Klammern. +* **Pflichtfeld-Validierung:** Prüft, ob auf Modul-Ebene zwingend benötigte Metadaten (`origin`, `author`, `products`, `publishers`, `tree_path`) vorhanden sind und ob im `body` ein initiales `log.debug` Statement steht. +* **Versions-Prüfung:** Gleicht die im Modul deklarierte TPL-Version mit der in deinen Settings definierten Version ab und warnt vor veralteten Skripten. + +### ⚙️ Konfigurierbare Plugin-Einstellungen (Settings) +Personalisiere das Plugin direkt über die VS Code Benutzeroberfläche (File > Preferences > Settings > Extensions > BMC TPL Einstellungen): +* **Standard Metadaten:** Hinterlege deine eigenen Werte für `Author`, `Publisher`, `Origin` und den `Tree Path`. Diese werden beim Generieren neuer Module automatisch eingesetzt. +* **TPL Zielversion:** Definiere die TPL-Version (z.B. `23` für 1.23), für die du standardmäßig entwickelst. +* **Live-Reload:** Änderungen an den Einstellungen greifen sofort, ganz ohne Neustart des Editors. + +### 🎨 Auto-Formatter & Visual Alignment (`Shift + Alt + F`) +Schluss mit kaputten Einrückungen! Der Formatter bringt deinen Code in Bestform: +* **VS Code Standard:** Erzwingt strikt 4 Leerzeichen pro Einrückungs-Ebene. +* **Dynamische Block-Einrückung:** Erkennt automatisch startende und endende Blöcke (`if`, `for`, `pattern`, `table` etc.) und passt die Einrückungsebene an. +* **Klammer-Gedächtnis (Visual Alignment):** Die Königsdisziplin! Der Formatter merkt sich die spaltengenaue Position von geöffneten Arrays `[` oder Funktionsaufrufen `(` und richtet alle Folgezeilen makellos an dieser Klammer aus. + +### 💡 IntelliSense & Autovervollständigung (Cross-File) +Spart extrem viel Zeit beim Coden durch massives Kontext-Wissen: +* **Volle BMC Standard-Bibliothek:** Nahtlose Integration aller Built-In Funktionen (z.B. `discovery`, `number`, `text`, `model`). Unterstützt Parameter-Überladungen (z.B. `number.toText` wahlweise mit oder ohne Basis) per Tab-Navigation. +* **Workspace-Scanning:** Importierst du ein Modul (z.B. `from company.helpers import my_helper`), durchsucht das Plugin im Hintergrund dein gesamtes Projekt. Tippst du `my_helper.`, werden dir automatisch alle verfügbaren `define`-Methoden vorgeschlagen. +* **Lokale Namespaces:** Erkennt `definitions`-Blöcke in class gleichen Datei und schlägt deren Methoden vor. +* **Variablen-Tracking:** Lernt alle Variablen, die du mit `:=` definiert hast, und schlägt sie dir später vor. + +### 🔍 Hover-Dokumentation (Tooltips) +Wenn du mit der Maus über einem Methodennamen, einem Pattern oder einer Tabelle stehen bleibst: +* **Offizielle BMC Doku:** Volle Integration der originalen, mehrzeiligen BMC Dokumentationen für alle eingebauten Funktionen (kein Browser mehr nötig!). +* **DocString Extraction:** Liest eigene Multi-Line-Kommentare (`"""` oder `'''`) aus, die unter `define` oder `pattern` Deklarationen stehen, und rendert sie als saubere Markdown-Tooltips (auch projektübergreifend!). + +### ⚡ Quick Fixes (Code Actions / Glühbirne) +Bietet sofortige Reparaturoptionen mit einem Klick: +* **"Fehlende Modul-Metadaten einfügen":** Generiert sofort alle 5 Pflichtfelder im Modul-Metadata-Block. +* **"Log-Statement einfügen":** Baut das fehlende `log.debug("Start pattern...");` direkt am Anfang des `body`-Blocks ein. +* **"Tabs zu Spaces":** Ersetzt sofort alle illegalen Tabs (`\t`) in einer Zeile durch jeweils 4 korrekte Leerzeichen. + +--- + +## 🚀 Snippets (Code-Vorlagen) + +Einfach das Keyword tippen und `Enter` drücken, um komplette, perfekt eingerückte Blöcke zu generieren: + +| Keyword | Beschreibung | +| :--- | :--- | +| `tpl_skeleton` | **God-Snippet**: Generiert ein komplett frisches TPL Modul. Nutzt automatisch deine hinterlegten Settings für Metadaten und Version. | +| `pattern` / `syncmapping` | Baut einen leeren Pattern/Syncmapping-Block inklusive DocString und End-Tag. | +| `define` | Generiert eine Methodendefinition (`define name(params) ... end define;`). | +| `metadata`, `overview`, `body`... | Baut den jeweiligen Block auf und platziert den Cursor in der Mitte. | +| `table` | Erstellt eine Tabelle inklusive des `default -> "unknown";` Fallbacks. | +| `if`, `elif`, `else` | Baut bedingte Abfragen inkl. `then` und `end if;` und platziert den Cursor sauber bei der Bedingung. | +| `for`, `while` | Baut Standard-Schleifen inkl. `do` und End-Tag und lässt dich direkt iterieren. | + +--- + +## 🛠️ Installation & Nutzung + +1. Das Plugin aktivieren. (Von den Releases das neueste herunterladen und einfach die `.vsix` Datei in die Add-ons von Visual Studio Code ziehen). +2. In einem Projekt mit TPL Dateien eine davon öffnen und die Analyse durchlaufen lassen. +3. Der Linter startet automatisch bei jedem Tastendruck. +4. **Formatieren:** Rechtsklick -> *Dokument formatieren* (oder `Shift + Alt + F`). +5. **Autovervollständigung:** Triggert automatisch beim Tippen, speziell nach einem Punkt (`.`) bei Modul-Aufrufen. +6. **Quick Fixes:** Auf die gelbe/rote Glühbirne am Zeilenanfang klicken oder `Ctrl + .` (Windows/Linux) / `Cmd + .` (Mac) drücken. + +--- + +## 📜 Lizenz + +Dieses Projekt ist unter der **MIT License** lizenziert. + +Copyright (c) 2026 Thomas Wehnert + +Jedem, der eine Kopie dieser Software erhält, wird hiermit kostenlos die Erlaubnis erteilt, ohne Einschränkung mit der Software zu handeln, einschließlich und ohne Einschränkung der Rechte zur Nutzung, zum Kopieren, Ändern, Zusammenführen, Veröffentlichen, Verteilen, Unterlizenzieren und/oder Verkaufen von Kopien der Software, sofern der obige Urheberrechtshinweis und dieser Genehmigungshinweis in allen Kopien oder wesentlichen Teilen der Software enthalten sind. Die Software wird "ohne Mängelgewähr" (as is) zur Verfügung gestellt. \ No newline at end of file