---
title: "Navigate SCL references"
---

# Navigate SCL references

Go to definition, find all references, hover, completion and outline in the text editor of SCL files, across inputs, data sets, communication, the Substation section and the type templates.

**State:** reference resolution is verified on the 292 public SCL files (171,204 references asked for). Definition, references, hover, completion and outline in the editor are modelled (Electron tests on a real text model).

The features work in the ordinary text editor of an SCL file (`.scd .ssd .icd .iid .cid .sed`, any letter case, local files).

## Go to definition and find references

**Go to definition** (Ctrl+click) and **Find All References** (Shift+F12) work for:

| Where you are | Where it goes |
|---|---|
| An input (`ExtRef`) | The IED, logical device, logical node, each part of a dotted data object and attribute path, the source logical device and node, and the control block |
| A data set member (`FCDA`) | The data it names |
| `datSet` of a GOOSE, Sampled Values or report control block | The data set |
| The Communication section | `ConnectedAP` to its IED and access point; `GSE` and `SMV` to the logical device and control block |
| The Substation section | `LNode` to its IED, logical device, logical node and type |
| Report clients and subscribers | `ClientLN` and the `IEDName` subscribers of a control block |
| The type templates | `lnType` of `LN` and `LN0`, `type` of `DO` and `SDO`, `type` of `DA` and `BDA` by `bType` |

A data path goes to its instance (`DOI`, `SDI`, `DAI`) where the file has one, and to its type member otherwise. Find All References also works from a definition and from a type member: on the `lnType` of an `LN`, it lists every logical node of that type.

## Hover

Hover over a reference to see what it resolves to: its path, type, common data class, FC, basic type and the value in the file; for a control block, its data set and network addresses. A reference that does not resolve says why: which IED, logical device, logical node, data part, control block or type is missing.

## Completion

Press Ctrl+Space inside an attribute value such as `iedName=""` to get the names the file defines: IEDs, access points, logical devices, logical nodes, data objects and attributes, control blocks, the data sets of the enclosing logical node, and type ids. Completion works also while the text you are typing does not parse.

## Outline

The Outline view shows the station's structure.

## Try it

1. Open an SCD. In the `ExtRef` of a subscribing IED, Ctrl+click `iedName="P1"`: the cursor goes to `<IED name="P1"`.
2. Hover over `datSet="Trips"` of a control block: the data set and its members.
3. On the `lnType` of an `LN`, press Shift+F12: every logical node of that type.

## Size

On a generated station of 100 IEDs (3.5 million characters, 84,000 elements), measured on Linux: a definition with its hover takes about 3 ms; the first Find All References (which indexes every reference) about 0.3 s, later ones under 1 ms.

## Not verified

- References between files: an input naming an IED that is only in another SCD or ICD does not resolve.
- Untitled and remote files (local files only).
- The resolution rules follow IEC 61850-6 as understood here; they are not checked against the standard's text, RiseClipse or a vendor tool.
- Files of DIGSI 5, SEL and Helinks; Windows.
