NASA-AMMOS / aerie-ui

The client application for Aerie.
https://nasa-ammos.github.io/aerie-docs/
MIT License
28 stars 4 forks source link

Separate language-specific code from Phoenix core code #1348

Open dandelany opened 1 week ago

dandelany commented 1 week ago

Describe the feature request

We met today with @bduran @joswig @mattdailis @goetzrrGit and @cohansen to discuss future plans for the Phoenix editor and our plans to make it more general and less mission-specific in the future. Eventually we'd like to support additional features in the sequence adaptation file, as well as support for other languages such as VML.

In the short-term, @bduran suggested that we take a first pass at separating any code in Phoenix which is language-specific (ie. specific to the SeqN or SeqJSON file formats) from the core Phoenix code, ie. some form of abstraction layer which would allow us to use a different language(s) down the road without modifying too much core code. We don't need to have a full plan yet for how to support other languages, but it will make that future step easier if our codebase makes a clear distinction between the two.

Assigning to @duranb to add any additional details/specific ideas.

duranb commented 5 days ago

From my meeting with @cohansen and @goetzrrGit, we came up with the idea of adding an abstraction layer that implements the following interface (wip):

interface ISequence {
  public sequenceCompletion: (string) => string;
  public sequenceLinter
  public sequenceTooltip
  public sequenceUpdate
  public toOutputFormat: (string) => string; 
}

and for the adaptations we'll go with a similar abstraction layer for the globals:

interface ISequenceAdaptation {
  CONDITIONAL_KEYWORDS?: { ELSE: string; ELSE_IF?: string[]; END_IF: string; IF: string[] };
  LOOP_KEYWORDS?: {
    BREAK: string;
    CONTINUE: string;
    END_WHILE_LOOP: string;
    WHILE_LOOP: string[];
  };
  ARG_DELEGATOR?: ArgDelegator[];
  LINT: (commandDictionary, view, node);
  TO_FORMAT?: (string, parameterDictionaries, channelDictionary);
  PARSE_FORMAT?: (string, parameterDictionaries, channelDictionary);
}