@@ -15,7 +15,7 @@ export { TextDocument } from 'vscode-languageserver-textdocument';
1515
1616import type { Diagnostic , Range } from 'vscode-languageserver-types' ;
1717import type { FileSystemProvider } from './file-system-provider.js' ;
18- import type { ParseResult } from '../parser/langium-parser.js' ;
18+ import type { ParseResult , ParserOptions } from '../parser/langium-parser.js' ;
1919import type { ServiceRegistry } from '../service-registry.js' ;
2020import type { LangiumSharedCoreServices } from '../services.js' ;
2121import type { AstNode , AstNodeDescription , Mutable , Reference } from '../syntax-tree.js' ;
@@ -126,7 +126,7 @@ export interface LangiumDocumentFactory {
126126 /**
127127 * Create a Langium document from a `TextDocument` (usually associated with a file).
128128 */
129- fromTextDocument < T extends AstNode = AstNode > ( textDocument : TextDocument , uri ?: URI ) : LangiumDocument < T > ;
129+ fromTextDocument < T extends AstNode = AstNode > ( textDocument : TextDocument , uri ?: URI , options ?: ParserOptions ) : LangiumDocument < T > ;
130130 /**
131131 * Create a Langium document from a `TextDocument` asynchronously. This action can be cancelled if a cancellable parser implementation has been provided.
132132 */
@@ -135,7 +135,7 @@ export interface LangiumDocumentFactory {
135135 /**
136136 * Create an Langium document from an in-memory string.
137137 */
138- fromString < T extends AstNode = AstNode > ( text : string , uri : URI ) : LangiumDocument < T > ;
138+ fromString < T extends AstNode = AstNode > ( text : string , uri : URI , options ?: ParserOptions ) : LangiumDocument < T > ;
139139 /**
140140 * Create a Langium document from an in-memory string asynchronously. This action can be cancelled if a cancellable parser implementation has been provided.
141141 */
@@ -178,42 +178,42 @@ export class DefaultLangiumDocumentFactory implements LangiumDocumentFactory {
178178 return this . createAsync < T > ( uri , content , cancellationToken ) ;
179179 }
180180
181- fromTextDocument < T extends AstNode = AstNode > ( textDocument : TextDocument , uri ?: URI ) : LangiumDocument < T > ;
181+ fromTextDocument < T extends AstNode = AstNode > ( textDocument : TextDocument , uri ?: URI , options ?: ParserOptions ) : LangiumDocument < T > ;
182182 fromTextDocument < T extends AstNode = AstNode > ( textDocument : TextDocument , uri : URI | undefined , cancellationToken : CancellationToken ) : Promise < LangiumDocument < T > > ;
183- fromTextDocument < T extends AstNode = AstNode > ( textDocument : TextDocument , uri ?: URI , cancellationToken ?: CancellationToken ) : LangiumDocument < T > | Promise < LangiumDocument < T > > {
183+ fromTextDocument < T extends AstNode = AstNode > ( textDocument : TextDocument , uri ?: URI , token ?: CancellationToken | ParserOptions ) : LangiumDocument < T > | Promise < LangiumDocument < T > > {
184184 uri = uri ?? URI . parse ( textDocument . uri ) ;
185- if ( cancellationToken ) {
186- return this . createAsync < T > ( uri , textDocument , cancellationToken ) ;
185+ if ( CancellationToken . is ( token ) ) {
186+ return this . createAsync < T > ( uri , textDocument , token ) ;
187187 } else {
188- return this . create < T > ( uri , textDocument ) ;
188+ return this . create < T > ( uri , textDocument , token ) ;
189189 }
190190 }
191191
192- fromString < T extends AstNode = AstNode > ( text : string , uri : URI ) : LangiumDocument < T > ;
192+ fromString < T extends AstNode = AstNode > ( text : string , uri : URI , options ?: ParserOptions ) : LangiumDocument < T > ;
193193 fromString < T extends AstNode = AstNode > ( text : string , uri : URI , cancellationToken : CancellationToken ) : Promise < LangiumDocument < T > > ;
194- fromString < T extends AstNode = AstNode > ( text : string , uri : URI , cancellationToken ?: CancellationToken ) : LangiumDocument < T > | Promise < LangiumDocument < T > > {
195- if ( cancellationToken ) {
196- return this . createAsync < T > ( uri , text , cancellationToken ) ;
194+ fromString < T extends AstNode = AstNode > ( text : string , uri : URI , token ?: CancellationToken | ParserOptions ) : LangiumDocument < T > | Promise < LangiumDocument < T > > {
195+ if ( CancellationToken . is ( token ) ) {
196+ return this . createAsync < T > ( uri , text , token ) ;
197197 } else {
198- return this . create < T > ( uri , text ) ;
198+ return this . create < T > ( uri , text , token ) ;
199199 }
200200 }
201201
202202 fromModel < T extends AstNode = AstNode > ( model : T , uri : URI ) : LangiumDocument < T > {
203203 return this . create < T > ( uri , { $model : model } ) ;
204204 }
205205
206- protected create < T extends AstNode = AstNode > ( uri : URI , content : string | TextDocument | { $model : T } ) : LangiumDocument < T > {
206+ protected create < T extends AstNode = AstNode > ( uri : URI , content : string | TextDocument | { $model : T } , options ?: ParserOptions ) : LangiumDocument < T > {
207207 if ( typeof content === 'string' ) {
208- const parseResult = this . parse < T > ( uri , content ) ;
208+ const parseResult = this . parse < T > ( uri , content , options ) ;
209209 return this . createLangiumDocument < T > ( parseResult , uri , undefined , content ) ;
210210
211211 } else if ( '$model' in content ) {
212212 const parseResult = { value : content . $model , parserErrors : [ ] , lexerErrors : [ ] } ;
213213 return this . createLangiumDocument < T > ( parseResult , uri ) ;
214214
215215 } else {
216- const parseResult = this . parse < T > ( uri , content . getText ( ) ) ;
216+ const parseResult = this . parse < T > ( uri , content . getText ( ) , options ) ;
217217 return this . createLangiumDocument ( parseResult , uri , content ) ;
218218 }
219219 }
@@ -300,9 +300,9 @@ export class DefaultLangiumDocumentFactory implements LangiumDocumentFactory {
300300 return document ;
301301 }
302302
303- protected parse < T extends AstNode > ( uri : URI , text : string ) : ParseResult < T > {
303+ protected parse < T extends AstNode > ( uri : URI , text : string , options ?: ParserOptions ) : ParseResult < T > {
304304 const services = this . serviceRegistry . getServices ( uri ) ;
305- return services . parser . LangiumParser . parse < T > ( text ) ;
305+ return services . parser . LangiumParser . parse < T > ( text , options ) ;
306306 }
307307
308308 protected parseAsync < T extends AstNode > ( uri : URI , text : string , cancellationToken : CancellationToken ) : Promise < ParseResult < T > > {
0 commit comments