src/Tools/VSCode/extension/src/isabelle_filesystem/workspace_state.ts
author wenzelm
Thu, 03 Mar 2022 16:46:05 +0100
changeset 75201 8f6b8a46f54c
parent 75179 549e4fb76724
child 75209 4187f6f18232
permissions -rw-r--r--
clarified modules: more uniform .scala vs. ts (amending 4519eeefe3b5);

/*  Author:     Denis Paluca and Fabian Huch, TU Muenchen

Persistent workspace state.
*/

'use strict';

import { ExtensionContext } from 'vscode'
import { Session_Theories } from '../lsp'
import * as symbol from '../symbol'

interface Setup_Data
{
  workspace_dir: string
  sessions: Session_Theories[]
  symbol_entries: symbol.Entry[]
}

enum State_Key
{
  workspace_dir = 'workspace_dir',
  sessions = 'sessions',
  symbol_entries = 'symbol_entries'
}

class Workspace_State
{
  constructor(private context: ExtensionContext) { }

  public get_setup_data(): Setup_Data
  {
    return {
      workspace_dir: this.get(State_Key.workspace_dir),
      sessions: this.get<Session_Theories[]>(State_Key.sessions),
      symbol_entries: this.get<symbol.Entry[]>(State_Key.symbol_entries)
    }
  }

  public set_setup_date(setup_data: Setup_Data)
  {
    const {workspace_dir: workspace_dir, sessions } = setup_data
    this.set(State_Key.workspace_dir, workspace_dir) // TODO await?
    this.set(State_Key.sessions, sessions) // TODO await?
  }

  public get<T = string>(key: State_Key): T
  {
    return this.context.workspaceState.get(key)
  }

  public async set(key: State_Key, value: any)
  {
    await this.context.workspaceState.update(key, value)
  }
}

export { Workspace_State, State_Key, Setup_Data }