Pascal is an open source extension created for Visual Studio Code. While being free and open source, if you find it useful, please consider supporting it
It adds support for the Pascal language and its dialects like Delphi and FreePascal.
Here are some of the features that Pascal provides:
Pascal supports full syntax highlighting for Delphi and FreePascal
Almost 40 snippets are available
Check out Pascal Formatter documentation.
Navigate to any language element (methods, attributes, classes, interfaces, and so on) inside Pascal files. It supports native VS Code commands like:
It uses GNU Global, a source code tagging system, which means that it has some limitations if you compare with an AST parsing.
You have to install 4 tools:
pip install Pygments
)Update your %PATH%
Environment Variable (System)
Let's say you extract GNU Global and CTags in C:\gnu
folder. The two new entries in %PATH%
should be:
C:\gnu\glo653wb\bin
C:\gnu\ctags58\ctags58
Also make sure Python is in %PATH%
Create 2 new Environment Variables (System)
GNU Global uses CTags + Python Pygments as plugin in order to recognizes Pascal source code, so you have to configure them.
GTAGSCONF
: C:\gnu\glo653wb\share\gtags\gtags.conf
GTAGSLABEL
: pygments
NOTE: For now, it was tested only on Windows, but since these tools are multiplatform (in fact, it comes from Unix), it should work on Linux and Mac.
To enable Code Navigation, the extension depends on GNU Global and Exuberant Tags and for that, you must run gtags
on the Root folder, so the tags are created. In order to make life easier, two commands where added:
Controls how the code navigation should work. Specially useful if you work with huge projects
workspace
: Full featured code navigationfile
: Limited to Go to Symbol in File
command "pascal.codeNavigation": "workspace"
"pascal.tags.autoGenerate": true
For huge projects, its recommended to use:
"pascal.codeNavigation": "file",
"pascal.tags.autoGenerate": false
Use this Task Examples, so you can:
If you want to build tasks (Task: Run Task Build) you can use the snippets below.
Update two tags:
DCC32.EXE_PATH
: The compiler locationYOUR_DELPHI_PROJECT.DPR
: The project being built. "version": "2.0.0",
"tasks": [
{
"label": "Pascal",
"type": "shell",
"windows": {
"command": "DCC32.EXE_PATH"
},
"linux": {
"command": "FPC_BIN_PATH"
},
"presentation": {
"reveal": "always",
"panel": "new"
},
"args": [
{
"value": ""YOUR_DELPHI_PROJECT.DPR"",
"quoting": "escape"
}
],
"problemMatcher": {
"owner": "external",
"pattern": {
"regexp": "^(.*.(pas|dpr|dpk))\\((\\d+)\\)\\s(Fatal|Error|Warning|Hint):(.*)",
"file": 1,
"location": 3,
"message": 5
}
},
"group": {
"kind": "build",
"isDefault": true
}
}
]
Update two tags:
FPC_BIN_PATH
: The full compiler location. If its PATH
is already in Environment Variables, simply use FPC_BIN
filenameYOUR_FREEPASCAL_PROJECT_OR_FILE
: The project/file being built.
{
"version": "2.0.0",
"tasks": [
{
"label": "Pascal",
"type": "shell",
"windows": {
"command": "FPC_BIN_PATH"
},
"linux": {
"command": "FPC_BIN_PATH"
},
"presentation": {
"reveal": "always",
"panel": "new"
},
"args": [
{
"value": "YOUR_FREEPASCAL_PROJECT_OR_FILE",
"quoting": "escape"
}
],
"problemMatcher": {
"owner": "external",
"pattern": {
"regexp": "^([\\w]+\\.(p|pp|pas))\\((\\d+)\\,(\\d+)\\)\\s(Fatal|Error|Warning|Note):(.*)",
"file": 1,
"line": 3,
"column": 4,
"message": 6
}
},
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
Special thanks to the people that have contributed to the project:
Also thanks to everyone who helped opening issues with ideas and bug reports.
MIT © Alessandro Fragnani