Syntactic Code Navigation
Supported on Enterprise plans.
This feature is currently in Beta and enabled by default for Cloud customers
Syntactic code navigation is a zero configuration feature that improves code navigation for certain languages in the absence of Precise code navigation set up. It works by periodically indexing repositories for which it is enabled, using high level syntax analysis heuristics.
This mechanism is more robust than search-based navigation, but less powerful than Precise code navigation. When syntactic indexing data is available for a given file and repository, it will be selected over search-based navigation automatically, but only if Precise data is not available. To summarize, the order of priorities is as follows:
- Precise data
- Syntactic, if no precise data available
- Search-based, if no syntactic available
Enabling Syntactic code navigation
First, enable the experimental feature flag in Site config:
JSON"experimentalFeatures.codeintelSyntacticIndexing.enabled": true
Next, you need to ensure that syntactic indexing is enabled in a code graph configuration policy. Note that for cloud customers this feature is enabled by default for all repositories, as part of
automatically managed policy called [Sourcegraph Managed] Head of default branch policy
.
For all other deployments, you will need to create a HEAD policy with "Syntactic indexing" enabled:
Syntactic indexing can only be enabled if the policy type is set to HEAD – only indexing the tip of default branch on each repository. You may choose to apply this policy only to selected repositories, although the recommendation is to enable it instance-wide.
Supported languages
Syntactic code navigation requires language-specific implementations, and we currently support the following languages:
We are constantly looking to expand the list of supported languages, with Python, Typescript/Javascript, and C planned. If you are interested in syntactic indexing for these or any other languages, please contact your Sourcegraph account representative.
Comparison with Precise and Search-based
Syntactic code navigation falls between Precise and Search-based code navigation both in terms of quality of navigation, and in terms of effort to maintain for different languages:
As the indexing does not involve build tools or actual compilers, it can be performed in isolated environment, with no network access and no configuration, unlike Precise.