ubproject.toml sync#
The extension score_sync_toml provides configuration for the newly developed
Sphinx extension needs-config-writer.
The extension allows to write a declarative configuration file ubproject.toml
that is required by the ubCode VS Code extension
and its companion CLI app ubc
to get hold of the Sphinx-Needs configuration.
The solution outlined here can serve as a template for how to build IDE extensions in a Bazel environment. IDE extensions need to know the configuration and file sets that are part of the project. This information is hidden in the build system, so a call is needed to extract this information and make it available to the IDE extension.
The basic idea is to stay with the programmed configuration system for Sphinx and
Sphinx-Needs as it exists in S-CORE, but use it to generate the ubproject.toml file.
The ubproject.toml file is generated into the directory holding the conf.py file
(called confdir in Sphinx) and should be checked into the version control system
alongside conf.py.
The ubproject.toml file is generated on each Sphinx build, so any changes to the
Sphinx-Needs configuration are automatically reflected in the generated file.
If changes are detected, a warning is emitted during the Sphinx build to remind the user
to commit the updated ubproject.toml file. Changes may occur because docs-as-code
updated a configuration or a new Sphinx-Needs version added configuration.
Committing the generated ubproject.toml file allows the IDE extension to work
without requiring any Sphinx build to be performed first. For a fully complete network
of need items, required external or imported needs.json files must first be
generated by Bazel.
The command line tool ubc uses the same configuration as ubCode and can be
used to lint and format all RST files in any of the S-CORE documentations.
ubc also has features for exporting traceability data to specific file formats or
performing diff and impact analysis.