microsoft / microsoft/AL

AL languages internal cache is not always correctly refreshed

Open
#7,891 6 comments 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

accepted
Dominant language
PowerShell
Stars
881
Forks
285
Avg merge
3d 36m
Merged PRs (30d)
1

Description

1. Describe the bug
The AL language editor host executable has an internal cache where it holds things like referenced symbols and project symbols and so on. I assume for performance reasons. This cache however is not always refreshed correctly and requires the user to run a "Reload Window" or reload the entire project workspace to refresh it.

I have a few scenarios where this happens and is a problem for me:

  1. When I externally download symbols they are not detected by AL language.
  2. Modifying the app.json triggers a cache refresh, but only when done so from inside VS Code. If app.json is modified externally, AL language does not detect a change to it and thus does not refresh anything.
  3. Switching branches in git causes the cache of the AL language to become stale. The symbols in it's cache still refer to the old version of my objects. This until I either reload the project (as described above) or I open the object in question. This however refreshes the cache for this object only.

2. To Reproduce
Steps to reproduce the behavior:

Scenario 1:

  1. Download a symbol package manually from somewhere and place it in the .alpackages folder.
  2. The new symbol package is not detected.

Scenario 2:

  1. Use a project with a dependency to an app that you already have in your .alpackages folder.
  2. Update the minimum version to something higher that is not available.
  3. You correctly get an error stating that symbols are missing.
  4. Externally modify app.json and reset the version to what it was before.
  5. The symbol is still missing according to AL language.

Scenario 3:

  1. Work on a feature branch where you removed a method from an object.
  2. Close the editor for that object.
  3. Switch back to a different branch where the method from 1 still exists.
  4. Go to a different object and reference this method.
  5. AL language argues that this method does not exist, but it does.

3. Expected behavior
Option 1: detect file changes even when made from outside the project. There are numerous tools around now that interface with AL projects, tying it's caching mechanism to only what happens under AL languages watch is very limiting. You could, for example, bind this to the app.json file only. Anyone who wants to cause a cache refresh from outside VS Code then just has to touch that file and you would not have to watch all project files for changes.
Option 2: give us a command that let's us explicitly cause a cache refresh without having to reload the entire editor. This command would then also be required to be callable from other extensions, pretty please.

4. Actual behavior
The cache often becomes stale and requires me to reload my editor, causing lots of reload times.

5. Versions:

  • AL Language: 15.0.1177813
  • Visual Studio Code: 1.95.1
  • Business Central: n/a
  • Operating System:
    • Windows
    • Linux
    • MacOS
      Internal work item: AB#556873

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing how the AL language extension observes changes to .alpackages and app.json, including external edits and git branch switches. Reproduce the three scenarios, then verify that symbol and project caches refresh without a full VS Code window or workspace reload, either through file detection or an explicit refresh command.

Written by the indexing model from the issue text.

Assessment

Tech stack
git, vscode
Domain
developer-experience, tooling
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.