FBO Entity
Helps you work with FBO source files (*.f / *.ent / *.xml): find missing/broken
include files and jump to them instantly with Ctrl+Shift+F.
The extension recognizes declarations shaped like:
<!ENTITY % MultiViewGrid SYSTEM "..\Include\MultiViewGrid.ent">
<!ENTITY ScriptIrregular SYSTEM "..\Include\Javascript\Irregular.txt">
Applies to files with these extensions: .f, .ent, .xml, .txt, .dtd, .inc, .001…
(or any file that starts with <!DOCTYPE / <!ENTITY).
Features
1. Highlight the declaration line in yellow when the included file is missing
Scans every <!ENTITY [%] Name SYSTEM "path"> line in the open file. The SYSTEM
path is resolved relative to the folder of the open file (Windows-style \
separators are handled automatically). If the file cannot be found at the
declared path → the whole line gets a yellow background, plus a yellow left
border and a marker on the overview ruler.
2. Multi-level recursive check
Included files can be nested several levels deep. The extension follows the
whole include chain: if a level-1 include exists but something it references
(directly or several levels down) doesn't, the declaration line in the
original file is still highlighted in yellow. The hover popup shows the
broken chain: A → B → C => missing path.
- Max recursion depth:
fboFentity.maxDepth (default 30).
- Protected against circular includes.
3. Preview included file content on hover
Hover over a declaration line <!ENTITY ... SYSTEM "..." or a reference
%Name; / &Name; to see a popup with:
- The file name and its fully resolved path.
- A preview of the start of the file's content (30 lines by default), with
syntax highlighting based on file type (
javascript, sql, xml).
- A warning if the file is missing or has a missing nested include.
Number of preview lines: fboFentity.previewLines (default 30).
4. Ctrl+Shift+F — open the included file in a new tab
Place the cursor on a declaration line or on a %Name; / &Name; reference,
then press Ctrl+Shift+F to open the corresponding included file in a new
tab.
- If the cursor is on a
%Name; reference, the extension automatically looks
up the <!ENTITY Name SYSTEM …> declaration in the file and opens that file.
- If the file doesn't exist → a warning with the path is shown.
Ctrl+Shift+F is only overridden while inside an entity file; in other
files it stays VS Code's default Find in Files.
5. Auto-completion (IntelliSense) while typing
Based on the function catalog gathered in 02.Skill.md (a scan of every
*.xml file under App_Data/Controllers):
- Type
f., g., z., w., df., v., h., y., c., d., o.,
ext., common., form., grid., sender., func., gridf. → suggests
that object's API methods (getItem, getItemValue, request, ...),
ranked by usage frequency, with the real parameter names shown right in the
suggestion (e.g. getItemValue(fieldName)) and a snippet that fills them in
as tab stops. Parameter names are inferred from each function's naming
convention (not from official FBO documentation), since the usage catalog
only records call counts, not signatures — the usage count is still shown
in the suggestion's documentation panel.
- Type
on$ModuleName$ → suggests event names (Complete, Fail,
OnProcessFailure, ResponseComplete, ExecuteCommand, ...).
Can be disabled with fboFentity.enableCompletion.
6. Auto-completion for JavaScript statements and the JS HTML DOM API
Only active while the cursor is inside a JavaScript context (inside a
<![CDATA[ ... ]]> block in an XML file, or anywhere in a plain JS script
file) — it never interferes with typing regular FBO XML tags:
- Type a word (e.g.
whi, swi, fun) → suggests common JavaScript
statements as snippets: if, if...else, for, for...in, while,
do...while, switch, try...catch, function, return, var, new,
typeof, break, continue, true/false/null/undefined — together
with JS HTML DOM members that apply to any element variable (innerHTML,
innerText, appendChild, setAttribute, classList.add, style,
addEventListener, ...).
- Type
document. or window. → suggests that object's DOM methods
(getElementById, querySelector, createElement, addEventListener,
setTimeout, alert, ...), grouped the same way as the familiar JS HTML
DOM reference categories (Selecting Elements, Changing HTML, Changing CSS,
Document Reference, DOM Animations, ...).
Shares the same fboFentity.enableCompletion setting as feature 5.
VS Code's built-in XML grammar tags <![CDATA[ ... ]]> content as a
"string" scope, and editor.quickSuggestions.strings is false by
default — this normally blocks the JS-keyword popup from appearing
automatically while typing (though Ctrl+Space always works). The
extension ships an [xml]-scoped default that turns strings suggestions
back on, so typing alone is enough once the setting takes effect. Your own
editor.quickSuggestions setting (user/workspace) always takes priority
over this default.
Recomputes each line's leading whitespace based on nesting depth — it
never rewrites or reorders tokens, so it's safe with legacy-style code
(ES5, using framework objects like f., g., func., ...).
- XML/entity files (
<command>, <field>, <!ENTITY>, ...): re-indented by
tag nesting depth. JS inside <![CDATA[ ... ]]> is also reformatted, one
level deeper than its surrounding tag. Content inside <!-- --> is left
completely untouched.
- Plain JS script files (
.txt/.js under a Javascript folder): re-indented
by {}/()/[] nesting depth.
- SQL files or unrecognized types: shows a message and does nothing.
- Indentation follows the current editor's tab/space settings.
Ctrl+Shift+K is only overridden while inside an entity file (VS Code's
default binding for this key is "delete line" — that default is preserved
in every other file type).
8. Highlight in red the starting line of an unmatched tag/block
Automatically detects and highlights the starting line with a red
background:
- An XML tag with no matching closing tag (
<a> missing </a>), or an extra
closing tag that doesn't match any open tag.
- A JS block with an unmatched
{, (, or [ (including JS inside
<![CDATA[ ... ]]> of an XML file).
Hover over a red-highlighted line to see the error details. Can be disabled
with fboFentity.enableUnbalancedCheck.
Commands (Command Palette)
| Command |
Description |
FBO: Open Included File (ENTITY SYSTEM) in New Tab |
Open the included file at the cursor position |
FBO: Rescan Missing Include Files |
Clear the cache and rescan everything |
FBO: Format XML/JS (Beautify) |
Reformat indentation of the open file |
Settings
| Key |
Default |
Description |
fboFentity.previewLines |
30 |
Number of lines of included file content shown on hover |
fboFentity.highlightColor |
rgba(255, 214, 0, 0.28) |
Background color for the whole line when an included file is missing |
fboFentity.errorHighlightColor |
rgba(255, 0, 0, 0.25) |
Background color for the starting line of an unmatched tag/block |
fboFentity.openInNewColumn |
false |
Open the included file in a split column beside the current one instead of a new tab |
fboFentity.maxDepth |
30 |
Maximum nesting depth when recursively resolving includes |
fboFentity.enableCompletion |
true |
Auto-complete framework functions, event names, JS statements, and HTML tags while typing |
fboFentity.enableUnbalancedCheck |
true |
Highlight in red the starting line of an unmatched tag/block |
Author: THANGLV
| |