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