Settings File
When using Sigasi projects, a new settings format is available. It allows easier sharing of configuration between teams and projects,
as well as more fine-grained control by allowing target-specific settings.
The new settings format is automatically used when a Sigasi project does not use Eclipse-compatible settings already, i.e.,
there’s no .settings
directory in the project’s root directory.
The settings can be configured by right-clicking a project, folder, or file in the Sigasi Projects View, and selecting Configure > [Project/Folder/File] Settings:
- Settings for a project, folder, or file inside the
Design
orExternal
folders will configure settings for all targets. - Settings for a specific target folder inside the
Targets
folders will configure project-wide settings for that target. - Settings for a file inside the
Targets
folder will configure file-specific settings for the corresponding target.
When the new settings format is used, settings are saved in the .sigasi/settings.json
file in the project directory.
Some functionality of the new settings format is not yet available in the UI. For example, settings sharing will require making manual changes to the settings.json
file.
Refer to the documentation below for the exact format of the settings.json
file.
The new settings are stored in a JSONC (JSON with comments) file. It’s a JSON object with key-value pairs corresponding to project-wide settings.
Example:
{
// VHDL formatting settings
"vhdl.formatting.preserveNewlines": true,
"vhdl.formatting.keywordsCase": "LOWERCASE",
"vhdl.formatting.trailingCommentsAlignmentColumn": 50
}
In addition to configuration key-value pairs, the following special fields can be used in the project section:
Field | Description |
---|---|
@override | Specify folder- or file-specific settings |
@targets | Specify target-specific settings |
@include | Include other settings files |
@override
Specific configuration for a folder or file can be specified in the @override
section.
Each key is a path to a folder or file in the Projects View (starting with Design
or External
). The value is an object with settings for that folder or file.
Note that the order of the specified paths is irrelevant. Instead, overrides for longer paths (= more specific) have higher priority.
If you specify settings for a folder, they will apply for each file in the folder and in all its nested folders.
To further specify the configuration for nested folders or files, add specific settings for them in the @override
section.
In addition to configuration key-value pairs, the following special fields can be used in the @override
section:
Field | Description |
---|---|
@targets | Specify target-specific settings |
@include | Include other settings files |
Example:
{
"@override": {
"Design/shared": {
"verilog.rules.20.severity": "WARNING",
"verilog.rules.20.parameters.max_line_length": 80,
"verilog.rules.21.severity": "WARNING",
"verilog.rules.172.parameters.allowed_sequences": "LF_ONLY"
},
"Design/shared/constants.sv": {
"verilog.rules.172.parameters.allowed_sequences": "CRLF_ONLY"
},
"External/${LIBS}/cells": {
"verilog.rules.172.parameters.allowed_sequences": "LF_ONLY"
}
}
}
@targets
A distinct configuration for project targets can be specified in the @targets
section.
Each key is the name of a target. The value is an object with settings for that target.
If the @targets
section is specified in the project section, then the settings are applied to all target files.
If the @targets
section is specified in the @override
section, then the settings are applied to the corresponding folders and files when they are part of the specified target.
In addition to configuration key-value pairs, the following special fields can be used in the @targets
section:
Field | Description |
---|---|
@include | Include other settings files |
Example:
{
"@targets": {
"rtl": {
"vhdl.rules.252.severity": "WARNING",
"vhdl.rules.252.parameters.reset_style": "SYNCHRONOUS"
}
},
"@override": {
"Design/shared": {
"@targets": {
"rtl": {
"vhdl.rules.252.parameters.reset_style": "ASYNCHRONOUS"
}
}
}
}
}
@include
In addition to settings specified in the main settings.json
file, it is possible to create separate settings files with a common configuration and include them
in the project section or any @override
or @targets
section. To do so, an @include
field should be specified in the corresponding section.
The value is the path to the file you want to include. The path should be relative to the settings file you are including it in.
This is similar to the -F
option in .f
argument files.
You can specify multiple files to include. In this case, the value should be a JSON array of file paths to include.
You can include any JSONC file with the configuration key-value pairs that you would otherwise specify in the main settings.json
file. Included settings files can include other settings files as well.
If the same key is specified both in the included file and in the section it is included in, the local value has priority over the value from the included file.
If the same key is specified in multiple files that are included in the same section, the value specified in the file that is included later has priority.
NOTE: Included files cannot use @override
or @targets
sections. The configuration specified in those files is applied to the section they are included in.
Example:
{
"@include": ["formatting-settings.json", "../rules/common.json"],
"@targets": {
"rtl": {
"@include": "../rules/rtl.json"
}
},
"@override": {
"Design/ip": {
"@include": "../rules/ip.json"
}
}
}
Setting Priorities
Setting keys can be specified in different sections and for different files and folders. If the same key is specified in multiple sections or for multiple folders and files, the value from the more specific context has higher priority. Here’s the list of contexts ordered from higher to lower priority:
- Settings in the
@targets
section for a target in the@override
section for a file. - Settings directly in the
@override
section for a file. - Settings in the
@targets
section for a target in the@override
section for a file’s containing folder. - Settings directly in the
@override
section for a file’s containing folder. - Settings in the
@targets
section for a target in the@override
section for a parent folder, if any. - Settings directly in the
@override
section for a parent folder, if any. - …
- Settings in the
@targets
section for a target in the project section. - Settings directly in the project section.