Skip to content

10.FileEditor

nonodev96 edited this page Jul 2, 2022 · 5 revisions

Editor de ficheros

El Editor de ficheros es una de las secciones más importantes y complejas de nuestro proyecto, se trata de un editor de Monaco (un proyecto de Microsoft) modificado y con una extensión creada por nosotros que nos permita analizar, ** interpretar**, autocompletar, marcar y mostrar documentación.

Ejemplo de file editor THUMDER

En este ejemplo se ve el proceso para abrir un fichero, su ejecución y varias pruebas, entre ellas mostrar errores (no hay en el código, solo es un ejemplo del mensaje y la gravedad del posible error), añadir un breakpoint, ejecutar un paso o ejecutar la simulación.

Como podemos observar, la línea de ejecución en color azul verdoso corresponde a la etapa IF.

Autocompletado

Como podemos ver en el ejemplo del inicio se puede autocompletar las instrucciones, para ello se han puesto una serie de ejemplos que nos añaden los registros y desplazamientos de ejemplo.

Documentación

Para mostrar la documentación solo debemos pasar el ratón por encima de la palabra (instrucción) y se nos mostrará los datos de la instrucción (En inglés).

Todos estos ejemplos se encuentran definidos en The DLX Instruction Set, BYU Edition.

Errores

Como hemos visto en el ejemplo, el proyecto nos muestra errores simples, pero en caso de tener errores más complejos, estos se verán reflejados una vez que sincronicemos nuestro código con el servidor y esté intérprete el fichero.

Estos errores se muestran en función de la gravedad, con un mensaje descriptivo.

export type TypeErrorInCode = {
  line:     number;
  message:  string;
  severity: EnumSeverity;
}

Desarrollo

Leer la sección 06.TheBreakpoints.md para comprender como se ajustan los puntos de ruptura (breakpoints) en el editor.

Después de pedir una simulación, si todo va correctamente (canSimulate) nos permitirá ejecutar nuestro código, en caso fallo, el campo de errors nos reportará los distintos fallos puede ocurrir en nuestro código y que impidan su ejecución.

export type TypeSimulationInitRequest = {
  id:           string;
  filename:     string;
  date:         string;
  content:      string;

  breakpoints:  TypeLine[];
  registers:    TypeRegisterToUpdate[];
  memory:       TypeMemoryToUpdate[];
};

export type TypeSimulationInitResponse = {
  filename:             string;
  id:                   string;
  date:                 string;
  lines:                number;
  canSimulate:          boolean;
  errors:               TypeErrorInCode[];

  machineDirectives:    TypeDirectiveData[];
  machineInstructions:  TypeInstructionsData[];
  runner:               TypeSimulationStep[];
};
Clone this wiki locally