• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16import { KBoolean, KInt, KNativePointer, KUInt } from './InteropTypes';
17import { unpackString, VariantTypes } from './private';
18import { throwError } from './utils';
19import { isNullPtr } from './Wrapper';
20import { global } from './global';
21import { NativePtrDecoder } from './Platform';
22
23enum HierarchyType { OTHERS, INTERFACE, CLASS };
24
25export enum SetterStyle {
26  NONE = 0,
27  SETTER,
28  GETTER
29}
30
31export enum AccessModifierStyle {
32  PUBLIC = 0,
33  PROTECTED,
34  PRIVATE
35}
36
37enum ClassRelationKind { UNKNOWN, INTERFACE, CLASS, FIELD, METHOD, PROPERTY };
38
39export enum ClassDefinitionStyle {
40  FIELD = 0,
41  METHOD
42}
43
44export abstract class LspNode {
45  readonly peer: KNativePointer;
46
47  protected constructor(peer: KNativePointer) {
48    if (isNullPtr(peer)) {
49      throwError('nullptr from peer in lspnode constuctor');
50    }
51    this.peer = peer;
52  }
53}
54
55export class LspPosition extends LspNode {
56  readonly line: number;
57  readonly character: number;
58  constructor(peer: KNativePointer) {
59    super(peer);
60    this.line = global.es2panda._getPosLine(peer);
61    this.character = global.es2panda._getPosChar(peer);
62  }
63}
64
65export class LspRange extends LspNode {
66  readonly start: LspPosition;
67  readonly end: LspPosition;
68  constructor(peer: KNativePointer) {
69    super(peer);
70    this.start = new LspPosition(global.es2panda._getRangeStart(peer));
71    this.end = new LspPosition(global.es2panda._getRangeEnd(peer));
72  }
73}
74
75export enum LspDiagSeverity {
76  Error = 1,
77  Warning = 2,
78  Information = 3,
79  Hint = 4
80}
81
82export enum LspDiagTag {
83  Unnecessary = 1,
84  Deprecated = 2
85}
86
87export class LspLocation extends LspNode {
88  constructor(peer: KNativePointer) {
89    super(peer);
90    this.uri = unpackString(global.es2panda._getLocUri(peer));
91    this.range = new LspRange(global.es2panda._getLocRange(peer));
92  }
93  readonly uri: string;
94  readonly range: LspRange;
95}
96
97export class LspRelatedInfo extends LspNode {
98  constructor(peer: KNativePointer) {
99    super(peer);
100    this.message = unpackString(global.es2panda._getRelatedInfoMsg(peer));
101    this.location = new LspLocation(global.es2panda._getRelatedInfoLoc(peer));
102  }
103  readonly message: string;
104  readonly location: LspLocation;
105}
106
107export class LspCodeDescription extends LspNode {
108  constructor(peer: KNativePointer) {
109    super(peer);
110    this.href = unpackString(global.es2panda._getCodeDescriptionHref(peer));
111  }
112  readonly href: string;
113}
114
115export class LspDiagnosticNode extends LspNode {
116  constructor(peer: KNativePointer) {
117    super(peer);
118    this.message = unpackString(global.es2panda._getDiagMsg(peer));
119    this.source = unpackString(global.es2panda._getDiagSource(peer));
120    this.range = new LspRange(global.es2panda._getDiagRange(peer));
121    this.tags = new NativePtrDecoder()
122      .decode(global.es2panda._getDiagTags(peer))
123      .map((elPeer: KNativePointer) => elPeer as KInt);
124    this.relatedInfo = new NativePtrDecoder()
125      .decode(global.es2panda._getDiagRelatedInfo(peer))
126      .map((elPeer: KNativePointer) => new LspRelatedInfo(elPeer));
127    let codeVarPtr = global.es2panda._getDiagCode(peer);
128    if (global.interop._getTypeOfVariant(codeVarPtr) === VariantTypes.VARIANT_INT) {
129      this.code = global.interop._getIntFromVariant(codeVarPtr);
130    } else {
131      this.code = unpackString(global.interop._getStringFromVariant(codeVarPtr));
132    }
133    let dataPtr = global.es2panda._getDiagData(peer);
134    if (global.interop._getTypeOfVariant(dataPtr) === VariantTypes.VARIANT_INT) {
135      this.data = global.interop._getIntFromVariant(dataPtr);
136    } else {
137      this.data = unpackString(global.interop._getStringFromVariant(dataPtr));
138    }
139    this.severity = global.es2panda._getDiagSeverity(peer);
140    this.codeDescription = new LspCodeDescription(global.es2panda._getDiagCodeDescription(peer));
141  }
142  readonly source: String;
143  readonly message: String;
144  readonly range: LspRange;
145  readonly codeDescription: LspCodeDescription;
146  readonly severity: LspDiagSeverity;
147  readonly tags: LspDiagTag[];
148  readonly relatedInfo: LspRelatedInfo[];
149  readonly code: number | String;
150  readonly data: number | string;
151}
152
153export class LspDiagsNode extends LspNode {
154  constructor(peer: KNativePointer) {
155    super(peer);
156    this.diagnostics = new NativePtrDecoder()
157      .decode(global.es2panda._getDiags(this.peer))
158      .map((elPeer: KNativePointer) => {
159        return new LspDiagnosticNode(elPeer);
160      });
161  }
162  readonly diagnostics: LspDiagnosticNode[];
163}
164
165export class LspDefinitionData extends LspNode {
166  constructor(peer: KNativePointer) {
167    super(peer);
168    this.fileName = unpackString(global.es2panda._getFileNameFromDef(peer));
169    this.start = global.es2panda._getStartFromDef(peer);
170    this.length = global.es2panda._getLengthFromDef(peer);
171  }
172  readonly fileName: String;
173  readonly start: KInt;
174  readonly length: KInt;
175}
176
177export class LspReferenceData extends LspNode {
178  constructor(peer: KNativePointer) {
179    super(peer);
180    this.fileName = unpackString(global.es2panda._getReferenceFileName(peer));
181    this.start = global.es2panda._getReferenceStart(peer);
182    this.length = global.es2panda._getReferenceLength(peer);
183  }
184  readonly fileName: String;
185  readonly start: KInt;
186  readonly length: KInt;
187}
188
189export class LspDeclInfo extends LspNode {
190  constructor(peer: KNativePointer) {
191    super(peer);
192    this.fileName = unpackString(global.es2panda._getDeclInfoFileName(peer));
193    this.fileText = unpackString(global.es2panda._getDeclInfoFileText(peer));
194  }
195  readonly fileName: String;
196  readonly fileText: String;
197}
198
199export class LspReferences extends LspNode {
200  constructor(peer: KNativePointer) {
201    super(peer);
202    this.referenceInfos = new NativePtrDecoder()
203      .decode(global.es2panda._getReferenceInfos(this.peer))
204      .map((elPeer: KNativePointer) => {
205        return new LspReferenceData(elPeer);
206      });
207  }
208  readonly referenceInfos: LspReferenceData[];
209}
210
211export class LspTextSpan extends LspNode {
212  constructor(peer: KNativePointer) {
213    super(peer);
214    this.start = global.es2panda._getTextSpanStart(peer);
215    this.length = global.es2panda._getTextSpanLength(peer);
216  }
217  readonly start: KInt;
218  readonly length: KInt;
219}
220
221export interface TextSpan {
222  start: KInt;
223  length: KInt;
224}
225
226export class LspSymbolDisplayPart extends LspNode {
227  constructor(peer: KNativePointer) {
228    super(peer);
229    this.text = unpackString(global.es2panda._getDisplayPartsText(peer));
230    this.kind = unpackString(global.es2panda._getDisplayPartsKind(peer));
231  }
232  readonly text: String;
233  readonly kind: String;
234}
235
236export class LspClassHierarchyItem extends LspNode {
237  constructor(peer: KNativePointer, style: ClassDefinitionStyle) {
238    super(peer);
239    this.style = style;
240    this.detail = unpackString(global.es2panda._getDetailFromClassHierarchyItem(this.peer));
241    this.accessModifier = global.es2panda._getAccessModifierStyleFromClassHierarchyItem(this.peer);
242  }
243  readonly detail: string;
244  readonly accessModifier: AccessModifierStyle;
245  readonly style: ClassDefinitionStyle;
246}
247
248export class LspClassMethodItem extends LspClassHierarchyItem {
249  constructor(peer: KNativePointer) {
250    super(peer, ClassDefinitionStyle.METHOD);
251    this.setter = global.es2panda._getSetterStyleFromClassMethodItem(this.peer);
252  }
253  readonly setter: SetterStyle;
254}
255
256export class LspClassPropertyItem extends LspClassHierarchyItem {
257  constructor(peer: KNativePointer) {
258    super(peer, ClassDefinitionStyle.FIELD);
259  }
260}
261
262export class LspClassHierarchyInfo extends LspNode {
263  constructor(peer: KNativePointer) {
264    super(peer);
265    this.className = unpackString(global.es2panda._getClassNameFromClassHierarchyInfo(this.peer));
266    this.methodItems = new NativePtrDecoder()
267      .decode(global.es2panda._getMethodItemsFromClassHierarchyInfo(this.peer))
268      .map((elPeer: KNativePointer) => {
269        return new LspClassMethodItem(elPeer);
270      });
271    this.fieldItems = new NativePtrDecoder()
272      .decode(global.es2panda._getPropertyItemsFromClassHierarchyInfo(this.peer))
273      .map((elPeer: KNativePointer) => {
274        return new LspClassPropertyItem(elPeer);
275      });
276  }
277  readonly className: string;
278  readonly methodItems: LspClassMethodItem[];
279  readonly fieldItems: LspClassPropertyItem[];
280}
281
282export class LspClassHierarchy extends LspNode {
283  constructor(peer: KNativePointer) {
284    super(peer);
285    this.infos = new NativePtrDecoder()
286      .decode(global.es2panda._castToClassHierarchyInfos(this.peer))
287      .map((elPeer: KNativePointer) => {
288        return new LspClassHierarchyInfo(elPeer);
289      });
290  }
291  readonly infos: LspClassHierarchyInfo[];
292}
293
294export class LspClassPropertyInfo extends LspNode {
295  constructor(peer: KNativePointer) {
296    super(peer);
297    this.fieldsInfo = new NativePtrDecoder()
298      .decode(global.es2panda._getFieldsInfoFromPropertyInfo(peer))
299      .map((elPeer: KNativePointer) => {
300        return new FieldsInfo(elPeer);
301      });
302  }
303  readonly fieldsInfo: FieldsInfo[];
304}
305
306export class FieldsInfo extends LspNode {
307  constructor(peer: KNativePointer) {
308    super(peer);
309    this.name = unpackString(global.es2panda._getNameFromPropertyInfo(peer));
310    this.properties = new NativePtrDecoder()
311      .decode(global.es2panda._getFieldListPropertyFromPropertyInfo(peer))
312      .map((elPeer: KNativePointer) => {
313        return new FieldListProperty(elPeer);
314      });
315  }
316  readonly name: String;
317  readonly properties: FieldListProperty[];
318}
319
320export class FieldListProperty extends LspNode {
321  constructor(peer: KNativePointer) {
322    super(peer);
323    this.kind = unpackString(global.es2panda._getKindFromPropertyInfo(peer));
324    this.modifierKinds = new NativePtrDecoder()
325      .decode(global.es2panda._getModifierKindsFromPropertyInfo(peer))
326      .map((elPeer: KNativePointer) => {
327        return new String(elPeer);
328      });
329    this.displayName = unpackString(global.es2panda._getDisplayNameFromPropertyInfo(peer));
330    this.start = global.es2panda._getStartFromPropertyInfo(peer);
331    this.end = global.es2panda._getEndFromPropertyInfo(peer);
332  }
333  readonly kind: String;
334  readonly modifierKinds: String[];
335  readonly displayName: String;
336  readonly start: number;
337  readonly end: number;
338}
339
340export class LspClassHierarchies extends LspNode {
341  constructor(peer: KNativePointer) {
342    super(peer);
343    this.classHierarchies = new NativePtrDecoder()
344      .decode(global.es2panda._getClassHierarchyList(peer))
345      .map((elPeer: KNativePointer) => {
346        return new ClassHierarchyItemInfo(elPeer);
347      });
348  }
349  readonly classHierarchies: ClassHierarchyItemInfo[];
350}
351
352export class ClassHierarchyItemInfo extends LspNode {
353  constructor(peer: KNativePointer) {
354    super(peer);
355    this.pos = global.es2panda._getPosFromClassHierarchyItemInfo(peer);
356    this.kind = global.es2panda._getKindFromClassHierarchyItemInfo(peer);
357    this.description = unpackString(global.es2panda._getDescriptionFromClassHierarchyItemInfo(peer));
358    this.overridden = new NativePtrDecoder()
359      .decode(global.es2panda._getOverriddenFromClassHierarchyItemInfo(peer))
360      .map((elPeer: KNativePointer) => {
361        return new ClassRelationDetails(elPeer);
362      });
363    this.overriding = new NativePtrDecoder()
364      .decode(global.es2panda._getOverridingFromClassHierarchyItemInfo(peer))
365      .map((elPeer: KNativePointer) => {
366        return new ClassRelationDetails(elPeer);
367      });
368    this.implemented = new NativePtrDecoder()
369      .decode(global.es2panda._getImplementedFromClassHierarchyItemInfo(peer))
370      .map((elPeer: KNativePointer) => {
371        return new ClassRelationDetails(elPeer);
372      });
373    this.implementing = new NativePtrDecoder()
374      .decode(global.es2panda._getImplementingFromClassHierarchyItemInfo(peer))
375      .map((elPeer: KNativePointer) => {
376        return new ClassRelationDetails(elPeer);
377      });
378  }
379  readonly pos: number;
380  readonly kind: ClassRelationKind;
381  readonly description: String;
382  readonly overridden: ClassRelationDetails[];
383  readonly overriding: ClassRelationDetails[];
384  readonly implemented: ClassRelationDetails[];
385  readonly implementing: ClassRelationDetails[];
386}
387
388export class ClassRelationDetails extends LspNode {
389  constructor(peer: KNativePointer) {
390    super(peer);
391    this.fileName = unpackString(global.es2panda._getFileNameFromClassRelationDetails(peer));
392    this.pos = global.es2panda._getPosFromClassRelationDetails(peer);
393    this.kind = global.es2panda._getKindFromClassRelationDetails(peer);
394  }
395  readonly fileName: String;
396  readonly pos: number;
397  readonly kind: ClassRelationKind;
398}
399
400export class LspQuickInfo extends LspNode {
401  constructor(peer: KNativePointer) {
402    super(peer);
403    this.kind = unpackString(global.es2panda._getQuickInfoKind(peer));
404    this.kindModifier = unpackString(global.es2panda._getQuickInfoKindModifier(peer));
405    this.textSpan = new LspTextSpan(global.es2panda._getTextSpan(peer));
406    this.fileName = unpackString(global.es2panda._getQuickInfoFileName(peer));
407    this.displayParts = new NativePtrDecoder()
408      .decode(global.es2panda._getSymbolDisplayPart(peer))
409      .map((elPeer: KNativePointer) => {
410        return new LspSymbolDisplayPart(elPeer);
411      });
412  }
413  readonly kind: String;
414  readonly kindModifier: String;
415  readonly textSpan: LspTextSpan;
416  readonly fileName: String;
417  readonly displayParts: LspSymbolDisplayPart[];
418}
419
420export enum LspHighlightSpanKind {
421  NONE,
422  DEFINITION,
423  REFERENCE,
424  WRITTEN_REFERENCE
425}
426
427export class LspHighlightSpan extends LspNode {
428  constructor(peer: KNativePointer) {
429    super(peer);
430    this.fileName = unpackString(global.es2panda._getHighlightFileName(peer));
431    this.textSpan = new LspTextSpan(global.es2panda._getHighlightTextSpan(peer));
432    this.contextSpan = new LspTextSpan(global.es2panda._getHighlightContextSpan(peer));
433    this.kind = global.es2panda._getHighlightKind(peer);
434  }
435  readonly fileName: String;
436  readonly textSpan: LspTextSpan;
437  readonly contextSpan: LspTextSpan;
438  readonly kind: LspHighlightSpanKind;
439}
440
441export class LspDocumentHighlights extends LspNode {
442  constructor(peer: KNativePointer) {
443    super(peer);
444    this.fileName = unpackString(global.es2panda._getQuickInfoKind(peer));
445    this.highlightSpans = new NativePtrDecoder()
446      .decode(global.es2panda._getHighlightSpanFromHighlights(peer))
447      .map((elPeer: KNativePointer) => {
448        return new LspHighlightSpan(elPeer);
449      });
450  }
451  readonly fileName: String;
452  readonly highlightSpans: LspHighlightSpan[];
453}
454
455export class LspDocumentHighlightsReferences extends LspNode {
456  constructor(peer: KNativePointer) {
457    super(peer);
458    this.documentHighlights = new NativePtrDecoder()
459      .decode(global.es2panda._getDocumentHighlightsFromRef(peer))
460      .map((elPeer: KNativePointer) => {
461        return new LspDocumentHighlights(elPeer);
462      });
463  }
464  readonly documentHighlights: LspDocumentHighlights[];
465}
466
467export enum LspCompletionEntryKind {
468  TEXT = 1,
469  METHOD = 2,
470  FUNCTION = 3,
471  CONSTRUCTOR = 4,
472  FIELD = 5,
473  VARIABLE = 6,
474  CLASS = 7,
475  INTERFACE = 8,
476  MODULE = 9,
477  PROPERTY = 10,
478  UNIT = 11,
479  VALUE = 12,
480  ENUM = 13,
481  KEYWORD = 14,
482  SNIPPET = 15,
483  COLOR = 16,
484  FILE = 17,
485  REFERENCE = 18,
486  FOLDER = 19,
487  ENUM_MEMBER = 20,
488  CONSTANT = 21,
489  STRUCT = 22,
490  EVENT = 23,
491  OPERATOR = 24,
492  TYPE_PARAMETER = 25,
493  ALIAS_TYPE = 26
494}
495
496export enum ResolutionStatus {
497  RESOLVED,
498  UNRESOLVED
499}
500
501export class LspCompletionEntryData extends LspNode {
502  constructor(peer: KNativePointer) {
503    super(peer);
504    this.fileName = unpackString(global.es2panda._getFileNameFromEntryData(peer));
505    this.namedExport = unpackString(global.es2panda._getNamedExportFromEntryData(peer));
506    this.importDeclaration = unpackString(global.es2panda._getImportDeclarationFromEntryData(peer));
507    this.status = global.es2panda._getStatusFromEntryData(peer);
508  }
509  readonly fileName: String;
510  readonly namedExport: String;
511  readonly importDeclaration: String;
512  readonly status: ResolutionStatus;
513}
514
515export class LspCompletionEntry extends LspNode {
516  constructor(peer: KNativePointer) {
517    super(peer);
518    this.name = unpackString(global.es2panda._getNameFromEntry(peer));
519    this.sortText = unpackString(global.es2panda._getSortTextFromEntry(peer));
520    this.insertText = unpackString(global.es2panda._getInsertTextFromEntry(peer));
521    this.kind = global.es2panda._getKindFromEntry(peer);
522    this.data = this.getCompletionEntryData(peer);
523  }
524  readonly name: String;
525  readonly sortText: String;
526  readonly insertText: String;
527  readonly kind: LspCompletionEntryKind;
528  readonly data: LspCompletionEntryData | null;
529  private getCompletionEntryData(peer: KNativePointer): LspCompletionEntryData | null {
530    const dataPtr = global.es2panda._getDataFromEntry(peer);
531    if (dataPtr) {
532      return new LspCompletionEntryData(dataPtr);
533    } else {
534      return null;
535    }
536  }
537}
538
539export class LspCompletionInfo extends LspNode {
540  constructor(peer: KNativePointer) {
541    super(peer);
542    this.entries = new NativePtrDecoder()
543      .decode(global.es2panda._getEntriesFromCompletionInfo(peer))
544      .map((elPeer: KNativePointer) => {
545        return new LspCompletionEntry(elPeer);
546      });
547  }
548  readonly entries: LspCompletionEntry[];
549}
550
551export enum AccessKind {
552  READ,
553  WRITE,
554  READWRITE
555}
556
557export class LspReferenceLocation extends LspNode {
558  constructor(peer: KNativePointer) {
559    super(peer);
560    this.uri = unpackString(global.es2panda._getUriFromLocation(peer));
561    this.start = global.es2panda._getStartFromLocation(peer);
562    this.end = global.es2panda._getEndFromLocation(peer);
563    this.accessKind = global.es2panda._getAccessKindFromLocation(peer);
564  }
565  readonly uri: String;
566  readonly start: KInt;
567  readonly end: KInt;
568  readonly accessKind: AccessKind;
569}
570
571export class LspReferenceLocationList extends LspNode {
572  constructor(peer: KNativePointer) {
573    super(peer);
574    this.entries = new NativePtrDecoder()
575      .decode(global.es2panda._getLocationFromList(peer))
576      .map((elPeer: KNativePointer) => {
577        return new LspReferenceLocation(elPeer);
578      });
579  }
580  readonly entries: LspReferenceLocation[];
581}
582
583export class LspLineAndCharacter extends LspNode {
584  readonly line: number;
585  readonly character: number;
586  constructor(peer: KNativePointer) {
587    super(peer);
588    this.line = global.es2panda._getLine(peer);
589    this.character = global.es2panda._getChar(peer);
590  }
591}
592
593export class LspClassConstructorInfo extends LspNode {
594  constructor(peer: KNativePointer) {
595    super(peer);
596    this.constructorInfoFileTextChanges = new NativePtrDecoder()
597      .decode(global.es2panda._getFileTextChangesFromConstructorInfo(peer))
598      .map((elPeer: KNativePointer) => {
599        return new ConstructorInfoFileTextChanges(elPeer);
600      });
601  }
602  readonly constructorInfoFileTextChanges: ConstructorInfoFileTextChanges[];
603}
604
605export class ConstructorInfoFileTextChanges extends LspNode {
606  constructor(peer: KNativePointer) {
607    super(peer);
608    this.fileName = unpackString(global.es2panda._getFileNameFromConstructorInfo(peer));
609    this.constructorInfoTextChanges = new NativePtrDecoder()
610      .decode(global.es2panda._getTextChangeFromConstructorInfo(peer))
611      .map((elPeer: KNativePointer) => {
612        return new ConstructorInfoTextChange(elPeer);
613      });
614  }
615  readonly fileName: String;
616  readonly constructorInfoTextChanges: ConstructorInfoTextChange[];
617}
618
619export class ConstructorInfoTextChange extends LspNode {
620  constructor(peer: KNativePointer) {
621    super(peer);
622    this.span_ = new LspTextSpan(global.es2panda._getTextSpanFromConstructorInfo(peer));
623    this.newText_ = unpackString(global.es2panda._getNewTextFromConstructorInfo(peer));
624  }
625  readonly span_: LspTextSpan;
626  readonly newText_: String;
627}
628
629export class CompletionEntryDetails extends LspNode {
630  readonly name: String;
631  readonly kind: String;
632  readonly kindModifier: String;
633  readonly fileName: String;
634  readonly displayParts: LspSymbolDisplayPart[];
635  constructor(peer: KNativePointer) {
636    super(peer);
637    this.name = unpackString(global.es2panda._getCompletionEntryDetailsEntryName(peer));
638    this.kind = unpackString(global.es2panda._getCompletionEntryDetailsKind(peer));
639    this.kindModifier = unpackString(global.es2panda._getCompletionEntryDetailsKindModifier(peer));
640    this.fileName = unpackString(global.es2panda._getCompletionEntryDetailsFileName(peer));
641    this.displayParts = new NativePtrDecoder()
642      .decode(global.es2panda._getCompletionEntryDetailsSymbolDisplayPart(peer))
643      .map((elPeer: KNativePointer) => {
644        return new LspSymbolDisplayPart(elPeer);
645      });
646  }
647}
648
649export class TextChange extends LspNode {
650  constructor(peer: KNativePointer) {
651    super(peer);
652    this.span = new LspTextSpan(global.es2panda._getTextSpanFromTextChange(peer));
653    this.newText = unpackString(global.es2panda._getNewTextFromTextChange(peer));
654  }
655  readonly span: LspTextSpan;
656  readonly newText: String;
657}
658
659export class FileTextChanges extends LspNode {
660  constructor(peer: KNativePointer) {
661    super(peer);
662    this.fileName = unpackString(global.es2panda._getFileNameFromFileTextChanges(peer));
663    this.textChanges = new NativePtrDecoder()
664      .decode(global.es2panda._getTextChangesFromFileTextChanges(peer))
665      .map((elPeer: KNativePointer) => {
666        return new TextChange(elPeer);
667      });
668  }
669  readonly fileName: String;
670  readonly textChanges: TextChange[];
671}
672
673export class CodeActionInfo extends LspNode {
674  constructor(peer: KNativePointer) {
675    super(peer);
676    this.changes = new NativePtrDecoder()
677      .decode(global.es2panda._getFileTextChangesFromCodeActionInfo(peer))
678      .map((elPeer: KNativePointer) => {
679        return new FileTextChanges(elPeer);
680      });
681    this.description = unpackString(global.es2panda._getDescriptionFromCodeActionInfo(peer));
682  }
683  readonly changes: FileTextChanges[];
684  readonly description: String;
685}
686
687export class CodeFixActionInfo extends CodeActionInfo {
688  constructor(peer: KNativePointer) {
689    super(peer);
690    this.fixName = unpackString(global.es2panda._getFixNameFromCodeFixActionInfo(peer));
691    this.fixId_ = unpackString(global.es2panda._getFixIdFromCodeFixActionInfo(peer));
692    this.fixAllDescription_ = unpackString(global.es2panda._getFixAllDescriptionFromCodeFixActionInfo(peer));
693  }
694  readonly fixName: String;
695  readonly fixId_: String;
696  readonly fixAllDescription_: String;
697}
698
699export class CodeFixActionInfoList extends LspNode {
700  constructor(peer: KNativePointer) {
701    super(peer);
702    this.codeFixActionInfos = new NativePtrDecoder()
703      .decode(global.es2panda._getCodeFixActionInfos(peer))
704      .map((elPeer: KNativePointer) => {
705        return new CodeFixActionInfo(elPeer);
706      });
707  }
708  readonly codeFixActionInfos: CodeFixActionInfo[];
709}
710
711export class LspFileTextChanges extends LspNode {
712  constructor(peer: KNativePointer) {
713    super(peer);
714    this.fileTextChanges = new NativePtrDecoder()
715      .decode(global.es2panda._getFileTextChanges(peer))
716      .map((elPeer: KNativePointer) => {
717        return new FileTextChanges(elPeer);
718      });
719  }
720  readonly fileTextChanges: FileTextChanges[];
721}
722
723export class LspSafeDeleteLocationInfo extends LspNode {
724  constructor(peer: KNativePointer) {
725    super(peer);
726    this.uri = unpackString(global.es2panda._getSafeDeleteLocationUri(peer));
727    this.start = global.es2panda._getSafeDeleteLocationStart(peer);
728    this.length = global.es2panda._getSafeDeleteLocationLength(peer);
729  }
730  readonly uri: String;
731  readonly start: KInt;
732  readonly length: KInt;
733}
734
735export class LspSafeDeleteLocation extends LspNode {
736  constructor(peer: KNativePointer) {
737    super(peer);
738    this.safeDeleteLocationInfos = new NativePtrDecoder()
739      .decode(global.es2panda._getSafeDeleteLocations(this.peer))
740      .map((elPeer: KNativePointer) => {
741        return new LspSafeDeleteLocationInfo(elPeer);
742      });
743  }
744  readonly safeDeleteLocationInfos: LspSafeDeleteLocationInfo[];
745}
746
747export class RefactorAction extends LspNode {
748  constructor(peer: KNativePointer) {
749    super(peer);
750    this.name = unpackString(global.es2panda._getRefactorActionName(peer));
751    this.description = unpackString(global.es2panda._getRefactorActionDescription(peer));
752    this.kind = unpackString(global.es2panda._getRefactorActionKind(peer));
753  }
754  readonly name: String;
755  readonly description: String;
756  readonly kind: String;
757}
758
759export class ApplicableRefactorItemInfo extends LspNode {
760  constructor(peer: KNativePointer) {
761    super(peer);
762    this.name = unpackString(global.es2panda._getApplicableRefactorName(peer));
763    this.description = unpackString(global.es2panda._getApplicableRefactorDescription(peer));
764    this.action = new RefactorAction(global.es2panda._getApplicableRefactorAction(peer));
765  }
766
767  readonly name: String;
768  readonly description: String;
769  readonly action: RefactorAction;
770}
771
772export class LspApplicableRefactorInfo extends LspNode {
773  constructor(peer: KNativePointer) {
774    super(peer);
775    this.applicableRefactorInfo = new NativePtrDecoder()
776      .decode(global.es2panda._getApplicableRefactorInfoList(peer))
777      .map((elPeer: KNativePointer) => {
778        return new ApplicableRefactorItemInfo(elPeer);
779      });
780  }
781
782  readonly applicableRefactorInfo: ApplicableRefactorItemInfo[];
783}
784
785export class LspTypeHierarchies extends LspNode {
786  constructor(peer: KNativePointer) {
787    super(peer);
788    this.fileName = unpackString(global.es2panda._getFileNameFromTypeHierarchies(peer));
789    this.name = unpackString(global.es2panda._getNameFromTypeHierarchies(peer));
790    this.type = global.es2panda._getTypeFromTypeHierarchies(peer);
791    this.pos = global.es2panda._getPosFromTypeHierarchies(peer);
792    this.subOrSuper = new NativePtrDecoder()
793      .decode(global.es2panda._getSubOrSuper(peer))
794      .map((elPeer: KNativePointer) => {
795        return new LspTypeHierarchies(elPeer);
796      });
797  }
798  readonly fileName: String;
799  readonly name: String;
800  readonly type: HierarchyType;
801  readonly pos: KInt;
802  subOrSuper: LspTypeHierarchies[];
803}
804
805export class LspTypeHierarchiesInfo extends LspNode {
806  constructor(peer: KNativePointer) {
807    super(peer);
808    this.fileName = unpackString(global.es2panda._getFileNameFromTypeHierarchiesInfo(peer));
809    this.name = unpackString(global.es2panda._getNameFromTypeHierarchiesInfo(peer));
810    this.type = global.es2panda._getTypeFromTypeHierarchiesInfo(peer);
811    this.pos = global.es2panda._getPositionFromTypeHierarchiesInfo(peer);
812    this.superHierarchies = new LspTypeHierarchies(global.es2panda._getSuperFromTypeHierarchiesInfo(peer));
813    this.subHierarchies = new LspTypeHierarchies(global.es2panda._getSubFromTypeHierarchiesInfo(peer));
814  }
815  readonly fileName: String;
816  readonly name: String;
817  readonly type: HierarchyType;
818  readonly pos: KInt;
819  readonly superHierarchies: LspTypeHierarchies;
820  readonly subHierarchies: LspTypeHierarchies;
821}
822
823enum LspInlayHintKind {
824  TYPE,
825  PARAMETER,
826  ENUM
827}
828
829export class LspInlayHint extends LspNode {
830  constructor(peer: KNativePointer) {
831    super(peer);
832    this.text = unpackString(global.es2panda._getInlayHintText(peer));
833    this.number = global.es2panda._getInlayHintNumber(peer);
834    this.kind = global.es2panda._getInlayHintKind(peer);
835    this.whitespaceBefore = global.es2panda._getInlayHintWhitespaceBefore(peer);
836    this.whitespaceAfter = global.es2panda._getInlayHintWhitespaceAfter(peer);
837  }
838  readonly text: string;
839  readonly number: number;
840  readonly kind: LspInlayHintKind;
841  readonly whitespaceBefore: KBoolean;
842  readonly whitespaceAfter: KBoolean;
843}
844
845export class LspInlayHintList extends LspNode {
846  constructor(peer: KNativePointer) {
847    super(peer);
848    this.inlayHints = new NativePtrDecoder()
849      .decode(global.es2panda._getInlayHints(peer))
850      .map((elPeer: KNativePointer) => {
851        return new LspInlayHint(elPeer);
852      });
853  }
854  readonly inlayHints: LspInlayHint[];
855}
856
857export class LspSignatureHelpParameter extends LspNode {
858  constructor(peer: KNativePointer) {
859    super(peer);
860    this.name = unpackString(global.es2panda._getSignatureHelpParameterName(peer));
861    this.documentation = new NativePtrDecoder()
862      .decode(global.es2panda._getSignatureHelpParameterDocumentation(peer))
863      .map((elPeer: KNativePointer) => {
864        return new LspSymbolDisplayPart(elPeer);
865      });
866    this.displayParts = new NativePtrDecoder()
867      .decode(global.es2panda._getSignatureHelpParameterDisplayParts(peer))
868      .map((elPeer: KNativePointer) => {
869        return new LspSymbolDisplayPart(elPeer);
870      });
871  }
872  readonly name: string;
873  readonly documentation: LspSymbolDisplayPart[];
874  readonly displayParts: LspSymbolDisplayPart[];
875}
876
877export class LspSignatureHelpItem extends LspNode {
878  constructor(peer: KNativePointer) {
879    super(peer);
880    this.prefixDisplayParts = new NativePtrDecoder()
881      .decode(global.es2panda._getSignatureHelpItemPrefix(peer))
882      .map((elPeer: KNativePointer) => {
883        return new LspSymbolDisplayPart(elPeer);
884      });
885    this.suffixDisplayParts = new NativePtrDecoder()
886      .decode(global.es2panda._getSignatureHelpItemSuffix(peer))
887      .map((elPeer: KNativePointer) => {
888        return new LspSymbolDisplayPart(elPeer);
889      });
890    this.separatorDisplayParts = new NativePtrDecoder()
891      .decode(global.es2panda._getSignatureHelpItemSeparator(peer))
892      .map((elPeer: KNativePointer) => {
893        return new LspSymbolDisplayPart(elPeer);
894      });
895    this.parameters = new NativePtrDecoder()
896      .decode(global.es2panda._getSignatureHelpItemParameter(peer))
897      .map((elPeer: KNativePointer) => {
898        return new LspSignatureHelpParameter(elPeer);
899      });
900    this.documentation = new NativePtrDecoder()
901      .decode(global.es2panda._getSignatureHelpItemDocumentation(peer))
902      .map((elPeer: KNativePointer) => {
903        return new LspSymbolDisplayPart(elPeer);
904      });
905  }
906  readonly prefixDisplayParts: LspSymbolDisplayPart[];
907  readonly suffixDisplayParts: LspSymbolDisplayPart[];
908  readonly separatorDisplayParts: LspSymbolDisplayPart[];
909  readonly parameters: LspSignatureHelpParameter[];
910  readonly documentation: LspSymbolDisplayPart[];
911}
912
913export class LspSignatureHelpItems extends LspNode {
914  constructor(peer: KNativePointer) {
915    super(peer);
916    this.items = new NativePtrDecoder()
917      .decode(global.es2panda._getSignatureHelpItem(peer))
918      .map((elPeer: KNativePointer) => {
919        return new LspSignatureHelpItem(elPeer);
920      });
921    this.applicableSpan = new LspTextSpan(global.es2panda._getApplicableSpan(peer));
922    this.selectedItemIndex = global.es2panda._getSelectedItemIndex(peer);
923    this.argumentIndex = global.es2panda._getArgumentIndex(peer);
924    this.argumentCount = global.es2panda._getArgumentCount(peer);
925  }
926  readonly items: LspSignatureHelpItem[];
927  readonly applicableSpan: LspTextSpan;
928  readonly selectedItemIndex: number;
929  readonly argumentIndex: number;
930  readonly argumentCount: number;
931}
932