github / github/code-navigation

Code navigation for new language: AL

Open
#17 0 comments 3 reactions 0 assignees View on GitHub
Dominant language
No language data
Stars
12
Forks
7
PR merge metrics
No merged PRs in 30d

Description

## Language

**AL** (Microsoft Dynamics 365 Business Central) — https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-programming-in-al

AL is the programming language used to build extensions for Microsoft Dynamics 365 Business Central, Microsoft's flagship ERP platform. It has a large partner/developer ecosystem with significant usage on GitHub — [`path:*.al language:AL`](https://github.com/search?q=path%3A*.al+language%3AAL&type=code).

## Why now

AL has been recognized in Linguist since 2018 but has never had code navigation: no mature tree-sitter parser existed until now. `tree-sitter-al` (MIT, on crates.io) is the first, with 100% parse success on Microsoft's 15,358-file Base Application and 1,404 passing tests — filling a long-standing gap for the Business Central / AppSource developer community.

## Linguist entry

- [x] Linguist language name: AL
- [x] Linguist language ID: 658971832
- [x] Permalink: https://github.com/github-linguist/linguist/blob/537297cdae3ab05f8d5dd1c03627a5bd73707b19/lib/linguist/languages.yml#L109-L116

## Tree-sitter parser

Parser URL: https://github.com/SShadowS/tree-sitter-al

- [x] Parser is open source: MIT license
- [x] Repository includes tags queries (`queries/tags.scm`, 226 lines)
- [x] Tags queries include `@scope` for fully-qualified names (if applicable) — N/A: AL definitions are always lexically nested inside object declarations (procedures inside codeunits, fields inside tables, etc.), so FQNs are inferred from tree structure — same as Java/C#. No `@scope` captures needed.
- [x] Rust crate: https://crates.io/crates/tree-sitter-al

### Maturity

- 100% parse success rate on 15,358 production AL files (Microsoft's Base Application)
- 1,404 test cases passing
- Version 2.3.0, actively maintained

### Tags query coverage

**Definitions:**
- Objects: `table`, `page`, `codeunit`, `report`, `query`, `xmlport`, `enum`, `interface`, `controladdin` + all extension types → `@definition.class` / `@definition.interface`
- Procedures & triggers → `@definition.method`
- Parameters → `@definition.parameter`
- Fields, keys, columns → `@definition.field`
- Variables → `@definition.variable`
- Enum values, labels → `@definition.constant`
- Actions, triggers, views → `@definition.function`
- Namespaces → `@definition.module`

**References:**
- Method/function calls → `@reference.call`
- Table/enum type references → `@reference.class` / `@reference.type`
- Interface implementations → `@reference.implementation`
- Property value references → `@reference.constant`

Contributor guide

Open the contributing guide

Research direction

Start by reviewing the linked tree-sitter-al repository, especially queries/tags.scm and its documented parser and tag coverage. Compare the listed AL definitions and references with the code-navigation integration requirements, then verify that AL navigation supports those categories and the stated parser and query coverage.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
developer-experience, tooling
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.