Servidor de lenguaje VSCode - Nodo
Este repositorio contiene el código para los siguientes módulos npm:
- vscode-languageclient : módulo npm para hablar con un servidor de lenguaje VSCode desde una extensión VSCode:
- vscode-languageserver : módulo npm para implementar un servidor de lenguaje VSCode usando Node.js como tiempo de ejecución:
- vscode-languageserver-textdocument : módulo npm para implementar documentos de texto utilizables en un servidor LSP usando Node.js como tiempo de ejecución:
- vscode-languageserver-protocol : la definición real del protocolo del servidor de idiomas en TypeScript:
- vscode-languageserver-types : tipos de datos utilizados por el cliente y el servidor del servidor de idiomas:
- vscode-jsonrpc : el protocolo de mensajes subyacente para comunicarse entre un cliente y un servidor:
Todos los módulos de npm se crean utilizando un Azure Pipeline. Su estado es:
Haga clic aquí para obtener un documento detallado sobre cómo utilizar estos módulos npm para implementar servidores de idiomas para VSCode.
Contribuyendo
Después de clonar el repositorio, ejecute npm install
para instalar dependencias y npm run symlink
para apuntar los paquetes de este repositorio entre sí.
Historia
Siguiente (10.0.0-next.* Cliente y 10.0.0-next.* Servidor)
- Actualizado a bibliotecas, compiladores y reglas de exportación de package.json más nuevos:
- Compilador actualizado a
5.5.x
- Las bibliotecas ahora dependen de NodeJS
20.9.0
y es2022
. Consulte también el mapeo de destino del nodo de TypeScript. -
vscode-jsonrpc
, vscode-languageserver-protocol
, vscode-languageclient
y vscode-languageserver
ahora usan la propiedad exports
en lugar de tener una propiedad main
y typings
. Es posible que esto deba adoptarse en los archivos tsconfig.json alrededor del module
y moduleResolution
. Las bibliotecas LSP actualmente utilizan node16
para ambos valores.
- Se agregó la propuesta CodeActionKind.RefactorMove
- compatibilidad con fragmentos en las ediciones del espacio de trabajo
- soporte para controlar el paralelismo de las solicitudes de despacho y notificación. Este es un cambio importante ya que permite a los controladores de notificaciones devolver una promesa de controlar esto.
- hacer que la implementación del navegador del cliente sea consistente con la implementación del nodo en términos de argumentos. Este es un cambio importante ya que reordenó las declaraciones de parámetros.
- Se agregó un
CancellationToken
al middleware del documento de presentación para que sea coherente con el otro middleware. Este es un cambio importante ya que agregó un parámetro requerido.
3.17.5 Protocolo, Cliente 9.0.1 y Servidor 9.0.1
3.17.4 Protocolo, 8.2.0 JSON-RPC 9.0.0 Cliente y 9.0.0 Servidor
- Se agregó una solicitud de finalización en línea propuesta.
- Se agregó la solicitud de rangos de formato propuestos.
- Se agregó una solicitud de actualización propuesta para rangos plegables. Esto cambió la forma de la función del rango de plegado ya que necesitamos exponer el emisor de eventos. El cambio se está rompiendo. Para llegar al proveedor ahora necesita hacer
client . getFeature ( lsclient . FoldingRangeRequest . method ) . getProvider ( document ) ?. provider ;
- varias correcciones de errores
Protocolo 3.17.4-next.0, JSON-RPC 8.2.0-next.0, Cliente 8.2.0-next.0 y Servidor 8.2.0-next.0.
- soporte de middleware para notificaciones y solicitudes generales, así como para capacidades de registro y cancelación de registro.
- varias correcciones de errores.
3.17.3 Protocolo, 8.1.0 JSON-RPC, 8.1.0 Cliente y 8.1.0 Servidor.
- soporte para controladores de mensajes personalizados
- varias correcciones de errores. Cabe destacar las correcciones en torno a problemas de pedidos de solicitudes con la sincronización completa de documentos.
3.17.2 Protocolo, 8.0.2 JSON-RPC, 8.0.2 Cliente y 8.0.2 Servidor.
- hacer que el cliente sea más robusto contra reinicios no deseados
- Se agregó un método LanguageClient#dispose para eliminar completamente un cliente.
- varias correcciones de errores.
Protocolo 3.17.0, 8.0.0 JSON-RPC, Cliente 8.0.0 y Servidor 8.0.0.
Los cambios específicos de la biblioteca son:
- Limpieza de los métodos
start
y stop
del cliente. Ambos métodos ahora devuelven una promesa ya que estos métodos son asíncronos. Este es un cambio importante desde que el inicio devolvió un desechable antes. Las extensiones ahora deberían implementar una función de desactivación en su archivo principal de extensión y devolver correctamente la promesa stop
de la llamada de desactivación. Como consecuencia, se eliminó onReady()
ya que las extensiones ahora pueden esperar la llamada start()
. Código antiguo como este
const client : LanguageClient = ... ;
client . start ( ) ;
await client . onReady ( ) ;
debería convertirse en:
const client : LanguageClient = ... ;
await client . start ( ) ;
- La notificación y el registro del controlador de solicitudes ahora pueden ocurrir antes de que se inicie el cliente. Esto garantiza que no se pierda ningún mensaje del servidor.
- Si una extensión envía una notificación o solicitud antes de que el cliente se inicie, el cliente se iniciará automáticamente.
- Todos los métodos
sendNotification
ahora devuelven una promesa. Era necesario devolver una promesa ya que la escritura real del mensaje en el transporte subyacente es asíncrona y un cliente, por ejemplo, no podía determinar si una notificación se entregó al transporte. Este es un cambio radical en el sentido de que podría resultar en una promesa flotante y podría ser señalado por un linter. - Todos los registros de controlador ahora devuelven un Desechable para permitir la cancelación del registro del controlador.
- el comportamiento de
handleFailedRequest
ha cambiado. En lugar de devolver un valor predeterminado cuando se recibe una excepción del servidor, el método ahora vuelve a generar el error. Esto garantiza que se utilice el comportamiento predeterminado de VS Code en caso de errores. El método también maneja RequestCancelled
y ServerCancelled
de la siguiente manera:- si recibe
ServerCancelled
y el cliente no canceló la solicitud, también lanza CancellationError para pedirle al cliente que vuelva a ejecutar la solicitud. - si recibe
RequestCancelled
, normalmente el cliente debería haber cancelado la solicitud y el código devolverá el valor predeterminado (de acuerdo con la mejor interpretación de la especificación 3.16). Si el cliente no ha cancelado interprete RequestCancelled
como ServerCancelled
.
- el siguiente controlador de un middleware de cliente ahora descarta los resultados del servidor si la solicitud ya se canceló en el lado del cliente al devolver el valor predeterminado de VS Code para el proveedor correspondiente (principalmente
null
). Este es un cambio importante ya que en versiones anteriores de la biblioteca, el middleware vería el resultado que VS Code tampoco utiliza. El cambio se realizó para ahorrar CPU y memoria al no convertir los resultados de respuesta no utilizados. - todas las funciones de conversión que toman una matriz ahora son asíncronas, producen rendimiento y toman un token de cancelación. Este es un cambio importante y se introdujo para evitar monopolizar el host de extensión durante las conversiones de tipos.
- el tipo de retorno de ErrorHandler#error y ErrorHandler#closed cambió de manera importante. Ahora admite devolver un mensaje opcional que se mostrará al usuario.
- Se agregó soporte para valores en línea.
- Se agregó soporte para sugerencias de incrustaciones.
- Se agregó soporte para jerarquías de tipos.
- Se agregó soporte para documentos de cuaderno.
Protocolo 3.16.0, 6.0.0 JSON-RPC, Cliente 7.0.0 y Servidor 7.0.0.
Para obtener una lista detallada de los cambios realizados en la versión 3.16.0 del protocolo, consulte el registro de cambios de la especificación 3.16.
Los cambios específicos de la biblioteca son:
- limpieza de tipos de Solicitud y Notificación. Se eliminó el parámetro genérico innecesario RO. Este es un cambio radical. Para adaptar simplemente elimine el argumento de tipo.
- Se agregó el nuevo concepto de RegistrationType que desacopla el método de registro del método de solicitud o notificación real. Este es un cambio importante para los implementadores de funciones personalizadas. Para adaptar, cambie el nombre de la propiedad
messages
a registrationType
y devuelva el RegistrationType
correspondiente. Además, elimine el primer parámetro del método register
. - limpieza de
ErrorCodes
. Los códigos de error específicos de LSP se movieron a un nuevo espacio de nombres LSPErrorCodes
. El espacio de nombres ErrorCodes
en jsonrpc
no está reservado correctamente para códigos de error específicos de JSON RPC. Este es un cambio radical. Para resolverlo, utilice LSPErrorCodes
en su lugar. - divida el código en común, nodo y navegador para permitir el uso de los módulos npm del servidor y del cliente LSP en un navegador web a través del paquete web. Este es un cambio importante y podría provocar errores de compilación/tiempo de ejecución si no se adopta. Cada módulo tiene ahora tres exportaciones diferentes que representan la división en común, nodo y navegador. Veamos
vscode-jsonrpc
para ver un ejemplo: (a) import vscode-jsonrpc
solo importará el código común, (b) import vscode-jsonrpcnode
importará el código común y de nodo y (c) import vscode-jsonrpcbrowser
importará el código común y del navegador. - Se agregó soporte para controlar la estructura de parámetros al enviar solicitudes y notificaciones en
vscode-jsonrpc
. La estructura de parámetros se puede controlar utilizando el argumento de parámetros adicionales parameterStructures
al crear un tipo de solicitud o notificación o al enviar una solicitud o notificación sin tipo utilizando la función sendRequest
o sendNotification
. El valor predeterminado es ParameterStructures.auto
, que hace lo siguiente:- use
byPosition
para mensajes con cero o más de un parámetro - para un parámetro usó
byName
para parámetros que son literales de objeto. Utiliza byPosition
para todos los demás parámetros.
3.15.3 Protocolo, cliente 6.1.x y servidor 6.1.x
- Pequeños cambios en el soporte propuesto para tokens semánticos.
3.15.2 Protocolo, cliente 6.1.x y servidor 6.1.x
- Soporte propuesto para tokens semánticos.
Protocolo 3.15.0, Cliente 6.0.0 y Servidor 6.0.0
- Soporte de progreso del trabajo realizado y progreso de resultados parciales.
- Implementación propuesta para jerarquías de llamadas.
- Se agregó el protocolo
SelectionRangeRequest
:- Nuevas API en tipos:
SelectionRange
- Nuevas API en el protocolo:
SelectionRangeRequest
, SelectionRangeParams
, SelectionRangeClientCapabilities
, SelectionRangeServerCapabilities
, SelectionRangeProviderOptions
.
- Soporte para implementaciones de documentos de texto personalizados:
- Nuevo paquete npm
vscode-languageserver-textdocument
que incluye una implementación de documento de texto estándar con actualización incremental básica. El servidor ahora necesita prerrequisitar este paquete npm. - Implementación de documentos de texto obsoletos en tipos.
- esto resultó en una pequeña rotura en el lado del servidor. En lugar de crear
new TextDocuments
, ahora debe pasar una configuración de documento de texto para proporcionar devoluciones de llamada para crear y actualizar un documento de texto. Aquí hay ejemplos en TypeScript y JavaScript.
import { TextDocuments } from 'vscode-languageserver' ;
import { TextDocument } from 'vscode-languageserver-textdocument' ;
const documents = new TextDocuments ( TextDocument ) ;
const server = require ( "vscode-languageserver" ) ;
const textDocument = require ( "vscode-languageserver-textdocument" ) ;
const documents = new server . TextDocuments ( textDocument . TextDocument ) ;
5.1.1 Cliente
- Corrige que el cliente [textDocument/rename] no obedece
RenameOptions
al registrar el proveedor
Cliente 5.1.0 y Servidor 5.1.0
- Adoptar la versión 3.13.0 del protocolo
3.13.0 Protocolo
-
FoldingRangeRequestParam
ha cambiado de nombre a 'FoldingRangeParams' ( FoldingRangeRequestParam
todavía se proporciona para compatibilidad con versiones anteriores) - Se agregó soporte para operaciones de creación, cambio de nombre y eliminación de archivos en ediciones del espacio de trabajo.
Cliente 5.0.0 y Servidor 5.0.0
- Haga que el cliente funcione con Electron 2.x. que se utiliza desde VS Code 1.26.x
- Verifique que la versión esperada del cliente especificada en
engines.vscode
en el archivo package.json
coincida con la versión de VS Code en la que se ejecuta el cliente.
Cliente 4.4.0 y Servidor 4.4.0 y Protocolo 3.10.0
- Implementar un esquema de documento jerárquico
-
Color
, ColorInformation
, ColorPresentation
movidos a Tipos - Se agregó el protocolo
FoldingRangeRequest
:- Nuevas API en tipos:
FoldingRange
, FoldingRangeKind
- Nuevas API en el protocolo:
FoldingRangeRequest
, FoldingRangeRequestParam
, FoldingRangeClientCapabilities
, FoldingRangeServerCapabilities
, FoldingRangeProviderOptions
,
Cliente 4.3.0 y Servidor 4.3.0 y Protocolo 3.9.0
- Agregue soporte para la propiedad
preselect
en CompletionItem
Cliente 4.2.0 y Servidor 4.2.0 y Protocolo 3.8.0
- Agregar clase CodeAction
- Agregue soporte para el literal de acción de código como valor de retorno de la solicitud textDocument/codeAction
4.1.4 Cliente y 4.1.3 Servidor
- Cliente: mensajes duplicados enviados después de reiniciar el servidor
4.1.1 Cliente
- Información sobre la caída del servidor perdida porque el canal de salida está cerrado
4.1.0 Cliente y Servidor
Agregue soporte para información relacionada en diagnósticos.
Se tragaron excepciones de inicialización
Los errores de cambio de nombre aún no se muestran en VSCode
terminateProcess.sh no se envía en el paquete dist
Agregue middleware para interceptar textDocument/publishDiagnostics
4.0.1 Cliente
- Se eliminó la declaración de registro de consola innecesaria.
4.0.0 Servidor y Cliente
- implementó las últimas incorporaciones al protocolo. Cabe destacar el contexto de finalización, el elemento de finalización extensible y el tipo de símbolo, así como el soporte de rebajas para el elemento de finalización y la ayuda de firma. Se pasó a la versión 4.0.0 ya que la introducción del contexto de finalización requirió un cambio importante en el middleware del cliente. La antigua firma:
provideCompletionItem?: ( this : void , document : TextDocument , position : VPosition , token : CancellationToken , next : ProvideCompletionItemsSignature ) => ProviderResult < VCompletionItem [ ] | VCompletionList > ;
contiene ahora un context
de argumento adicional:
provideCompletionItem?: ( this : void , document : TextDocument , position : VPosition , context : VCompletionContext , token : CancellationToken , next : ProvideCompletionItemsSignature ) => ProviderResult < VCompletionItem [ ] | VCompletionList > ;
- Correcciones destacadas:
- Obtener valor después de ejecutar el comando mediante programación
- Experimentar recursividad infinita en este código en VSCode 1.18.1
- LanguageClient#handleConnectionClosed no se reinicia si this._resolvedConnection.dispose() arroja
6.0.0 Servidor y Cliente
- Pasar al protocolo 3.15.0
- mover el objetivo JS a ES2017
3.15.0 Tipos y protocolo
3.6.1 Tipos
- ESM agregado como formato de salida (para Webpack y otros consumidores de ESM)
3.5.0 Servidor y Cliente
- Permitir que el cliente inicie el servidor en modo desconectado. Si el servidor se ejecuta de forma independiente, el cliente no supervisará el proceso del servidor y lo finalizará al apagarlo.
- corrección de errores.
3.4.0 Servidor y Cliente
- Se ha agregado un nuevo módulo npm
vscode-languageserver-protocol
que contiene las definiciones de protocolo en TypeScript. Este módulo ahora se comparte entre el cliente y el servidor. - Se ha agregado soporte para el protocolo propuesto a los módulos npm
protocol
, client
y server
. El protocolo propuesto está sujeto a cambios incluso si se envía en una versión estable de los módulos npm. - Se ha agregado el protocolo propuesto para las siguientes características:
- configuración : soporte para recuperar los ajustes de configuración enviando una solicitud desde el servidor al cliente
- workspaceFolders : soporte para manejar más de una carpeta raíz por espacio de trabajo
- colorProvider : soporte para calcular rangos de color para un documento
3.3.0 Servidor y Cliente
- dividió el cliente en un cliente base y un cliente principal para admitir la reutilización de la implementación del cliente en otros entornos.
- hizo que el procesamiento de la solicitud fuera más asíncrono. Entonces, en lugar de procesar una solicitud inmediatamente cuando el código es notificado mediante una devolución de llamada de Node.js, la solicitud ahora se coloca en una cola y se procesa desde la cola. Esto permite colocar o plegar mejor los eventos si es necesario.
- correcciones de errores ver abril y mayo
3.2.1 Servidor y Cliente
- Se corrigió el uso de un nombre incorrecto para el método
client/registerFeature
: debería ser client/registerCapability
3.2.0 Servidor y Cliente
- hizo que
WorkspaceEdit
se ajustara a la versión 3.x de la especificación y fuera compatible con la versión 2.x de la biblioteca. - Se agregó el código de error
RequestCancelled
. - Se corrigió que nodePath no funcionara (vscode-tslint)
- La actualización fija de 3.0.4/3.0.5 a 3.1.0 rompe mi extensión
3.1.0 Servidor y Cliente
- agregar soporte para canalizaciones con nombre y transporte de archivos de socket
- Se solucionó el problema de bloqueo con node-ipc.
3.0.5 Servidor y 3.0.4 Cliente
-
Files.uriToFilePath
quedó obsoleto en favor del módulo npm vscode-uri, que proporciona una implementación más completa de URI para VS Code. - hizo que
rootPath
fuera opcional ya que está obsoleto en 3.x.
3.0.3: Cliente, Servidor y JSON-RPC
Nuevas características
- Se movieron todas las bibliotecas a TypeScript 2.xx.
- El cliente y el servidor están compilados en ES6. JSON-RPC todavía está compilado en ES5.
- JSON-RPC admite n solicitudes de parámetros e invocación de notificaciones.
- Soporte para la versión 3.0 del protocolo Language Server. Algunos aspectos destacados son:
- Soporte para indicadores de funciones.
- Soporte para registro dinámico. En la versión 2.x de la biblioteca, un servidor anunciaba sus capacidades de forma estática. En 3.x, el servidor ahora puede registrar y cancelar el registro dinámicamente de controladores de capacidades utilizando las nuevas solicitudes
client/registerCapability
y client/unregisterCapability
. - Soporte para delegar la ejecución de comandos a través de un nuevo
workspace/executeCommand
al servidor.
- Soporte para fragmentos en elementos de finalización:
- Nuevo tipo
InsertTextFormat
- CompletionItem.insertTextFormat controla si la prueba insertada se interpreta como texto sin formato o como fragmento.
Cambios importantes:
- Para garantizar la entrega ordenada de notificaciones y solicitudes, el cliente de idioma ahora genera si se llama a sendRequest, onRequest, sendNotification o onNotification antes de que el cliente esté listo. Utilice la promesa onReady() para esperar hasta que el cliente esté listo.
let client = new LanguageClient ( ... ) ;
client . onReady ( ) . then ( ( ) => {
client . onNotification ( ... ) ;
client . sendRequest ( ... ) ;
) ;
- Se eliminaron las funciones de módulo obsoletas en los convertidores code2Protocol y protocol2Code. Utilice las propiedades correspondientes en la instancia de LanguageClient para obtener acceso a los mismos convertidores utilizados por LanguageClient.
// Old
import { Protocol2Code , ... } from 'vscode-languageclient' ;
Protocol2Code . asTextEdits ( edits ) ;
// New
let client = new LanguageClient ( ... ) ;
client . protocol2CodeConverter . asTextEdits ( edits ) ;
- Debido al uso de TypeScript 2.xx y a las diferencias en la generación de d.ts, los usuarios de la nueva versión también deben pasar a TypeScript 2.xx. Normalmente,
LanguageClient
se utiliza en una extensión de VS Code. Puede encontrar pasos detallados sobre cómo actualizar una extensión de VS Code a TypeScript 2.xx aquí. -
activeSignature
y activeParameter
se declararon incorrectamente como opcionales en SignatureHelp
. Ahora son obligatorios. - el archivo
protocol.ts
utilizó tipos de enumeración en 2.x. Sin embargo, el protocolo en sí se basa en números, ya que no se puede hacer ninguna suposición sobre la presencia de un tipo de enumeración en el lenguaje de implementación. Para que esto quede más claro, la enumeración se reemplazó por tipos numéricos con una definición de tipo literal. Esto podría provocar errores de compilación si se asignó un número directamente a un tipo de enumeración anterior sin una verificación de rango adecuada. - Los tipos de solicitud y notificación ahora son clases en lugar de interfaces. Además, ahora toman un argumento de tipo adicional para escribir las opciones de registro para el registro dinámico. Adoptar ese cambio es bastante fácil. Simplemente cambie
RequestType
o NotificationType
y agregue void como tipo de opción de registro. Recuerde actualizar esto tanto en el lado del cliente como en el del servidor:
// Old
export namespace MyRequest {
export const type : RequestType < MyParams , MyResult , void > = { get method ( ) { return 'myRequest' ; } } ;
}
export namespace MyNotification {
export const type : NotificationType < MyParams > = { get method ( ) { return 'myNotification' ; } } ;
}
// New
export namespace MyRequest {
export const type = new RequestType < MyParams , MyResult , void , void > ( 'myRequest' ) ;
}
export namespace MyNotification {
export const type = new NotificationType < MyParams , void > ( 'myNotification' ) ;
}
2.6.0: Cliente y servidor
- Soporte para proveedores de enlaces de documentos
- Soporte para ediciones de texto adicionales y comandos en elementos de finalización.
2.5.0: Cliente y Servidor
- Mejor manejo de errores en el lado del cliente.
- Eventos para iniciar y detener el servidor.
- Las opciones de inicialización se pueden proporcionar como una función.
- Soporte para codificación stdio/stderr.
- Soporte para convertir URI entre el cliente y el servidor.
- El registro de conexión del servidor.consola ahora aparece en el canal de salida correspondiente en lugar de en la consola del desarrollador.
- Si se utiliza un canal de comunicación que no es stdio entre el cliente y el servidor, el stdio del servidor se redirige al canal de salida.
- Un cliente ahora puede tener una identificación y un nombre.
2.4.0 Cliente y Servidor
- Tipos de datos como Range, Position, TextDocument, Hover, CompletionItem... extraídos al nuevo módulo de nodo vscode-languageserver-types . El nuevo módulo de nodo se comparte entre el servidor y el cliente y también lo pueden utilizar bibliotecas de servicios de idiomas que quieran utilizar los mismos tipos de datos.
2.3.0: solo cliente
- el cliente ahora reinicia el servidor si el servidor falla sin enviar una notificación de salida previa. La estrategia utilizada para reiniciar el servidor se puede conectar (consulte
LanguageClientOptions.errorHandler
). La estrategia predeterminada reinicia el servidor a menos que falle 5 veces o más en los últimos 3 minutos.
2.0: Puede encontrar una descripción detallada de la versión 2.0 aquí. Un resumen de los cambios:
- soporte para cancelación de solicitudes. La cancelación se vincula automáticamente a los tokens de cancelación de VSCode
- notificación de guardar documento.
- Los documentos de texto sincronizados llevan el número de versión del documento de texto de VSCode
1.1.x: Proporciona todas las funciones de servicios de idiomas disponibles en el host de extensión a través del protocolo de cliente/servidor de idiomas. Funciones agregadas:
- Acciones de código: proporciona acciones para solucionar problemas de diagnóstico.
- Lente de código: proporciona comandos que se muestran junto con el texto fuente.
- Formato: documento completo, rangos de documentos y formato según el tipo.
- Cambiar nombre de refactorización: proporciona cambio de nombre de símbolos.
1.0.x: Versión que brinda soporte para las siguientes características:
- Transportes: stdio y node IPC se pueden utilizar como transporte.
- Sincronización de documentos: sincronización incremental y de documentos de texto completo.
- Sincronización de configuración: sincronización de los ajustes de configuración con el servidor.
- Eventos de archivos: sincronización de eventos de archivos con el servidor.
- Código completo: proporciona listas de códigos completos.
- Aspectos destacados del documento: resalta todos los símbolos "iguales" en un documento de texto.
- Al pasar el cursor: proporciona información al pasar el cursor sobre un símbolo seleccionado en un documento de texto.
- Ayuda para firma: proporciona ayuda para la firma de un símbolo seleccionado en un documento de texto.
- Ir a definición: proporciona soporte de definición de ir a un símbolo seleccionado en un documento de texto.
- Buscar referencias: busca todas las referencias de todo el proyecto para un símbolo seleccionado en un documento de texto.
- Listar símbolos de documento: enumera todos los símbolos definidos en un documento de texto.
- Listar símbolos del espacio de trabajo: enumera todos los símbolos de todo el proyecto.
0.10.x: Versiones iniciales para construir una buena API para el lado del cliente y del servidor
Licencia
MIT