From 935ce534f87fc5444a8c8d33b3f4e12bd18f066c Mon Sep 17 00:00:00 2001 From: jupblb Date: Sat, 4 Apr 2026 10:16:43 +0200 Subject: [PATCH 01/12] proto: add typed range fields to Occurrence via oneof Introduce SingleLineRange and MultiLineRange message types, and add typed_range and typed_enclosing_range oneof fields to Occurrence. The old repeated int32 range and enclosing_range fields are marked deprecated. The typed fields are self-documenting and eliminate the need to disambiguate 3-element vs 4-element arrays at runtime. --- scip.proto | 63 ++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 19 deletions(-) diff --git a/scip.proto b/scip.proto index 326df0dd..d8be97f7 100644 --- a/scip.proto +++ b/scip.proto @@ -640,18 +640,42 @@ enum SyntaxKind { TagDelimiter = 36; } +// SingleLineRange represents a half-open [start, end) range within a single line. +message SingleLineRange { + int32 line = 1; + int32 start_character = 2; + int32 end_character = 3; +} + +// MultiLineRange represents a half-open [start, end) range spanning multiple lines. +message MultiLineRange { + int32 start_line = 1; + int32 start_character = 2; + int32 end_line = 3; + int32 end_character = 4; +} + // Occurrence associates a source position with a symbol and/or highlighting // information. // // If possible, indexers should try to bundle logically related information // across occurrences into a single occurrence to reduce payload sizes. message Occurrence { - // Half-open [start, end) range of this occurrence. Must be exactly three or four - // elements: + // Deprecated: Use `single_line_range` or `multi_line_range` instead. // + // Half-open [start, end) range. Must be exactly three or four elements: + // - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) // - Four elements: `[startLine, startCharacter, endLine, endCharacter]` - // - Three elements: `[startLine, startCharacter, endCharacter]`. The end line - // is inferred to have the same value as the start line. + // + // Historical note: the original draft of this schema had a `Range` message + // type with `start` and `end` fields of type `Position`, mirroring LSP. + // Benchmarks revealed that this encoding was inefficient and that we could + // reduce the total payload size of an index by 50% by using `repeated int32` + // instead. However, the lack of type safety led to the introduction of + // `single_line_range` and `multi_line_range` as typed alternatives. + repeated int32 range = 1 [deprecated = true]; + + // Half-open [start, end) source range of this occurrence. // // It is allowed for the range to be empty (i.e. start==end). // @@ -661,15 +685,12 @@ message Occurrence { // // The 'character' value is interpreted based on the PositionEncoding for // the Document. - // - // Historical note: the original draft of this schema had a `Range` message - // type with `start` and `end` fields of type `Position`, mirroring LSP. - // Benchmarks revealed that this encoding was inefficient and that we could - // reduce the total payload size of an index by 50% by using `repeated int32` - // instead. The `repeated int32` encoding is admittedly more embarrassing to - // work with in some programming languages but we hope the performance - // improvements make up for it. - repeated int32 range = 1; + oneof typed_range { + // Range spanning a single line. + SingleLineRange single_line_range = 8; + // Range spanning multiple lines. + MultiLineRange multi_line_range = 9; + } // (optional) The symbol that appears at this position. See // `SymbolInformation.symbol` for how to format symbols as strings. string symbol = 2; @@ -689,12 +710,13 @@ message Occurrence { SyntaxKind syntax_kind = 5; // (optional) Diagnostics that have been reported for this specific range. repeated Diagnostic diagnostics = 6; - // (optional) Using the same encoding as the sibling `range` field, half-open - // source range of the nearest non-trivial enclosing AST node. This range must - // enclose the `range` field. Example applications that make use of the - // enclosing_range field: + // Deprecated: Use `typed_enclosing_range` instead. + repeated int32 enclosing_range = 7 [deprecated = true]; + + // (optional) Half-open source range of the nearest non-trivial enclosing AST + // node. This range must enclose the occurrence range. Example applications: // - // - Call hierarchies: to determine what symbols are references from the body + // - Call hierarchies: to determine what symbols are referenced from the body // of a function // - Symbol outline: to display breadcrumbs from the cursor position to the // root of the file @@ -741,7 +763,10 @@ message Occurrence { // ^ range // ^^^^^^^^^^^^^ enclosing_range // ``` - repeated int32 enclosing_range = 7; + oneof typed_enclosing_range { + SingleLineRange single_line_enclosing_range = 10; + MultiLineRange multi_line_enclosing_range = 11; + } } // Represents a diagnostic, such as a compiler error or warning, which should be From 9fcb37d00f62e0f8caf8f91ec8523da0c242bdf3 Mon Sep 17 00:00:00 2001 From: jupblb Date: Sat, 4 Apr 2026 10:18:59 +0200 Subject: [PATCH 02/12] codegen: regenerate bindings for typed range fields --- bindings/go/scip/parse_test.go | 4 +- bindings/go/scip/scip.pb.go | 353 ++- bindings/haskell/src/Proto/Scip.hs | 1874 +++++++++++---- bindings/haskell/src/Proto/Scip_Fields.hs | 95 + .../org/scip_code/scip/MultiLineRange.java | 643 +++++ .../scip/MultiLineRangeOrBuilder.java | 36 + .../java/org/scip_code/scip/Occurrence.java | 2100 ++++++++++------- .../scip_code/scip/OccurrenceOrBuilder.java | 346 +-- .../java/org/scip_code/scip/ScipProto.java | 213 +- .../org/scip_code/scip/SingleLineRange.java | 577 +++++ .../scip/SingleLineRangeOrBuilder.java | 30 + .../org/scip_code/scip/MultiLineRangeKt.kt | 108 + .../kotlin/org/scip_code/scip/OccurrenceKt.kt | 698 ++---- .../org/scip_code/scip/SingleLineRangeKt.kt | 91 + bindings/rust/src/generated/scip.rs | 2080 ++++++++++------ bindings/typescript/scip_pb.ts | 155 +- docs/scip.md | 110 +- 17 files changed, 6606 insertions(+), 2907 deletions(-) create mode 100644 bindings/java/src/main/java/org/scip_code/scip/MultiLineRange.java create mode 100644 bindings/java/src/main/java/org/scip_code/scip/MultiLineRangeOrBuilder.java create mode 100644 bindings/java/src/main/java/org/scip_code/scip/SingleLineRange.java create mode 100644 bindings/java/src/main/java/org/scip_code/scip/SingleLineRangeOrBuilder.java create mode 100644 bindings/kotlin/src/main/kotlin/org/scip_code/scip/MultiLineRangeKt.kt create mode 100644 bindings/kotlin/src/main/kotlin/org/scip_code/scip/SingleLineRangeKt.kt diff --git a/bindings/go/scip/parse_test.go b/bindings/go/scip/parse_test.go index 04ce7564..27064950 100644 --- a/bindings/go/scip/parse_test.go +++ b/bindings/go/scip/parse_test.go @@ -22,7 +22,7 @@ func TestEmpty(t *testing.T) { } func TestFuzz(t *testing.T) { - pat := regexp.MustCompile("^(state|sizeCache|unknownFields|SignatureDocumentation)$") + pat := regexp.MustCompile("^(state|sizeCache|unknownFields|SignatureDocumentation|TypedRange|TypedEnclosingRange)$") f := fuzz.New().NumElements(0, 2).SkipFieldsWithPattern(pat) for i := 0; i < 100; i++ { index := Index{} @@ -72,7 +72,7 @@ func TestLargeDocuments(t *testing.T) { } func TestDocumentsOnly(t *testing.T) { - pat := regexp.MustCompile("^(state|sizeCache|unknownFields|SignatureDocumentation)$") + pat := regexp.MustCompile("^(state|sizeCache|unknownFields|SignatureDocumentation|TypedRange|TypedEnclosingRange)$") f := fuzz.New().NumElements(0, 2).SkipFieldsWithPattern(pat) for i := 0; i < 100; i++ { index := Index{} diff --git a/bindings/go/scip/scip.pb.go b/bindings/go/scip/scip.pb.go index 8a8e0bec..de32145c 100644 --- a/bindings/go/scip/scip.pb.go +++ b/bindings/go/scip/scip.pb.go @@ -2293,6 +2293,136 @@ func (x *Relationship) GetIsDefinition() bool { return false } +// SingleLineRange represents a half-open [start, end) range within a single line. +type SingleLineRange struct { + state protoimpl.MessageState `protogen:"open.v1"` + Line int32 `protobuf:"varint,1,opt,name=line,proto3" json:"line,omitempty"` + StartCharacter int32 `protobuf:"varint,2,opt,name=start_character,json=startCharacter,proto3" json:"start_character,omitempty"` + EndCharacter int32 `protobuf:"varint,3,opt,name=end_character,json=endCharacter,proto3" json:"end_character,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SingleLineRange) Reset() { + *x = SingleLineRange{} + mi := &file_scip_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SingleLineRange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SingleLineRange) ProtoMessage() {} + +func (x *SingleLineRange) ProtoReflect() protoreflect.Message { + mi := &file_scip_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SingleLineRange.ProtoReflect.Descriptor instead. +func (*SingleLineRange) Descriptor() ([]byte, []int) { + return file_scip_proto_rawDescGZIP(), []int{10} +} + +func (x *SingleLineRange) GetLine() int32 { + if x != nil { + return x.Line + } + return 0 +} + +func (x *SingleLineRange) GetStartCharacter() int32 { + if x != nil { + return x.StartCharacter + } + return 0 +} + +func (x *SingleLineRange) GetEndCharacter() int32 { + if x != nil { + return x.EndCharacter + } + return 0 +} + +// MultiLineRange represents a half-open [start, end) range spanning multiple lines. +type MultiLineRange struct { + state protoimpl.MessageState `protogen:"open.v1"` + StartLine int32 `protobuf:"varint,1,opt,name=start_line,json=startLine,proto3" json:"start_line,omitempty"` + StartCharacter int32 `protobuf:"varint,2,opt,name=start_character,json=startCharacter,proto3" json:"start_character,omitempty"` + EndLine int32 `protobuf:"varint,3,opt,name=end_line,json=endLine,proto3" json:"end_line,omitempty"` + EndCharacter int32 `protobuf:"varint,4,opt,name=end_character,json=endCharacter,proto3" json:"end_character,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MultiLineRange) Reset() { + *x = MultiLineRange{} + mi := &file_scip_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MultiLineRange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MultiLineRange) ProtoMessage() {} + +func (x *MultiLineRange) ProtoReflect() protoreflect.Message { + mi := &file_scip_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MultiLineRange.ProtoReflect.Descriptor instead. +func (*MultiLineRange) Descriptor() ([]byte, []int) { + return file_scip_proto_rawDescGZIP(), []int{11} +} + +func (x *MultiLineRange) GetStartLine() int32 { + if x != nil { + return x.StartLine + } + return 0 +} + +func (x *MultiLineRange) GetStartCharacter() int32 { + if x != nil { + return x.StartCharacter + } + return 0 +} + +func (x *MultiLineRange) GetEndLine() int32 { + if x != nil { + return x.EndLine + } + return 0 +} + +func (x *MultiLineRange) GetEndCharacter() int32 { + if x != nil { + return x.EndCharacter + } + return 0 +} + // Occurrence associates a source position with a symbol and/or highlighting // information. // @@ -2300,12 +2430,22 @@ func (x *Relationship) GetIsDefinition() bool { // across occurrences into a single occurrence to reduce payload sizes. type Occurrence struct { state protoimpl.MessageState `protogen:"open.v1"` - // Half-open [start, end) range of this occurrence. Must be exactly three or four - // elements: + // Deprecated: Use `single_line_range` or `multi_line_range` instead. // - // - Four elements: `[startLine, startCharacter, endLine, endCharacter]` - // - Three elements: `[startLine, startCharacter, endCharacter]`. The end line - // is inferred to have the same value as the start line. + // Half-open [start, end) range. Must be exactly three or four elements: + // - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) + // - Four elements: `[startLine, startCharacter, endLine, endCharacter]` + // + // Historical note: the original draft of this schema had a `Range` message + // type with `start` and `end` fields of type `Position`, mirroring LSP. + // Benchmarks revealed that this encoding was inefficient and that we could + // reduce the total payload size of an index by 50% by using `repeated int32` + // instead. However, the lack of type safety led to the introduction of + // `single_line_range` and `multi_line_range` as typed alternatives. + // + // Deprecated: Marked as deprecated in scip.proto. + Range []int32 `protobuf:"varint,1,rep,packed,name=range,proto3" json:"range,omitempty"` + // Half-open [start, end) source range of this occurrence. // // It is allowed for the range to be empty (i.e. start==end). // @@ -2316,14 +2456,11 @@ type Occurrence struct { // The 'character' value is interpreted based on the PositionEncoding for // the Document. // - // Historical note: the original draft of this schema had a `Range` message - // type with `start` and `end` fields of type `Position`, mirroring LSP. - // Benchmarks revealed that this encoding was inefficient and that we could - // reduce the total payload size of an index by 50% by using `repeated int32` - // instead. The `repeated int32` encoding is admittedly more embarrassing to - // work with in some programming languages but we hope the performance - // improvements make up for it. - Range []int32 `protobuf:"varint,1,rep,packed,name=range,proto3" json:"range,omitempty"` + // Types that are valid to be assigned to TypedRange: + // + // *Occurrence_SingleLineRange + // *Occurrence_MultiLineRange + TypedRange isOccurrence_TypedRange `protobuf_oneof:"typed_range"` // (optional) The symbol that appears at this position. See // `SymbolInformation.symbol` for how to format symbols as strings. Symbol string `protobuf:"bytes,2,opt,name=symbol,proto3" json:"symbol,omitempty"` @@ -2343,12 +2480,14 @@ type Occurrence struct { SyntaxKind SyntaxKind `protobuf:"varint,5,opt,name=syntax_kind,json=syntaxKind,proto3,enum=scip.SyntaxKind" json:"syntax_kind,omitempty"` // (optional) Diagnostics that have been reported for this specific range. Diagnostics []*Diagnostic `protobuf:"bytes,6,rep,name=diagnostics,proto3" json:"diagnostics,omitempty"` - // (optional) Using the same encoding as the sibling `range` field, half-open - // source range of the nearest non-trivial enclosing AST node. This range must - // enclose the `range` field. Example applications that make use of the - // enclosing_range field: + // Deprecated: Use `typed_enclosing_range` instead. + // + // Deprecated: Marked as deprecated in scip.proto. + EnclosingRange []int32 `protobuf:"varint,7,rep,packed,name=enclosing_range,json=enclosingRange,proto3" json:"enclosing_range,omitempty"` + // (optional) Half-open source range of the nearest non-trivial enclosing AST + // node. This range must enclose the occurrence range. Example applications: // - // - Call hierarchies: to determine what symbols are references from the body + // - Call hierarchies: to determine what symbols are referenced from the body // of a function // - Symbol outline: to display breadcrumbs from the cursor position to the // root of the file @@ -2405,14 +2544,19 @@ type Occurrence struct { // ^^^^^^^^^^^^^ enclosing_range // // ``` - EnclosingRange []int32 `protobuf:"varint,7,rep,packed,name=enclosing_range,json=enclosingRange,proto3" json:"enclosing_range,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // + // Types that are valid to be assigned to TypedEnclosingRange: + // + // *Occurrence_SingleLineEnclosingRange + // *Occurrence_MultiLineEnclosingRange + TypedEnclosingRange isOccurrence_TypedEnclosingRange `protobuf_oneof:"typed_enclosing_range"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Occurrence) Reset() { *x = Occurrence{} - mi := &file_scip_proto_msgTypes[10] + mi := &file_scip_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2424,7 +2568,7 @@ func (x *Occurrence) String() string { func (*Occurrence) ProtoMessage() {} func (x *Occurrence) ProtoReflect() protoreflect.Message { - mi := &file_scip_proto_msgTypes[10] + mi := &file_scip_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2437,9 +2581,10 @@ func (x *Occurrence) ProtoReflect() protoreflect.Message { // Deprecated: Use Occurrence.ProtoReflect.Descriptor instead. func (*Occurrence) Descriptor() ([]byte, []int) { - return file_scip_proto_rawDescGZIP(), []int{10} + return file_scip_proto_rawDescGZIP(), []int{12} } +// Deprecated: Marked as deprecated in scip.proto. func (x *Occurrence) GetRange() []int32 { if x != nil { return x.Range @@ -2447,6 +2592,31 @@ func (x *Occurrence) GetRange() []int32 { return nil } +func (x *Occurrence) GetTypedRange() isOccurrence_TypedRange { + if x != nil { + return x.TypedRange + } + return nil +} + +func (x *Occurrence) GetSingleLineRange() *SingleLineRange { + if x != nil { + if x, ok := x.TypedRange.(*Occurrence_SingleLineRange); ok { + return x.SingleLineRange + } + } + return nil +} + +func (x *Occurrence) GetMultiLineRange() *MultiLineRange { + if x != nil { + if x, ok := x.TypedRange.(*Occurrence_MultiLineRange); ok { + return x.MultiLineRange + } + } + return nil +} + func (x *Occurrence) GetSymbol() string { if x != nil { return x.Symbol @@ -2482,6 +2652,7 @@ func (x *Occurrence) GetDiagnostics() []*Diagnostic { return nil } +// Deprecated: Marked as deprecated in scip.proto. func (x *Occurrence) GetEnclosingRange() []int32 { if x != nil { return x.EnclosingRange @@ -2489,6 +2660,65 @@ func (x *Occurrence) GetEnclosingRange() []int32 { return nil } +func (x *Occurrence) GetTypedEnclosingRange() isOccurrence_TypedEnclosingRange { + if x != nil { + return x.TypedEnclosingRange + } + return nil +} + +func (x *Occurrence) GetSingleLineEnclosingRange() *SingleLineRange { + if x != nil { + if x, ok := x.TypedEnclosingRange.(*Occurrence_SingleLineEnclosingRange); ok { + return x.SingleLineEnclosingRange + } + } + return nil +} + +func (x *Occurrence) GetMultiLineEnclosingRange() *MultiLineRange { + if x != nil { + if x, ok := x.TypedEnclosingRange.(*Occurrence_MultiLineEnclosingRange); ok { + return x.MultiLineEnclosingRange + } + } + return nil +} + +type isOccurrence_TypedRange interface { + isOccurrence_TypedRange() +} + +type Occurrence_SingleLineRange struct { + // Range spanning a single line. + SingleLineRange *SingleLineRange `protobuf:"bytes,8,opt,name=single_line_range,json=singleLineRange,proto3,oneof"` +} + +type Occurrence_MultiLineRange struct { + // Range spanning multiple lines. + MultiLineRange *MultiLineRange `protobuf:"bytes,9,opt,name=multi_line_range,json=multiLineRange,proto3,oneof"` +} + +func (*Occurrence_SingleLineRange) isOccurrence_TypedRange() {} + +func (*Occurrence_MultiLineRange) isOccurrence_TypedRange() {} + +type isOccurrence_TypedEnclosingRange interface { + isOccurrence_TypedEnclosingRange() +} + +type Occurrence_SingleLineEnclosingRange struct { + SingleLineEnclosingRange *SingleLineRange `protobuf:"bytes,10,opt,name=single_line_enclosing_range,json=singleLineEnclosingRange,proto3,oneof"` +} + +type Occurrence_MultiLineEnclosingRange struct { + MultiLineEnclosingRange *MultiLineRange `protobuf:"bytes,11,opt,name=multi_line_enclosing_range,json=multiLineEnclosingRange,proto3,oneof"` +} + +func (*Occurrence_SingleLineEnclosingRange) isOccurrence_TypedEnclosingRange() {} + +func (*Occurrence_MultiLineEnclosingRange) isOccurrence_TypedEnclosingRange() {} + // Represents a diagnostic, such as a compiler error or warning, which should be // reported for a document. type Diagnostic struct { @@ -2509,7 +2739,7 @@ type Diagnostic struct { func (x *Diagnostic) Reset() { *x = Diagnostic{} - mi := &file_scip_proto_msgTypes[11] + mi := &file_scip_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2521,7 +2751,7 @@ func (x *Diagnostic) String() string { func (*Diagnostic) ProtoMessage() {} func (x *Diagnostic) ProtoReflect() protoreflect.Message { - mi := &file_scip_proto_msgTypes[11] + mi := &file_scip_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2534,7 +2764,7 @@ func (x *Diagnostic) ProtoReflect() protoreflect.Message { // Deprecated: Use Diagnostic.ProtoReflect.Descriptor instead. func (*Diagnostic) Descriptor() ([]byte, []int) { - return file_scip_proto_rawDescGZIP(), []int{11} + return file_scip_proto_rawDescGZIP(), []int{13} } func (x *Diagnostic) GetSeverity() Severity { @@ -2741,17 +2971,34 @@ const file_scip_proto_rawDesc = "" + "\fis_reference\x18\x02 \x01(\bR\visReference\x12+\n" + "\x11is_implementation\x18\x03 \x01(\bR\x10isImplementation\x12,\n" + "\x12is_type_definition\x18\x04 \x01(\bR\x10isTypeDefinition\x12#\n" + - "\ris_definition\x18\x05 \x01(\bR\fisDefinition\"\xa4\x02\n" + + "\ris_definition\x18\x05 \x01(\bR\fisDefinition\"s\n" + + "\x0fSingleLineRange\x12\x12\n" + + "\x04line\x18\x01 \x01(\x05R\x04line\x12'\n" + + "\x0fstart_character\x18\x02 \x01(\x05R\x0estartCharacter\x12#\n" + + "\rend_character\x18\x03 \x01(\x05R\fendCharacter\"\x98\x01\n" + + "\x0eMultiLineRange\x12\x1d\n" + "\n" + - "Occurrence\x12\x14\n" + - "\x05range\x18\x01 \x03(\x05R\x05range\x12\x16\n" + + "start_line\x18\x01 \x01(\x05R\tstartLine\x12'\n" + + "\x0fstart_character\x18\x02 \x01(\x05R\x0estartCharacter\x12\x19\n" + + "\bend_line\x18\x03 \x01(\x05R\aendLine\x12#\n" + + "\rend_character\x18\x04 \x01(\x05R\fendCharacter\"\x88\x05\n" + + "\n" + + "Occurrence\x12\x18\n" + + "\x05range\x18\x01 \x03(\x05B\x02\x18\x01R\x05range\x12C\n" + + "\x11single_line_range\x18\b \x01(\v2\x15.scip.SingleLineRangeH\x00R\x0fsingleLineRange\x12@\n" + + "\x10multi_line_range\x18\t \x01(\v2\x14.scip.MultiLineRangeH\x00R\x0emultiLineRange\x12\x16\n" + "\x06symbol\x18\x02 \x01(\tR\x06symbol\x12!\n" + "\fsymbol_roles\x18\x03 \x01(\x05R\vsymbolRoles\x125\n" + "\x16override_documentation\x18\x04 \x03(\tR\x15overrideDocumentation\x121\n" + "\vsyntax_kind\x18\x05 \x01(\x0e2\x10.scip.SyntaxKindR\n" + "syntaxKind\x122\n" + - "\vdiagnostics\x18\x06 \x03(\v2\x10.scip.DiagnosticR\vdiagnostics\x12'\n" + - "\x0fenclosing_range\x18\a \x03(\x05R\x0eenclosingRange\"\xa7\x01\n" + + "\vdiagnostics\x18\x06 \x03(\v2\x10.scip.DiagnosticR\vdiagnostics\x12+\n" + + "\x0fenclosing_range\x18\a \x03(\x05B\x02\x18\x01R\x0eenclosingRange\x12V\n" + + "\x1bsingle_line_enclosing_range\x18\n" + + " \x01(\v2\x15.scip.SingleLineRangeH\x01R\x18singleLineEnclosingRange\x12S\n" + + "\x1amulti_line_enclosing_range\x18\v \x01(\v2\x14.scip.MultiLineRangeH\x01R\x17multiLineEnclosingRangeB\r\n" + + "\vtyped_rangeB\x17\n" + + "\x15typed_enclosing_range\"\xa7\x01\n" + "\n" + "Diagnostic\x12*\n" + "\bseverity\x18\x01 \x01(\x0e2\x0e.scip.SeverityR\bseverity\x12\x12\n" + @@ -2992,7 +3239,7 @@ func file_scip_proto_rawDescGZIP() []byte { } var file_scip_proto_enumTypes = make([]protoimpl.EnumInfo, 10) -var file_scip_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_scip_proto_msgTypes = make([]protoimpl.MessageInfo, 14) var file_scip_proto_goTypes = []any{ (ProtocolVersion)(0), // 0: scip.ProtocolVersion (TextEncoding)(0), // 1: scip.TextEncoding @@ -3014,8 +3261,10 @@ var file_scip_proto_goTypes = []any{ (*Signature)(nil), // 17: scip.Signature (*SymbolInformation)(nil), // 18: scip.SymbolInformation (*Relationship)(nil), // 19: scip.Relationship - (*Occurrence)(nil), // 20: scip.Occurrence - (*Diagnostic)(nil), // 21: scip.Diagnostic + (*SingleLineRange)(nil), // 20: scip.SingleLineRange + (*MultiLineRange)(nil), // 21: scip.MultiLineRange + (*Occurrence)(nil), // 22: scip.Occurrence + (*Diagnostic)(nil), // 23: scip.Diagnostic } var file_scip_proto_depIdxs = []int32{ 11, // 0: scip.Index.metadata:type_name -> scip.Metadata @@ -3024,25 +3273,29 @@ var file_scip_proto_depIdxs = []int32{ 0, // 3: scip.Metadata.version:type_name -> scip.ProtocolVersion 12, // 4: scip.Metadata.tool_info:type_name -> scip.ToolInfo 1, // 5: scip.Metadata.text_document_encoding:type_name -> scip.TextEncoding - 20, // 6: scip.Document.occurrences:type_name -> scip.Occurrence + 22, // 6: scip.Document.occurrences:type_name -> scip.Occurrence 18, // 7: scip.Document.symbols:type_name -> scip.SymbolInformation 2, // 8: scip.Document.position_encoding:type_name -> scip.PositionEncoding 15, // 9: scip.Symbol.package:type_name -> scip.Package 16, // 10: scip.Symbol.descriptors:type_name -> scip.Descriptor 8, // 11: scip.Descriptor.suffix:type_name -> scip.Descriptor.Suffix - 20, // 12: scip.Signature.occurrences:type_name -> scip.Occurrence + 22, // 12: scip.Signature.occurrences:type_name -> scip.Occurrence 19, // 13: scip.SymbolInformation.relationships:type_name -> scip.Relationship 9, // 14: scip.SymbolInformation.kind:type_name -> scip.SymbolInformation.Kind 17, // 15: scip.SymbolInformation.signature_documentation:type_name -> scip.Signature - 4, // 16: scip.Occurrence.syntax_kind:type_name -> scip.SyntaxKind - 21, // 17: scip.Occurrence.diagnostics:type_name -> scip.Diagnostic - 5, // 18: scip.Diagnostic.severity:type_name -> scip.Severity - 6, // 19: scip.Diagnostic.tags:type_name -> scip.DiagnosticTag - 20, // [20:20] is the sub-list for method output_type - 20, // [20:20] is the sub-list for method input_type - 20, // [20:20] is the sub-list for extension type_name - 20, // [20:20] is the sub-list for extension extendee - 0, // [0:20] is the sub-list for field type_name + 20, // 16: scip.Occurrence.single_line_range:type_name -> scip.SingleLineRange + 21, // 17: scip.Occurrence.multi_line_range:type_name -> scip.MultiLineRange + 4, // 18: scip.Occurrence.syntax_kind:type_name -> scip.SyntaxKind + 23, // 19: scip.Occurrence.diagnostics:type_name -> scip.Diagnostic + 20, // 20: scip.Occurrence.single_line_enclosing_range:type_name -> scip.SingleLineRange + 21, // 21: scip.Occurrence.multi_line_enclosing_range:type_name -> scip.MultiLineRange + 5, // 22: scip.Diagnostic.severity:type_name -> scip.Severity + 6, // 23: scip.Diagnostic.tags:type_name -> scip.DiagnosticTag + 24, // [24:24] is the sub-list for method output_type + 24, // [24:24] is the sub-list for method input_type + 24, // [24:24] is the sub-list for extension type_name + 24, // [24:24] is the sub-list for extension extendee + 0, // [0:24] is the sub-list for field type_name } func init() { file_scip_proto_init() } @@ -3050,13 +3303,19 @@ func file_scip_proto_init() { if File_scip_proto != nil { return } + file_scip_proto_msgTypes[12].OneofWrappers = []any{ + (*Occurrence_SingleLineRange)(nil), + (*Occurrence_MultiLineRange)(nil), + (*Occurrence_SingleLineEnclosingRange)(nil), + (*Occurrence_MultiLineEnclosingRange)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_scip_proto_rawDesc), len(file_scip_proto_rawDesc)), NumEnums: 10, - NumMessages: 12, + NumMessages: 14, NumExtensions: 0, NumServices: 0, }, diff --git a/bindings/haskell/src/Proto/Scip.hs b/bindings/haskell/src/Proto/Scip.hs index 67967260..2fc96436 100644 --- a/bindings/haskell/src/Proto/Scip.hs +++ b/bindings/haskell/src/Proto/Scip.hs @@ -9,13 +9,17 @@ module Proto.Scip ( Descriptor'Suffix'UnrecognizedValue, Diagnostic(), DiagnosticTag(..), DiagnosticTag(), DiagnosticTag'UnrecognizedValue, Document(), Index(), Language(..), - Language(), Language'UnrecognizedValue, Metadata(), Occurrence(), - Package(), PositionEncoding(..), PositionEncoding(), + Language(), Language'UnrecognizedValue, Metadata(), + MultiLineRange(), Occurrence(), Occurrence'TypedRange(..), + Occurrence'TypedEnclosingRange(..), _Occurrence'SingleLineRange, + _Occurrence'MultiLineRange, _Occurrence'SingleLineEnclosingRange, + _Occurrence'MultiLineEnclosingRange, Package(), + PositionEncoding(..), PositionEncoding(), PositionEncoding'UnrecognizedValue, ProtocolVersion(..), ProtocolVersion(), ProtocolVersion'UnrecognizedValue, Relationship(), Severity(..), Severity(), - Severity'UnrecognizedValue, Signature(), Symbol(), - SymbolInformation(), SymbolInformation'Kind(..), + Severity'UnrecognizedValue, Signature(), SingleLineRange(), + Symbol(), SymbolInformation(), SymbolInformation'Kind(..), SymbolInformation'Kind(), SymbolInformation'Kind'UnrecognizedValue, SymbolRole(..), SymbolRole(), SymbolRole'UnrecognizedValue, SyntaxKind(..), SyntaxKind(IdentifierKeyword, IdentifierModule), @@ -2524,6 +2528,245 @@ instance Control.DeepSeq.NFData Metadata where (_Metadata'textDocumentEncoding x__) ())))) {- | Fields : + * 'Proto.Scip_Fields.startLine' @:: Lens' MultiLineRange Data.Int.Int32@ + * 'Proto.Scip_Fields.startCharacter' @:: Lens' MultiLineRange Data.Int.Int32@ + * 'Proto.Scip_Fields.endLine' @:: Lens' MultiLineRange Data.Int.Int32@ + * 'Proto.Scip_Fields.endCharacter' @:: Lens' MultiLineRange Data.Int.Int32@ -} +data MultiLineRange + = MultiLineRange'_constructor {_MultiLineRange'startLine :: !Data.Int.Int32, + _MultiLineRange'startCharacter :: !Data.Int.Int32, + _MultiLineRange'endLine :: !Data.Int.Int32, + _MultiLineRange'endCharacter :: !Data.Int.Int32, + _MultiLineRange'_unknownFields :: !Data.ProtoLens.FieldSet} + deriving stock (Prelude.Eq, Prelude.Ord) +instance Prelude.Show MultiLineRange where + showsPrec _ __x __s + = Prelude.showChar + '{' + (Prelude.showString + (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s)) +instance Data.ProtoLens.Field.HasField MultiLineRange "startLine" Data.Int.Int32 where + fieldOf _ + = (Prelude..) + (Lens.Family2.Unchecked.lens + _MultiLineRange'startLine + (\ x__ y__ -> x__ {_MultiLineRange'startLine = y__})) + Prelude.id +instance Data.ProtoLens.Field.HasField MultiLineRange "startCharacter" Data.Int.Int32 where + fieldOf _ + = (Prelude..) + (Lens.Family2.Unchecked.lens + _MultiLineRange'startCharacter + (\ x__ y__ -> x__ {_MultiLineRange'startCharacter = y__})) + Prelude.id +instance Data.ProtoLens.Field.HasField MultiLineRange "endLine" Data.Int.Int32 where + fieldOf _ + = (Prelude..) + (Lens.Family2.Unchecked.lens + _MultiLineRange'endLine + (\ x__ y__ -> x__ {_MultiLineRange'endLine = y__})) + Prelude.id +instance Data.ProtoLens.Field.HasField MultiLineRange "endCharacter" Data.Int.Int32 where + fieldOf _ + = (Prelude..) + (Lens.Family2.Unchecked.lens + _MultiLineRange'endCharacter + (\ x__ y__ -> x__ {_MultiLineRange'endCharacter = y__})) + Prelude.id +instance Data.ProtoLens.Message MultiLineRange where + messageName _ = Data.Text.pack "scip.MultiLineRange" + packedMessageDescriptor _ + = "\n\ + \\SOMultiLineRange\DC2\GS\n\ + \\n\ + \start_line\CAN\SOH \SOH(\ENQR\tstartLine\DC2'\n\ + \\SIstart_character\CAN\STX \SOH(\ENQR\SOstartCharacter\DC2\EM\n\ + \\bend_line\CAN\ETX \SOH(\ENQR\aendLine\DC2#\n\ + \\rend_character\CAN\EOT \SOH(\ENQR\fendCharacter" + packedFileDescriptor _ = packedFileDescriptor + fieldsByTag + = let + startLine__field_descriptor + = Data.ProtoLens.FieldDescriptor + "start_line" + (Data.ProtoLens.ScalarField Data.ProtoLens.Int32Field :: + Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32) + (Data.ProtoLens.PlainField + Data.ProtoLens.Optional + (Data.ProtoLens.Field.field @"startLine")) :: + Data.ProtoLens.FieldDescriptor MultiLineRange + startCharacter__field_descriptor + = Data.ProtoLens.FieldDescriptor + "start_character" + (Data.ProtoLens.ScalarField Data.ProtoLens.Int32Field :: + Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32) + (Data.ProtoLens.PlainField + Data.ProtoLens.Optional + (Data.ProtoLens.Field.field @"startCharacter")) :: + Data.ProtoLens.FieldDescriptor MultiLineRange + endLine__field_descriptor + = Data.ProtoLens.FieldDescriptor + "end_line" + (Data.ProtoLens.ScalarField Data.ProtoLens.Int32Field :: + Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32) + (Data.ProtoLens.PlainField + Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"endLine")) :: + Data.ProtoLens.FieldDescriptor MultiLineRange + endCharacter__field_descriptor + = Data.ProtoLens.FieldDescriptor + "end_character" + (Data.ProtoLens.ScalarField Data.ProtoLens.Int32Field :: + Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32) + (Data.ProtoLens.PlainField + Data.ProtoLens.Optional + (Data.ProtoLens.Field.field @"endCharacter")) :: + Data.ProtoLens.FieldDescriptor MultiLineRange + in + Data.Map.fromList + [(Data.ProtoLens.Tag 1, startLine__field_descriptor), + (Data.ProtoLens.Tag 2, startCharacter__field_descriptor), + (Data.ProtoLens.Tag 3, endLine__field_descriptor), + (Data.ProtoLens.Tag 4, endCharacter__field_descriptor)] + unknownFields + = Lens.Family2.Unchecked.lens + _MultiLineRange'_unknownFields + (\ x__ y__ -> x__ {_MultiLineRange'_unknownFields = y__}) + defMessage + = MultiLineRange'_constructor + {_MultiLineRange'startLine = Data.ProtoLens.fieldDefault, + _MultiLineRange'startCharacter = Data.ProtoLens.fieldDefault, + _MultiLineRange'endLine = Data.ProtoLens.fieldDefault, + _MultiLineRange'endCharacter = Data.ProtoLens.fieldDefault, + _MultiLineRange'_unknownFields = []} + parseMessage + = let + loop :: + MultiLineRange + -> Data.ProtoLens.Encoding.Bytes.Parser MultiLineRange + loop x + = do end <- Data.ProtoLens.Encoding.Bytes.atEnd + if end then + do (let missing = [] + in + if Prelude.null missing then + Prelude.return () + else + Prelude.fail + ((Prelude.++) + "Missing required fields: " + (Prelude.show (missing :: [Prelude.String])))) + Prelude.return + (Lens.Family2.over + Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x) + else + do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt + case tag of + 8 -> do y <- (Data.ProtoLens.Encoding.Bytes.) + (Prelude.fmap + Prelude.fromIntegral + Data.ProtoLens.Encoding.Bytes.getVarInt) + "start_line" + loop + (Lens.Family2.set (Data.ProtoLens.Field.field @"startLine") y x) + 16 + -> do y <- (Data.ProtoLens.Encoding.Bytes.) + (Prelude.fmap + Prelude.fromIntegral + Data.ProtoLens.Encoding.Bytes.getVarInt) + "start_character" + loop + (Lens.Family2.set + (Data.ProtoLens.Field.field @"startCharacter") y x) + 24 + -> do y <- (Data.ProtoLens.Encoding.Bytes.) + (Prelude.fmap + Prelude.fromIntegral + Data.ProtoLens.Encoding.Bytes.getVarInt) + "end_line" + loop (Lens.Family2.set (Data.ProtoLens.Field.field @"endLine") y x) + 32 + -> do y <- (Data.ProtoLens.Encoding.Bytes.) + (Prelude.fmap + Prelude.fromIntegral + Data.ProtoLens.Encoding.Bytes.getVarInt) + "end_character" + loop + (Lens.Family2.set + (Data.ProtoLens.Field.field @"endCharacter") y x) + wire + -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire + wire + loop + (Lens.Family2.over + Data.ProtoLens.unknownFields (\ !t -> (:) y t) x) + in + (Data.ProtoLens.Encoding.Bytes.) + (do loop Data.ProtoLens.defMessage) "MultiLineRange" + buildMessage + = \ _x + -> (Data.Monoid.<>) + (let + _v = Lens.Family2.view (Data.ProtoLens.Field.field @"startLine") _x + in + if (Prelude.==) _v Data.ProtoLens.fieldDefault then + Data.Monoid.mempty + else + (Data.Monoid.<>) + (Data.ProtoLens.Encoding.Bytes.putVarInt 8) + ((Prelude..) + Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v)) + ((Data.Monoid.<>) + (let + _v + = Lens.Family2.view + (Data.ProtoLens.Field.field @"startCharacter") _x + in + if (Prelude.==) _v Data.ProtoLens.fieldDefault then + Data.Monoid.mempty + else + (Data.Monoid.<>) + (Data.ProtoLens.Encoding.Bytes.putVarInt 16) + ((Prelude..) + Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v)) + ((Data.Monoid.<>) + (let + _v = Lens.Family2.view (Data.ProtoLens.Field.field @"endLine") _x + in + if (Prelude.==) _v Data.ProtoLens.fieldDefault then + Data.Monoid.mempty + else + (Data.Monoid.<>) + (Data.ProtoLens.Encoding.Bytes.putVarInt 24) + ((Prelude..) + Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v)) + ((Data.Monoid.<>) + (let + _v + = Lens.Family2.view (Data.ProtoLens.Field.field @"endCharacter") _x + in + if (Prelude.==) _v Data.ProtoLens.fieldDefault then + Data.Monoid.mempty + else + (Data.Monoid.<>) + (Data.ProtoLens.Encoding.Bytes.putVarInt 32) + ((Prelude..) + Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v)) + (Data.ProtoLens.Encoding.Wire.buildFieldSet + (Lens.Family2.view Data.ProtoLens.unknownFields _x))))) +instance Control.DeepSeq.NFData MultiLineRange where + rnf + = \ x__ + -> Control.DeepSeq.deepseq + (_MultiLineRange'_unknownFields x__) + (Control.DeepSeq.deepseq + (_MultiLineRange'startLine x__) + (Control.DeepSeq.deepseq + (_MultiLineRange'startCharacter x__) + (Control.DeepSeq.deepseq + (_MultiLineRange'endLine x__) + (Control.DeepSeq.deepseq (_MultiLineRange'endCharacter x__) ())))) +{- | Fields : + * 'Proto.Scip_Fields.range' @:: Lens' Occurrence [Data.Int.Int32]@ * 'Proto.Scip_Fields.vec'range' @:: Lens' Occurrence (Data.Vector.Unboxed.Vector Data.Int.Int32)@ * 'Proto.Scip_Fields.symbol' @:: Lens' Occurrence Data.Text.Text@ @@ -2534,7 +2777,17 @@ instance Control.DeepSeq.NFData Metadata where * 'Proto.Scip_Fields.diagnostics' @:: Lens' Occurrence [Diagnostic]@ * 'Proto.Scip_Fields.vec'diagnostics' @:: Lens' Occurrence (Data.Vector.Vector Diagnostic)@ * 'Proto.Scip_Fields.enclosingRange' @:: Lens' Occurrence [Data.Int.Int32]@ - * 'Proto.Scip_Fields.vec'enclosingRange' @:: Lens' Occurrence (Data.Vector.Unboxed.Vector Data.Int.Int32)@ -} + * 'Proto.Scip_Fields.vec'enclosingRange' @:: Lens' Occurrence (Data.Vector.Unboxed.Vector Data.Int.Int32)@ + * 'Proto.Scip_Fields.maybe'typedRange' @:: Lens' Occurrence (Prelude.Maybe Occurrence'TypedRange)@ + * 'Proto.Scip_Fields.maybe'singleLineRange' @:: Lens' Occurrence (Prelude.Maybe SingleLineRange)@ + * 'Proto.Scip_Fields.singleLineRange' @:: Lens' Occurrence SingleLineRange@ + * 'Proto.Scip_Fields.maybe'multiLineRange' @:: Lens' Occurrence (Prelude.Maybe MultiLineRange)@ + * 'Proto.Scip_Fields.multiLineRange' @:: Lens' Occurrence MultiLineRange@ + * 'Proto.Scip_Fields.maybe'typedEnclosingRange' @:: Lens' Occurrence (Prelude.Maybe Occurrence'TypedEnclosingRange)@ + * 'Proto.Scip_Fields.maybe'singleLineEnclosingRange' @:: Lens' Occurrence (Prelude.Maybe SingleLineRange)@ + * 'Proto.Scip_Fields.singleLineEnclosingRange' @:: Lens' Occurrence SingleLineRange@ + * 'Proto.Scip_Fields.maybe'multiLineEnclosingRange' @:: Lens' Occurrence (Prelude.Maybe MultiLineRange)@ + * 'Proto.Scip_Fields.multiLineEnclosingRange' @:: Lens' Occurrence MultiLineRange@ -} data Occurrence = Occurrence'_constructor {_Occurrence'range :: !(Data.Vector.Unboxed.Vector Data.Int.Int32), _Occurrence'symbol :: !Data.Text.Text, @@ -2543,6 +2796,8 @@ data Occurrence _Occurrence'syntaxKind :: !SyntaxKind, _Occurrence'diagnostics :: !(Data.Vector.Vector Diagnostic), _Occurrence'enclosingRange :: !(Data.Vector.Unboxed.Vector Data.Int.Int32), + _Occurrence'typedRange :: !(Prelude.Maybe Occurrence'TypedRange), + _Occurrence'typedEnclosingRange :: !(Prelude.Maybe Occurrence'TypedEnclosingRange), _Occurrence'_unknownFields :: !Data.ProtoLens.FieldSet} deriving stock (Prelude.Eq, Prelude.Ord) instance Prelude.Show Occurrence where @@ -2551,6 +2806,14 @@ instance Prelude.Show Occurrence where '{' (Prelude.showString (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s)) +data Occurrence'TypedRange + = Occurrence'SingleLineRange !SingleLineRange | + Occurrence'MultiLineRange !MultiLineRange + deriving stock (Prelude.Show, Prelude.Eq, Prelude.Ord) +data Occurrence'TypedEnclosingRange + = Occurrence'SingleLineEnclosingRange !SingleLineRange | + Occurrence'MultiLineEnclosingRange !MultiLineRange + deriving stock (Prelude.Show, Prelude.Eq, Prelude.Ord) instance Data.ProtoLens.Field.HasField Occurrence "range" [Data.Int.Int32] where fieldOf _ = (Prelude..) @@ -2633,20 +2896,153 @@ instance Data.ProtoLens.Field.HasField Occurrence "vec'enclosingRange" (Data.Vec _Occurrence'enclosingRange (\ x__ y__ -> x__ {_Occurrence'enclosingRange = y__})) Prelude.id +instance Data.ProtoLens.Field.HasField Occurrence "maybe'typedRange" (Prelude.Maybe Occurrence'TypedRange) where + fieldOf _ + = (Prelude..) + (Lens.Family2.Unchecked.lens + _Occurrence'typedRange + (\ x__ y__ -> x__ {_Occurrence'typedRange = y__})) + Prelude.id +instance Data.ProtoLens.Field.HasField Occurrence "maybe'singleLineRange" (Prelude.Maybe SingleLineRange) where + fieldOf _ + = (Prelude..) + (Lens.Family2.Unchecked.lens + _Occurrence'typedRange + (\ x__ y__ -> x__ {_Occurrence'typedRange = y__})) + (Lens.Family2.Unchecked.lens + (\ x__ + -> case x__ of + (Prelude.Just (Occurrence'SingleLineRange x__val)) + -> Prelude.Just x__val + _otherwise -> Prelude.Nothing) + (\ _ y__ -> Prelude.fmap Occurrence'SingleLineRange y__)) +instance Data.ProtoLens.Field.HasField Occurrence "singleLineRange" SingleLineRange where + fieldOf _ + = (Prelude..) + (Lens.Family2.Unchecked.lens + _Occurrence'typedRange + (\ x__ y__ -> x__ {_Occurrence'typedRange = y__})) + ((Prelude..) + (Lens.Family2.Unchecked.lens + (\ x__ + -> case x__ of + (Prelude.Just (Occurrence'SingleLineRange x__val)) + -> Prelude.Just x__val + _otherwise -> Prelude.Nothing) + (\ _ y__ -> Prelude.fmap Occurrence'SingleLineRange y__)) + (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)) +instance Data.ProtoLens.Field.HasField Occurrence "maybe'multiLineRange" (Prelude.Maybe MultiLineRange) where + fieldOf _ + = (Prelude..) + (Lens.Family2.Unchecked.lens + _Occurrence'typedRange + (\ x__ y__ -> x__ {_Occurrence'typedRange = y__})) + (Lens.Family2.Unchecked.lens + (\ x__ + -> case x__ of + (Prelude.Just (Occurrence'MultiLineRange x__val)) + -> Prelude.Just x__val + _otherwise -> Prelude.Nothing) + (\ _ y__ -> Prelude.fmap Occurrence'MultiLineRange y__)) +instance Data.ProtoLens.Field.HasField Occurrence "multiLineRange" MultiLineRange where + fieldOf _ + = (Prelude..) + (Lens.Family2.Unchecked.lens + _Occurrence'typedRange + (\ x__ y__ -> x__ {_Occurrence'typedRange = y__})) + ((Prelude..) + (Lens.Family2.Unchecked.lens + (\ x__ + -> case x__ of + (Prelude.Just (Occurrence'MultiLineRange x__val)) + -> Prelude.Just x__val + _otherwise -> Prelude.Nothing) + (\ _ y__ -> Prelude.fmap Occurrence'MultiLineRange y__)) + (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)) +instance Data.ProtoLens.Field.HasField Occurrence "maybe'typedEnclosingRange" (Prelude.Maybe Occurrence'TypedEnclosingRange) where + fieldOf _ + = (Prelude..) + (Lens.Family2.Unchecked.lens + _Occurrence'typedEnclosingRange + (\ x__ y__ -> x__ {_Occurrence'typedEnclosingRange = y__})) + Prelude.id +instance Data.ProtoLens.Field.HasField Occurrence "maybe'singleLineEnclosingRange" (Prelude.Maybe SingleLineRange) where + fieldOf _ + = (Prelude..) + (Lens.Family2.Unchecked.lens + _Occurrence'typedEnclosingRange + (\ x__ y__ -> x__ {_Occurrence'typedEnclosingRange = y__})) + (Lens.Family2.Unchecked.lens + (\ x__ + -> case x__ of + (Prelude.Just (Occurrence'SingleLineEnclosingRange x__val)) + -> Prelude.Just x__val + _otherwise -> Prelude.Nothing) + (\ _ y__ -> Prelude.fmap Occurrence'SingleLineEnclosingRange y__)) +instance Data.ProtoLens.Field.HasField Occurrence "singleLineEnclosingRange" SingleLineRange where + fieldOf _ + = (Prelude..) + (Lens.Family2.Unchecked.lens + _Occurrence'typedEnclosingRange + (\ x__ y__ -> x__ {_Occurrence'typedEnclosingRange = y__})) + ((Prelude..) + (Lens.Family2.Unchecked.lens + (\ x__ + -> case x__ of + (Prelude.Just (Occurrence'SingleLineEnclosingRange x__val)) + -> Prelude.Just x__val + _otherwise -> Prelude.Nothing) + (\ _ y__ -> Prelude.fmap Occurrence'SingleLineEnclosingRange y__)) + (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)) +instance Data.ProtoLens.Field.HasField Occurrence "maybe'multiLineEnclosingRange" (Prelude.Maybe MultiLineRange) where + fieldOf _ + = (Prelude..) + (Lens.Family2.Unchecked.lens + _Occurrence'typedEnclosingRange + (\ x__ y__ -> x__ {_Occurrence'typedEnclosingRange = y__})) + (Lens.Family2.Unchecked.lens + (\ x__ + -> case x__ of + (Prelude.Just (Occurrence'MultiLineEnclosingRange x__val)) + -> Prelude.Just x__val + _otherwise -> Prelude.Nothing) + (\ _ y__ -> Prelude.fmap Occurrence'MultiLineEnclosingRange y__)) +instance Data.ProtoLens.Field.HasField Occurrence "multiLineEnclosingRange" MultiLineRange where + fieldOf _ + = (Prelude..) + (Lens.Family2.Unchecked.lens + _Occurrence'typedEnclosingRange + (\ x__ y__ -> x__ {_Occurrence'typedEnclosingRange = y__})) + ((Prelude..) + (Lens.Family2.Unchecked.lens + (\ x__ + -> case x__ of + (Prelude.Just (Occurrence'MultiLineEnclosingRange x__val)) + -> Prelude.Just x__val + _otherwise -> Prelude.Nothing) + (\ _ y__ -> Prelude.fmap Occurrence'MultiLineEnclosingRange y__)) + (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)) instance Data.ProtoLens.Message Occurrence where messageName _ = Data.Text.pack "scip.Occurrence" packedMessageDescriptor _ = "\n\ \\n\ - \Occurrence\DC2\DC4\n\ - \\ENQrange\CAN\SOH \ETX(\ENQR\ENQrange\DC2\SYN\n\ + \Occurrence\DC2\CAN\n\ + \\ENQrange\CAN\SOH \ETX(\ENQR\ENQrangeB\STX\CAN\SOH\DC2C\n\ + \\DC1single_line_range\CAN\b \SOH(\v2\NAK.scip.SingleLineRangeH\NULR\SIsingleLineRange\DC2@\n\ + \\DLEmulti_line_range\CAN\t \SOH(\v2\DC4.scip.MultiLineRangeH\NULR\SOmultiLineRange\DC2\SYN\n\ \\ACKsymbol\CAN\STX \SOH(\tR\ACKsymbol\DC2!\n\ \\fsymbol_roles\CAN\ETX \SOH(\ENQR\vsymbolRoles\DC25\n\ \\SYNoverride_documentation\CAN\EOT \ETX(\tR\NAKoverrideDocumentation\DC21\n\ \\vsyntax_kind\CAN\ENQ \SOH(\SO2\DLE.scip.SyntaxKindR\n\ \syntaxKind\DC22\n\ - \\vdiagnostics\CAN\ACK \ETX(\v2\DLE.scip.DiagnosticR\vdiagnostics\DC2'\n\ - \\SIenclosing_range\CAN\a \ETX(\ENQR\SOenclosingRange" + \\vdiagnostics\CAN\ACK \ETX(\v2\DLE.scip.DiagnosticR\vdiagnostics\DC2+\n\ + \\SIenclosing_range\CAN\a \ETX(\ENQR\SOenclosingRangeB\STX\CAN\SOH\DC2V\n\ + \\ESCsingle_line_enclosing_range\CAN\n\ + \ \SOH(\v2\NAK.scip.SingleLineRangeH\SOHR\CANsingleLineEnclosingRange\DC2S\n\ + \\SUBmulti_line_enclosing_range\CAN\v \SOH(\v2\DC4.scip.MultiLineRangeH\SOHR\ETBmultiLineEnclosingRangeB\r\n\ + \\vtyped_rangeB\ETB\n\ + \\NAKtyped_enclosing_range" packedFileDescriptor _ = packedFileDescriptor fieldsByTag = let @@ -2711,6 +3107,38 @@ instance Data.ProtoLens.Message Occurrence where Data.ProtoLens.Packed (Data.ProtoLens.Field.field @"enclosingRange")) :: Data.ProtoLens.FieldDescriptor Occurrence + singleLineRange__field_descriptor + = Data.ProtoLens.FieldDescriptor + "single_line_range" + (Data.ProtoLens.MessageField Data.ProtoLens.MessageType :: + Data.ProtoLens.FieldTypeDescriptor SingleLineRange) + (Data.ProtoLens.OptionalField + (Data.ProtoLens.Field.field @"maybe'singleLineRange")) :: + Data.ProtoLens.FieldDescriptor Occurrence + multiLineRange__field_descriptor + = Data.ProtoLens.FieldDescriptor + "multi_line_range" + (Data.ProtoLens.MessageField Data.ProtoLens.MessageType :: + Data.ProtoLens.FieldTypeDescriptor MultiLineRange) + (Data.ProtoLens.OptionalField + (Data.ProtoLens.Field.field @"maybe'multiLineRange")) :: + Data.ProtoLens.FieldDescriptor Occurrence + singleLineEnclosingRange__field_descriptor + = Data.ProtoLens.FieldDescriptor + "single_line_enclosing_range" + (Data.ProtoLens.MessageField Data.ProtoLens.MessageType :: + Data.ProtoLens.FieldTypeDescriptor SingleLineRange) + (Data.ProtoLens.OptionalField + (Data.ProtoLens.Field.field @"maybe'singleLineEnclosingRange")) :: + Data.ProtoLens.FieldDescriptor Occurrence + multiLineEnclosingRange__field_descriptor + = Data.ProtoLens.FieldDescriptor + "multi_line_enclosing_range" + (Data.ProtoLens.MessageField Data.ProtoLens.MessageType :: + Data.ProtoLens.FieldTypeDescriptor MultiLineRange) + (Data.ProtoLens.OptionalField + (Data.ProtoLens.Field.field @"maybe'multiLineEnclosingRange")) :: + Data.ProtoLens.FieldDescriptor Occurrence in Data.Map.fromList [(Data.ProtoLens.Tag 1, range__field_descriptor), @@ -2719,7 +3147,12 @@ instance Data.ProtoLens.Message Occurrence where (Data.ProtoLens.Tag 4, overrideDocumentation__field_descriptor), (Data.ProtoLens.Tag 5, syntaxKind__field_descriptor), (Data.ProtoLens.Tag 6, diagnostics__field_descriptor), - (Data.ProtoLens.Tag 7, enclosingRange__field_descriptor)] + (Data.ProtoLens.Tag 7, enclosingRange__field_descriptor), + (Data.ProtoLens.Tag 8, singleLineRange__field_descriptor), + (Data.ProtoLens.Tag 9, multiLineRange__field_descriptor), + (Data.ProtoLens.Tag 10, + singleLineEnclosingRange__field_descriptor), + (Data.ProtoLens.Tag 11, multiLineEnclosingRange__field_descriptor)] unknownFields = Lens.Family2.Unchecked.lens _Occurrence'_unknownFields @@ -2733,6 +3166,8 @@ instance Data.ProtoLens.Message Occurrence where _Occurrence'syntaxKind = Data.ProtoLens.fieldDefault, _Occurrence'diagnostics = Data.Vector.Generic.empty, _Occurrence'enclosingRange = Data.Vector.Generic.empty, + _Occurrence'typedRange = Prelude.Nothing, + _Occurrence'typedEnclosingRange = Prelude.Nothing, _Occurrence'_unknownFields = []} parseMessage = let @@ -2912,6 +3347,50 @@ instance Data.ProtoLens.Message Occurrence where loop x mutable'diagnostics y mutable'overrideDocumentation mutable'range + 66 + -> do y <- (Data.ProtoLens.Encoding.Bytes.) + (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt + Data.ProtoLens.Encoding.Bytes.isolate + (Prelude.fromIntegral len) Data.ProtoLens.parseMessage) + "single_line_range" + loop + (Lens.Family2.set + (Data.ProtoLens.Field.field @"singleLineRange") y x) + mutable'diagnostics mutable'enclosingRange + mutable'overrideDocumentation mutable'range + 74 + -> do y <- (Data.ProtoLens.Encoding.Bytes.) + (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt + Data.ProtoLens.Encoding.Bytes.isolate + (Prelude.fromIntegral len) Data.ProtoLens.parseMessage) + "multi_line_range" + loop + (Lens.Family2.set + (Data.ProtoLens.Field.field @"multiLineRange") y x) + mutable'diagnostics mutable'enclosingRange + mutable'overrideDocumentation mutable'range + 82 + -> do y <- (Data.ProtoLens.Encoding.Bytes.) + (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt + Data.ProtoLens.Encoding.Bytes.isolate + (Prelude.fromIntegral len) Data.ProtoLens.parseMessage) + "single_line_enclosing_range" + loop + (Lens.Family2.set + (Data.ProtoLens.Field.field @"singleLineEnclosingRange") y x) + mutable'diagnostics mutable'enclosingRange + mutable'overrideDocumentation mutable'range + 90 + -> do y <- (Data.ProtoLens.Encoding.Bytes.) + (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt + Data.ProtoLens.Encoding.Bytes.isolate + (Prelude.fromIntegral len) Data.ProtoLens.parseMessage) + "multi_line_enclosing_range" + loop + (Lens.Family2.set + (Data.ProtoLens.Field.field @"multiLineEnclosingRange") y x) + mutable'diagnostics mutable'enclosingRange + mutable'overrideDocumentation mutable'range wire -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire wire @@ -3049,8 +3528,68 @@ instance Data.ProtoLens.Message Occurrence where Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral) p)))) - (Data.ProtoLens.Encoding.Wire.buildFieldSet - (Lens.Family2.view Data.ProtoLens.unknownFields _x)))))))) + ((Data.Monoid.<>) + (case + Lens.Family2.view + (Data.ProtoLens.Field.field @"maybe'typedRange") _x + of + Prelude.Nothing -> Data.Monoid.mempty + (Prelude.Just (Occurrence'SingleLineRange v)) + -> (Data.Monoid.<>) + (Data.ProtoLens.Encoding.Bytes.putVarInt 66) + ((Prelude..) + (\ bs + -> (Data.Monoid.<>) + (Data.ProtoLens.Encoding.Bytes.putVarInt + (Prelude.fromIntegral + (Data.ByteString.length bs))) + (Data.ProtoLens.Encoding.Bytes.putBytes bs)) + Data.ProtoLens.encodeMessage v) + (Prelude.Just (Occurrence'MultiLineRange v)) + -> (Data.Monoid.<>) + (Data.ProtoLens.Encoding.Bytes.putVarInt 74) + ((Prelude..) + (\ bs + -> (Data.Monoid.<>) + (Data.ProtoLens.Encoding.Bytes.putVarInt + (Prelude.fromIntegral + (Data.ByteString.length bs))) + (Data.ProtoLens.Encoding.Bytes.putBytes bs)) + Data.ProtoLens.encodeMessage v)) + ((Data.Monoid.<>) + (case + Lens.Family2.view + (Data.ProtoLens.Field.field + @"maybe'typedEnclosingRange") + _x + of + Prelude.Nothing -> Data.Monoid.mempty + (Prelude.Just (Occurrence'SingleLineEnclosingRange v)) + -> (Data.Monoid.<>) + (Data.ProtoLens.Encoding.Bytes.putVarInt 82) + ((Prelude..) + (\ bs + -> (Data.Monoid.<>) + (Data.ProtoLens.Encoding.Bytes.putVarInt + (Prelude.fromIntegral + (Data.ByteString.length bs))) + (Data.ProtoLens.Encoding.Bytes.putBytes + bs)) + Data.ProtoLens.encodeMessage v) + (Prelude.Just (Occurrence'MultiLineEnclosingRange v)) + -> (Data.Monoid.<>) + (Data.ProtoLens.Encoding.Bytes.putVarInt 90) + ((Prelude..) + (\ bs + -> (Data.Monoid.<>) + (Data.ProtoLens.Encoding.Bytes.putVarInt + (Prelude.fromIntegral + (Data.ByteString.length bs))) + (Data.ProtoLens.Encoding.Bytes.putBytes + bs)) + Data.ProtoLens.encodeMessage v)) + (Data.ProtoLens.Encoding.Wire.buildFieldSet + (Lens.Family2.view Data.ProtoLens.unknownFields _x)))))))))) instance Control.DeepSeq.NFData Occurrence where rnf = \ x__ @@ -3068,7 +3607,56 @@ instance Control.DeepSeq.NFData Occurrence where (_Occurrence'syntaxKind x__) (Control.DeepSeq.deepseq (_Occurrence'diagnostics x__) - (Control.DeepSeq.deepseq (_Occurrence'enclosingRange x__) ()))))))) + (Control.DeepSeq.deepseq + (_Occurrence'enclosingRange x__) + (Control.DeepSeq.deepseq + (_Occurrence'typedRange x__) + (Control.DeepSeq.deepseq + (_Occurrence'typedEnclosingRange x__) ()))))))))) +instance Control.DeepSeq.NFData Occurrence'TypedRange where + rnf (Occurrence'SingleLineRange x__) = Control.DeepSeq.rnf x__ + rnf (Occurrence'MultiLineRange x__) = Control.DeepSeq.rnf x__ +instance Control.DeepSeq.NFData Occurrence'TypedEnclosingRange where + rnf (Occurrence'SingleLineEnclosingRange x__) + = Control.DeepSeq.rnf x__ + rnf (Occurrence'MultiLineEnclosingRange x__) + = Control.DeepSeq.rnf x__ +_Occurrence'SingleLineRange :: + Data.ProtoLens.Prism.Prism' Occurrence'TypedRange SingleLineRange +_Occurrence'SingleLineRange + = Data.ProtoLens.Prism.prism' + Occurrence'SingleLineRange + (\ p__ + -> case p__ of + (Occurrence'SingleLineRange p__val) -> Prelude.Just p__val + _otherwise -> Prelude.Nothing) +_Occurrence'MultiLineRange :: + Data.ProtoLens.Prism.Prism' Occurrence'TypedRange MultiLineRange +_Occurrence'MultiLineRange + = Data.ProtoLens.Prism.prism' + Occurrence'MultiLineRange + (\ p__ + -> case p__ of + (Occurrence'MultiLineRange p__val) -> Prelude.Just p__val + _otherwise -> Prelude.Nothing) +_Occurrence'SingleLineEnclosingRange :: + Data.ProtoLens.Prism.Prism' Occurrence'TypedEnclosingRange SingleLineRange +_Occurrence'SingleLineEnclosingRange + = Data.ProtoLens.Prism.prism' + Occurrence'SingleLineEnclosingRange + (\ p__ + -> case p__ of + (Occurrence'SingleLineEnclosingRange p__val) -> Prelude.Just p__val + _otherwise -> Prelude.Nothing) +_Occurrence'MultiLineEnclosingRange :: + Data.ProtoLens.Prism.Prism' Occurrence'TypedEnclosingRange MultiLineRange +_Occurrence'MultiLineEnclosingRange + = Data.ProtoLens.Prism.prism' + Occurrence'MultiLineEnclosingRange + (\ p__ + -> case p__ of + (Occurrence'MultiLineEnclosingRange p__val) -> Prelude.Just p__val + _otherwise -> Prelude.Nothing) {- | Fields : * 'Proto.Scip_Fields.manager' @:: Lens' Package Data.Text.Text@ @@ -4012,6 +4600,201 @@ instance Control.DeepSeq.NFData Signature where (Control.DeepSeq.deepseq (_Signature'occurrences x__) ()))) {- | Fields : + * 'Proto.Scip_Fields.line' @:: Lens' SingleLineRange Data.Int.Int32@ + * 'Proto.Scip_Fields.startCharacter' @:: Lens' SingleLineRange Data.Int.Int32@ + * 'Proto.Scip_Fields.endCharacter' @:: Lens' SingleLineRange Data.Int.Int32@ -} +data SingleLineRange + = SingleLineRange'_constructor {_SingleLineRange'line :: !Data.Int.Int32, + _SingleLineRange'startCharacter :: !Data.Int.Int32, + _SingleLineRange'endCharacter :: !Data.Int.Int32, + _SingleLineRange'_unknownFields :: !Data.ProtoLens.FieldSet} + deriving stock (Prelude.Eq, Prelude.Ord) +instance Prelude.Show SingleLineRange where + showsPrec _ __x __s + = Prelude.showChar + '{' + (Prelude.showString + (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s)) +instance Data.ProtoLens.Field.HasField SingleLineRange "line" Data.Int.Int32 where + fieldOf _ + = (Prelude..) + (Lens.Family2.Unchecked.lens + _SingleLineRange'line + (\ x__ y__ -> x__ {_SingleLineRange'line = y__})) + Prelude.id +instance Data.ProtoLens.Field.HasField SingleLineRange "startCharacter" Data.Int.Int32 where + fieldOf _ + = (Prelude..) + (Lens.Family2.Unchecked.lens + _SingleLineRange'startCharacter + (\ x__ y__ -> x__ {_SingleLineRange'startCharacter = y__})) + Prelude.id +instance Data.ProtoLens.Field.HasField SingleLineRange "endCharacter" Data.Int.Int32 where + fieldOf _ + = (Prelude..) + (Lens.Family2.Unchecked.lens + _SingleLineRange'endCharacter + (\ x__ y__ -> x__ {_SingleLineRange'endCharacter = y__})) + Prelude.id +instance Data.ProtoLens.Message SingleLineRange where + messageName _ = Data.Text.pack "scip.SingleLineRange" + packedMessageDescriptor _ + = "\n\ + \\SISingleLineRange\DC2\DC2\n\ + \\EOTline\CAN\SOH \SOH(\ENQR\EOTline\DC2'\n\ + \\SIstart_character\CAN\STX \SOH(\ENQR\SOstartCharacter\DC2#\n\ + \\rend_character\CAN\ETX \SOH(\ENQR\fendCharacter" + packedFileDescriptor _ = packedFileDescriptor + fieldsByTag + = let + line__field_descriptor + = Data.ProtoLens.FieldDescriptor + "line" + (Data.ProtoLens.ScalarField Data.ProtoLens.Int32Field :: + Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32) + (Data.ProtoLens.PlainField + Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"line")) :: + Data.ProtoLens.FieldDescriptor SingleLineRange + startCharacter__field_descriptor + = Data.ProtoLens.FieldDescriptor + "start_character" + (Data.ProtoLens.ScalarField Data.ProtoLens.Int32Field :: + Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32) + (Data.ProtoLens.PlainField + Data.ProtoLens.Optional + (Data.ProtoLens.Field.field @"startCharacter")) :: + Data.ProtoLens.FieldDescriptor SingleLineRange + endCharacter__field_descriptor + = Data.ProtoLens.FieldDescriptor + "end_character" + (Data.ProtoLens.ScalarField Data.ProtoLens.Int32Field :: + Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32) + (Data.ProtoLens.PlainField + Data.ProtoLens.Optional + (Data.ProtoLens.Field.field @"endCharacter")) :: + Data.ProtoLens.FieldDescriptor SingleLineRange + in + Data.Map.fromList + [(Data.ProtoLens.Tag 1, line__field_descriptor), + (Data.ProtoLens.Tag 2, startCharacter__field_descriptor), + (Data.ProtoLens.Tag 3, endCharacter__field_descriptor)] + unknownFields + = Lens.Family2.Unchecked.lens + _SingleLineRange'_unknownFields + (\ x__ y__ -> x__ {_SingleLineRange'_unknownFields = y__}) + defMessage + = SingleLineRange'_constructor + {_SingleLineRange'line = Data.ProtoLens.fieldDefault, + _SingleLineRange'startCharacter = Data.ProtoLens.fieldDefault, + _SingleLineRange'endCharacter = Data.ProtoLens.fieldDefault, + _SingleLineRange'_unknownFields = []} + parseMessage + = let + loop :: + SingleLineRange + -> Data.ProtoLens.Encoding.Bytes.Parser SingleLineRange + loop x + = do end <- Data.ProtoLens.Encoding.Bytes.atEnd + if end then + do (let missing = [] + in + if Prelude.null missing then + Prelude.return () + else + Prelude.fail + ((Prelude.++) + "Missing required fields: " + (Prelude.show (missing :: [Prelude.String])))) + Prelude.return + (Lens.Family2.over + Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x) + else + do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt + case tag of + 8 -> do y <- (Data.ProtoLens.Encoding.Bytes.) + (Prelude.fmap + Prelude.fromIntegral + Data.ProtoLens.Encoding.Bytes.getVarInt) + "line" + loop (Lens.Family2.set (Data.ProtoLens.Field.field @"line") y x) + 16 + -> do y <- (Data.ProtoLens.Encoding.Bytes.) + (Prelude.fmap + Prelude.fromIntegral + Data.ProtoLens.Encoding.Bytes.getVarInt) + "start_character" + loop + (Lens.Family2.set + (Data.ProtoLens.Field.field @"startCharacter") y x) + 24 + -> do y <- (Data.ProtoLens.Encoding.Bytes.) + (Prelude.fmap + Prelude.fromIntegral + Data.ProtoLens.Encoding.Bytes.getVarInt) + "end_character" + loop + (Lens.Family2.set + (Data.ProtoLens.Field.field @"endCharacter") y x) + wire + -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire + wire + loop + (Lens.Family2.over + Data.ProtoLens.unknownFields (\ !t -> (:) y t) x) + in + (Data.ProtoLens.Encoding.Bytes.) + (do loop Data.ProtoLens.defMessage) "SingleLineRange" + buildMessage + = \ _x + -> (Data.Monoid.<>) + (let _v = Lens.Family2.view (Data.ProtoLens.Field.field @"line") _x + in + if (Prelude.==) _v Data.ProtoLens.fieldDefault then + Data.Monoid.mempty + else + (Data.Monoid.<>) + (Data.ProtoLens.Encoding.Bytes.putVarInt 8) + ((Prelude..) + Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v)) + ((Data.Monoid.<>) + (let + _v + = Lens.Family2.view + (Data.ProtoLens.Field.field @"startCharacter") _x + in + if (Prelude.==) _v Data.ProtoLens.fieldDefault then + Data.Monoid.mempty + else + (Data.Monoid.<>) + (Data.ProtoLens.Encoding.Bytes.putVarInt 16) + ((Prelude..) + Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v)) + ((Data.Monoid.<>) + (let + _v + = Lens.Family2.view (Data.ProtoLens.Field.field @"endCharacter") _x + in + if (Prelude.==) _v Data.ProtoLens.fieldDefault then + Data.Monoid.mempty + else + (Data.Monoid.<>) + (Data.ProtoLens.Encoding.Bytes.putVarInt 24) + ((Prelude..) + Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v)) + (Data.ProtoLens.Encoding.Wire.buildFieldSet + (Lens.Family2.view Data.ProtoLens.unknownFields _x)))) +instance Control.DeepSeq.NFData SingleLineRange where + rnf + = \ x__ + -> Control.DeepSeq.deepseq + (_SingleLineRange'_unknownFields x__) + (Control.DeepSeq.deepseq + (_SingleLineRange'line x__) + (Control.DeepSeq.deepseq + (_SingleLineRange'startCharacter x__) + (Control.DeepSeq.deepseq (_SingleLineRange'endCharacter x__) ()))) +{- | Fields : + * 'Proto.Scip_Fields.scheme' @:: Lens' Symbol Data.Text.Text@ * 'Proto.Scip_Fields.package' @:: Lens' Symbol Package@ * 'Proto.Scip_Fields.maybe'package' @:: Lens' Symbol (Prelude.Maybe Package)@ @@ -6419,17 +7202,34 @@ packedFileDescriptor \\fis_reference\CAN\STX \SOH(\bR\visReference\DC2+\n\ \\DC1is_implementation\CAN\ETX \SOH(\bR\DLEisImplementation\DC2,\n\ \\DC2is_type_definition\CAN\EOT \SOH(\bR\DLEisTypeDefinition\DC2#\n\ - \\ris_definition\CAN\ENQ \SOH(\bR\fisDefinition\"\164\STX\n\ - \\n\ - \Occurrence\DC2\DC4\n\ - \\ENQrange\CAN\SOH \ETX(\ENQR\ENQrange\DC2\SYN\n\ + \\ris_definition\CAN\ENQ \SOH(\bR\fisDefinition\"s\n\ + \\SISingleLineRange\DC2\DC2\n\ + \\EOTline\CAN\SOH \SOH(\ENQR\EOTline\DC2'\n\ + \\SIstart_character\CAN\STX \SOH(\ENQR\SOstartCharacter\DC2#\n\ + \\rend_character\CAN\ETX \SOH(\ENQR\fendCharacter\"\152\SOH\n\ + \\SOMultiLineRange\DC2\GS\n\ + \\n\ + \start_line\CAN\SOH \SOH(\ENQR\tstartLine\DC2'\n\ + \\SIstart_character\CAN\STX \SOH(\ENQR\SOstartCharacter\DC2\EM\n\ + \\bend_line\CAN\ETX \SOH(\ENQR\aendLine\DC2#\n\ + \\rend_character\CAN\EOT \SOH(\ENQR\fendCharacter\"\136\ENQ\n\ + \\n\ + \Occurrence\DC2\CAN\n\ + \\ENQrange\CAN\SOH \ETX(\ENQR\ENQrangeB\STX\CAN\SOH\DC2C\n\ + \\DC1single_line_range\CAN\b \SOH(\v2\NAK.scip.SingleLineRangeH\NULR\SIsingleLineRange\DC2@\n\ + \\DLEmulti_line_range\CAN\t \SOH(\v2\DC4.scip.MultiLineRangeH\NULR\SOmultiLineRange\DC2\SYN\n\ \\ACKsymbol\CAN\STX \SOH(\tR\ACKsymbol\DC2!\n\ \\fsymbol_roles\CAN\ETX \SOH(\ENQR\vsymbolRoles\DC25\n\ \\SYNoverride_documentation\CAN\EOT \ETX(\tR\NAKoverrideDocumentation\DC21\n\ \\vsyntax_kind\CAN\ENQ \SOH(\SO2\DLE.scip.SyntaxKindR\n\ \syntaxKind\DC22\n\ - \\vdiagnostics\CAN\ACK \ETX(\v2\DLE.scip.DiagnosticR\vdiagnostics\DC2'\n\ - \\SIenclosing_range\CAN\a \ETX(\ENQR\SOenclosingRange\"\167\SOH\n\ + \\vdiagnostics\CAN\ACK \ETX(\v2\DLE.scip.DiagnosticR\vdiagnostics\DC2+\n\ + \\SIenclosing_range\CAN\a \ETX(\ENQR\SOenclosingRangeB\STX\CAN\SOH\DC2V\n\ + \\ESCsingle_line_enclosing_range\CAN\n\ + \ \SOH(\v2\NAK.scip.SingleLineRangeH\SOHR\CANsingleLineEnclosingRange\DC2S\n\ + \\SUBmulti_line_enclosing_range\CAN\v \SOH(\v2\DC4.scip.MultiLineRangeH\SOHR\ETBmultiLineEnclosingRangeB\r\n\ + \\vtyped_rangeB\ETB\n\ + \\NAKtyped_enclosing_range\"\167\SOH\n\ \\n\ \Diagnostic\DC2*\n\ \\bseverity\CAN\SOH \SOH(\SO2\SO.scip.SeverityR\bseverity\DC2\DC2\n\ @@ -6655,9 +7455,9 @@ packedFileDescriptor \\ETXXSL\DLE \DC2\b\n\ \\EOTYAML\DLEJ\DC2\a\n\ \\ETXZig\DLE&BN\n\ - \\DC2org.scip_code.scipB\tScipProtoP\SOHZ+github.com/scip-code/scip/bindings/go/scip/J\158\191\STX\n\ + \\DC2org.scip_code.scipB\tScipProtoP\SOHZ+github.com/scip-code/scip/bindings/go/scip/J\167\199\STX\n\ \\a\DC2\ENQ\n\ - \\NUL\131\a\SOH\n\ + \\NUL\156\a\SOH\n\ \\130\EOT\n\ \\SOH\f\DC2\ETX\n\ \\NUL\DC22\247\ETX An index contains one or more pieces of information about a given piece of\n\ @@ -8467,29 +9267,124 @@ packedFileDescriptor \\n\ \\r\n\ \\ENQ\ENQ\EOT\STX&\STX\DC2\EOT\255\EOT\DC1\DC3\n\ - \\249\SOH\n\ + \_\n\ \\STX\EOT\n\ - \\DC2\ACK\135\ENQ\NUL\232\ENQ\SOH\SUB\234\SOH Occurrence associates a source position with a symbol and/or highlighting\n\ + \\DC2\ACK\131\ENQ\NUL\135\ENQ\SOH\SUBQ SingleLineRange represents a half-open [start, end) range within a single line.\n\ + \\n\ + \\v\n\ + \\ETX\EOT\n\ + \\SOH\DC2\EOT\131\ENQ\b\ETB\n\ + \\r\n\ + \\ENQ\EOT\n\ + \\STX\NUL\ENQ\DC2\EOT\132\ENQ\STX\a\n\ + \\f\n\ + \\EOT\EOT\n\ + \\STX\NUL\DC2\EOT\132\ENQ\STX\DC1\n\ + \\r\n\ + \\ENQ\EOT\n\ + \\STX\NUL\SOH\DC2\EOT\132\ENQ\b\f\n\ + \\r\n\ + \\ENQ\EOT\n\ + \\STX\NUL\ETX\DC2\EOT\132\ENQ\SI\DLE\n\ + \\r\n\ + \\ENQ\EOT\n\ + \\STX\SOH\ENQ\DC2\EOT\133\ENQ\STX\a\n\ + \\f\n\ + \\EOT\EOT\n\ + \\STX\SOH\DC2\EOT\133\ENQ\STX\FS\n\ + \\r\n\ + \\ENQ\EOT\n\ + \\STX\SOH\SOH\DC2\EOT\133\ENQ\b\ETB\n\ + \\r\n\ + \\ENQ\EOT\n\ + \\STX\SOH\ETX\DC2\EOT\133\ENQ\SUB\ESC\n\ + \\r\n\ + \\ENQ\EOT\n\ + \\STX\STX\ENQ\DC2\EOT\134\ENQ\STX\a\n\ + \\f\n\ + \\EOT\EOT\n\ + \\STX\STX\DC2\EOT\134\ENQ\STX\SUB\n\ + \\r\n\ + \\ENQ\EOT\n\ + \\STX\STX\SOH\DC2\EOT\134\ENQ\b\NAK\n\ + \\r\n\ + \\ENQ\EOT\n\ + \\STX\STX\ETX\DC2\EOT\134\ENQ\CAN\EM\n\ + \a\n\ + \\STX\EOT\v\DC2\ACK\138\ENQ\NUL\143\ENQ\SOH\SUBS MultiLineRange represents a half-open [start, end) range spanning multiple lines.\n\ + \\n\ + \\v\n\ + \\ETX\EOT\v\SOH\DC2\EOT\138\ENQ\b\SYN\n\ + \\r\n\ + \\ENQ\EOT\v\STX\NUL\ENQ\DC2\EOT\139\ENQ\STX\a\n\ + \\f\n\ + \\EOT\EOT\v\STX\NUL\DC2\EOT\139\ENQ\STX\ETB\n\ + \\r\n\ + \\ENQ\EOT\v\STX\NUL\SOH\DC2\EOT\139\ENQ\b\DC2\n\ + \\r\n\ + \\ENQ\EOT\v\STX\NUL\ETX\DC2\EOT\139\ENQ\NAK\SYN\n\ + \\r\n\ + \\ENQ\EOT\v\STX\SOH\ENQ\DC2\EOT\140\ENQ\STX\a\n\ + \\f\n\ + \\EOT\EOT\v\STX\SOH\DC2\EOT\140\ENQ\STX\FS\n\ + \\r\n\ + \\ENQ\EOT\v\STX\SOH\SOH\DC2\EOT\140\ENQ\b\ETB\n\ + \\r\n\ + \\ENQ\EOT\v\STX\SOH\ETX\DC2\EOT\140\ENQ\SUB\ESC\n\ + \\r\n\ + \\ENQ\EOT\v\STX\STX\ENQ\DC2\EOT\141\ENQ\STX\a\n\ + \\f\n\ + \\EOT\EOT\v\STX\STX\DC2\EOT\141\ENQ\STX\NAK\n\ + \\r\n\ + \\ENQ\EOT\v\STX\STX\SOH\DC2\EOT\141\ENQ\b\DLE\n\ + \\r\n\ + \\ENQ\EOT\v\STX\STX\ETX\DC2\EOT\141\ENQ\DC3\DC4\n\ + \\r\n\ + \\ENQ\EOT\v\STX\ETX\ENQ\DC2\EOT\142\ENQ\STX\a\n\ + \\f\n\ + \\EOT\EOT\v\STX\ETX\DC2\EOT\142\ENQ\STX\SUB\n\ + \\r\n\ + \\ENQ\EOT\v\STX\ETX\SOH\DC2\EOT\142\ENQ\b\NAK\n\ + \\r\n\ + \\ENQ\EOT\v\STX\ETX\ETX\DC2\EOT\142\ENQ\CAN\EM\n\ + \\249\SOH\n\ + \\STX\EOT\f\DC2\ACK\150\ENQ\NUL\129\ACK\SOH\SUB\234\SOH Occurrence associates a source position with a symbol and/or highlighting\n\ \ information.\n\ \\n\ \ If possible, indexers should try to bundle logically related information\n\ \ across occurrences into a single occurrence to reduce payload sizes.\n\ \\n\ \\v\n\ - \\ETX\EOT\n\ - \\SOH\DC2\EOT\135\ENQ\b\DC2\n\ + \\ETX\EOT\f\SOH\DC2\EOT\150\ENQ\b\DC2\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\NUL\EOT\DC2\EOT\159\ENQ\STX\n\ + \\ENQ\EOT\f\STX\NUL\EOT\DC2\EOT\163\ENQ\STX\n\ \\n\ - \\232\b\n\ - \\EOT\EOT\n\ - \\STX\NUL\DC2\EOT\159\ENQ\STX\ESC\SUB\217\b Half-open [start, end) range of this occurrence. Must be exactly three or four\n\ - \ elements:\n\ + \\224\ENQ\n\ + \\EOT\EOT\f\STX\NUL\DC2\EOT\163\ENQ\STX/\SUB\209\ENQ Deprecated: Use `single_line_range` or `multi_line_range` instead.\n\ \\n\ + \ Half-open [start, end) range. Must be exactly three or four elements:\n\ + \ - Three elements: `[startLine, startCharacter, endCharacter]` (single-line)\n\ \ - Four elements: `[startLine, startCharacter, endLine, endCharacter]`\n\ - \ - Three elements: `[startLine, startCharacter, endCharacter]`. The end line\n\ - \ is inferred to have the same value as the start line.\n\ + \\n\ + \ Historical note: the original draft of this schema had a `Range` message\n\ + \ type with `start` and `end` fields of type `Position`, mirroring LSP.\n\ + \ Benchmarks revealed that this encoding was inefficient and that we could\n\ + \ reduce the total payload size of an index by 50% by using `repeated int32`\n\ + \ instead. However, the lack of type safety led to the introduction of\n\ + \ `single_line_range` and `multi_line_range` as typed alternatives.\n\ + \\n\ + \\r\n\ + \\ENQ\EOT\f\STX\NUL\ENQ\DC2\EOT\163\ENQ\v\DLE\n\ + \\r\n\ + \\ENQ\EOT\f\STX\NUL\SOH\DC2\EOT\163\ENQ\DC1\SYN\n\ + \\r\n\ + \\ENQ\EOT\f\STX\NUL\ETX\DC2\EOT\163\ENQ\EM\SUB\n\ + \\r\n\ + \\ENQ\EOT\f\STX\NUL\b\DC2\EOT\163\ENQ\ESC.\n\ + \\SO\n\ + \\ACK\EOT\f\STX\NUL\b\ETX\DC2\EOT\163\ENQ\FS-\n\ + \\164\ETX\n\ + \\EOT\EOT\f\b\NUL\DC2\ACK\175\ENQ\STX\180\ENQ\ETX\SUB\147\ETX Half-open [start, end) source range of this occurrence.\n\ \\n\ \ It is allowed for the range to be empty (i.e. start==end).\n\ \\n\ @@ -8500,58 +9395,51 @@ packedFileDescriptor \ The 'character' value is interpreted based on the PositionEncoding for\n\ \ the Document.\n\ \\n\ - \ Historical note: the original draft of this schema had a `Range` message\n\ - \ type with `start` and `end` fields of type `Position`, mirroring LSP.\n\ - \ Benchmarks revealed that this encoding was inefficient and that we could\n\ - \ reduce the total payload size of an index by 50% by using `repeated int32`\n\ - \ instead. The `repeated int32` encoding is admittedly more embarrassing to\n\ - \ work with in some programming languages but we hope the performance\n\ - \ improvements make up for it.\n\ + \\r\n\ + \\ENQ\EOT\f\b\NUL\SOH\DC2\EOT\175\ENQ\b\DC3\n\ + \\r\n\ + \\ENQ\EOT\f\STX\SOH\ACK\DC2\EOT\177\ENQ\EOT\DC3\n\ + \-\n\ + \\EOT\EOT\f\STX\SOH\DC2\EOT\177\ENQ\EOT*\SUB\US Range spanning a single line.\n\ \\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\NUL\ENQ\DC2\EOT\159\ENQ\v\DLE\n\ + \\ENQ\EOT\f\STX\SOH\SOH\DC2\EOT\177\ENQ\DC4%\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\NUL\SOH\DC2\EOT\159\ENQ\DC1\SYN\n\ + \\ENQ\EOT\f\STX\SOH\ETX\DC2\EOT\177\ENQ()\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\NUL\ETX\DC2\EOT\159\ENQ\EM\SUB\n\ + \\ENQ\EOT\f\STX\STX\ACK\DC2\EOT\179\ENQ\EOT\DC2\n\ + \.\n\ + \\EOT\EOT\f\STX\STX\DC2\EOT\179\ENQ\EOT(\SUB Range spanning multiple lines.\n\ + \\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\SOH\ENQ\DC2\EOT\162\ENQ\STX\b\n\ + \\ENQ\EOT\f\STX\STX\SOH\DC2\EOT\179\ENQ\DC3#\n\ + \\r\n\ + \\ENQ\EOT\f\STX\STX\ETX\DC2\EOT\179\ENQ&'\n\ + \\r\n\ + \\ENQ\EOT\f\STX\ETX\ENQ\DC2\EOT\183\ENQ\STX\b\n\ \\138\SOH\n\ - \\EOT\EOT\n\ - \\STX\SOH\DC2\EOT\162\ENQ\STX\DC4\SUB| (optional) The symbol that appears at this position. See\n\ + \\EOT\EOT\f\STX\ETX\DC2\EOT\183\ENQ\STX\DC4\SUB| (optional) The symbol that appears at this position. See\n\ \ `SymbolInformation.symbol` for how to format symbols as strings.\n\ \\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\SOH\SOH\DC2\EOT\162\ENQ\t\SI\n\ + \\ENQ\EOT\f\STX\ETX\SOH\DC2\EOT\183\ENQ\t\SI\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\SOH\ETX\DC2\EOT\162\ENQ\DC2\DC3\n\ + \\ENQ\EOT\f\STX\ETX\ETX\DC2\EOT\183\ENQ\DC2\DC3\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\STX\ENQ\DC2\EOT\165\ENQ\STX\a\n\ + \\ENQ\EOT\f\STX\EOT\ENQ\DC2\EOT\186\ENQ\STX\a\n\ \\151\SOH\n\ - \\EOT\EOT\n\ - \\STX\STX\DC2\EOT\165\ENQ\STX\EM\SUB\136\SOH (optional) Bitset containing `SymbolRole`s in this occurrence.\n\ + \\EOT\EOT\f\STX\EOT\DC2\EOT\186\ENQ\STX\EM\SUB\136\SOH (optional) Bitset containing `SymbolRole`s in this occurrence.\n\ \ See `SymbolRole`'s documentation for how to read and write this field.\n\ \\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\STX\SOH\DC2\EOT\165\ENQ\b\DC4\n\ + \\ENQ\EOT\f\STX\EOT\SOH\DC2\EOT\186\ENQ\b\DC4\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\STX\ETX\DC2\EOT\165\ENQ\ETB\CAN\n\ + \\ENQ\EOT\f\STX\EOT\ETX\DC2\EOT\186\ENQ\ETB\CAN\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\ETX\EOT\DC2\EOT\174\ENQ\STX\n\ + \\ENQ\EOT\f\STX\ENQ\EOT\DC2\EOT\195\ENQ\STX\n\ \\n\ \\241\ETX\n\ - \\EOT\EOT\n\ - \\STX\ETX\DC2\EOT\174\ENQ\STX-\SUB\226\ETX (optional) CommonMark-formatted documentation for this specific range. If\n\ + \\EOT\EOT\f\STX\ENQ\DC2\EOT\195\ENQ\STX-\SUB\226\ETX (optional) CommonMark-formatted documentation for this specific range. If\n\ \ empty, the `Symbol.documentation` field is used instead. One example\n\ \ where this field might be useful is when the symbol represents a generic\n\ \ function (with abstract type parameters such as `List`) and at this\n\ @@ -8561,56 +9449,53 @@ packedFileDescriptor \ which commonly allow for type-changing assignment.\n\ \\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\ETX\ENQ\DC2\EOT\174\ENQ\v\DC1\n\ + \\ENQ\EOT\f\STX\ENQ\ENQ\DC2\EOT\195\ENQ\v\DC1\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\ETX\SOH\DC2\EOT\174\ENQ\DC2(\n\ + \\ENQ\EOT\f\STX\ENQ\SOH\DC2\EOT\195\ENQ\DC2(\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\ETX\ETX\DC2\EOT\174\ENQ+,\n\ + \\ENQ\EOT\f\STX\ENQ\ETX\DC2\EOT\195\ENQ+,\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\EOT\ACK\DC2\EOT\176\ENQ\STX\f\n\ + \\ENQ\EOT\f\STX\ACK\ACK\DC2\EOT\197\ENQ\STX\f\n\ \X\n\ - \\EOT\EOT\n\ - \\STX\EOT\DC2\EOT\176\ENQ\STX\GS\SUBJ (optional) What syntax highlighting class should be used for this range?\n\ + \\EOT\EOT\f\STX\ACK\DC2\EOT\197\ENQ\STX\GS\SUBJ (optional) What syntax highlighting class should be used for this range?\n\ \\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\EOT\SOH\DC2\EOT\176\ENQ\r\CAN\n\ + \\ENQ\EOT\f\STX\ACK\SOH\DC2\EOT\197\ENQ\r\CAN\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\EOT\ETX\DC2\EOT\176\ENQ\ESC\FS\n\ + \\ENQ\EOT\f\STX\ACK\ETX\DC2\EOT\197\ENQ\ESC\FS\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\ENQ\EOT\DC2\EOT\178\ENQ\STX\n\ + \\ENQ\EOT\f\STX\a\EOT\DC2\EOT\199\ENQ\STX\n\ \\n\ \W\n\ - \\EOT\EOT\n\ - \\STX\ENQ\DC2\EOT\178\ENQ\STX&\SUBI (optional) Diagnostics that have been reported for this specific range.\n\ + \\EOT\EOT\f\STX\a\DC2\EOT\199\ENQ\STX&\SUBI (optional) Diagnostics that have been reported for this specific range.\n\ \\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\ENQ\ACK\DC2\EOT\178\ENQ\v\NAK\n\ + \\ENQ\EOT\f\STX\a\ACK\DC2\EOT\199\ENQ\v\NAK\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\ENQ\SOH\DC2\EOT\178\ENQ\SYN!\n\ + \\ENQ\EOT\f\STX\a\SOH\DC2\EOT\199\ENQ\SYN!\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\ENQ\ETX\DC2\EOT\178\ENQ$%\n\ + \\ENQ\EOT\f\STX\a\ETX\DC2\EOT\199\ENQ$%\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\ACK\EOT\DC2\EOT\231\ENQ\STX\n\ + \\ENQ\EOT\f\STX\b\EOT\DC2\EOT\201\ENQ\STX\n\ \\n\ - \\183\SO\n\ - \\EOT\EOT\n\ - \\STX\ACK\DC2\EOT\231\ENQ\STX%\SUB\168\SO (optional) Using the same encoding as the sibling `range` field, half-open\n\ - \ source range of the nearest non-trivial enclosing AST node. This range must\n\ - \ enclose the `range` field. Example applications that make use of the\n\ - \ enclosing_range field:\n\ + \@\n\ + \\EOT\EOT\f\STX\b\DC2\EOT\201\ENQ\STX9\SUB2 Deprecated: Use `typed_enclosing_range` instead.\n\ \\n\ - \ - Call hierarchies: to determine what symbols are references from the body\n\ + \\r\n\ + \\ENQ\EOT\f\STX\b\ENQ\DC2\EOT\201\ENQ\v\DLE\n\ + \\r\n\ + \\ENQ\EOT\f\STX\b\SOH\DC2\EOT\201\ENQ\DC1 \n\ + \\r\n\ + \\ENQ\EOT\f\STX\b\ETX\DC2\EOT\201\ENQ#$\n\ + \\r\n\ + \\ENQ\EOT\f\STX\b\b\DC2\EOT\201\ENQ%8\n\ + \\SO\n\ + \\ACK\EOT\f\STX\b\b\ETX\DC2\EOT\201\ENQ&7\n\ + \\217\r\n\ + \\EOT\EOT\f\b\SOH\DC2\ACK\253\ENQ\STX\128\ACK\ETX\SUB\200\r (optional) Half-open source range of the nearest non-trivial enclosing AST\n\ + \ node. This range must enclose the occurrence range. Example applications:\n\ + \\n\ + \ - Call hierarchies: to determine what symbols are referenced from the body\n\ \ of a function\n\ \ - Symbol outline: to display breadcrumbs from the cursor position to the\n\ \ root of the file\n\ @@ -8659,129 +9544,142 @@ packedFileDescriptor \ ```\n\ \\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\ACK\ENQ\DC2\EOT\231\ENQ\v\DLE\n\ + \\ENQ\EOT\f\b\SOH\SOH\DC2\EOT\253\ENQ\b\GS\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\ACK\SOH\DC2\EOT\231\ENQ\DC1 \n\ + \\ENQ\EOT\f\STX\t\ACK\DC2\EOT\254\ENQ\EOT\DC3\n\ + \\f\n\ + \\EOT\EOT\f\STX\t\DC2\EOT\254\ENQ\EOT5\n\ \\r\n\ - \\ENQ\EOT\n\ - \\STX\ACK\ETX\DC2\EOT\231\ENQ#$\n\ + \\ENQ\EOT\f\STX\t\SOH\DC2\EOT\254\ENQ\DC4/\n\ + \\r\n\ + \\ENQ\EOT\f\STX\t\ETX\DC2\EOT\254\ENQ24\n\ + \\r\n\ + \\ENQ\EOT\f\STX\n\ + \\ACK\DC2\EOT\255\ENQ\EOT\DC2\n\ + \\f\n\ + \\EOT\EOT\f\STX\n\ + \\DC2\EOT\255\ENQ\EOT3\n\ + \\r\n\ + \\ENQ\EOT\f\STX\n\ + \\SOH\DC2\EOT\255\ENQ\DC3-\n\ + \\r\n\ + \\ENQ\EOT\f\STX\n\ + \\ETX\DC2\EOT\255\ENQ02\n\ \w\n\ - \\STX\EOT\v\DC2\ACK\236\ENQ\NUL\247\ENQ\SOH\SUBi Represents a diagnostic, such as a compiler error or warning, which should be\n\ + \\STX\EOT\r\DC2\ACK\133\ACK\NUL\144\ACK\SOH\SUBi Represents a diagnostic, such as a compiler error or warning, which should be\n\ \ reported for a document.\n\ \\n\ \\v\n\ - \\ETX\EOT\v\SOH\DC2\EOT\236\ENQ\b\DC2\n\ + \\ETX\EOT\r\SOH\DC2\EOT\133\ACK\b\DC2\n\ \\r\n\ - \\ENQ\EOT\v\STX\NUL\ACK\DC2\EOT\238\ENQ\STX\n\ + \\ENQ\EOT\r\STX\NUL\ACK\DC2\EOT\135\ACK\STX\n\ \\n\ \W\n\ - \\EOT\EOT\v\STX\NUL\DC2\EOT\238\ENQ\STX\CAN\SUBI Should this diagnostic be reported as an error, warning, info, or hint?\n\ + \\EOT\EOT\r\STX\NUL\DC2\EOT\135\ACK\STX\CAN\SUBI Should this diagnostic be reported as an error, warning, info, or hint?\n\ \\n\ \\r\n\ - \\ENQ\EOT\v\STX\NUL\SOH\DC2\EOT\238\ENQ\v\DC3\n\ + \\ENQ\EOT\r\STX\NUL\SOH\DC2\EOT\135\ACK\v\DC3\n\ \\r\n\ - \\ENQ\EOT\v\STX\NUL\ETX\DC2\EOT\238\ENQ\SYN\ETB\n\ + \\ENQ\EOT\r\STX\NUL\ETX\DC2\EOT\135\ACK\SYN\ETB\n\ \\r\n\ - \\ENQ\EOT\v\STX\SOH\ENQ\DC2\EOT\240\ENQ\STX\b\n\ + \\ENQ\EOT\r\STX\SOH\ENQ\DC2\EOT\137\ACK\STX\b\n\ \]\n\ - \\EOT\EOT\v\STX\SOH\DC2\EOT\240\ENQ\STX\DC2\SUBO (optional) Code of this diagnostic, which might appear in the user interface.\n\ + \\EOT\EOT\r\STX\SOH\DC2\EOT\137\ACK\STX\DC2\SUBO (optional) Code of this diagnostic, which might appear in the user interface.\n\ \\n\ \\r\n\ - \\ENQ\EOT\v\STX\SOH\SOH\DC2\EOT\240\ENQ\t\r\n\ + \\ENQ\EOT\r\STX\SOH\SOH\DC2\EOT\137\ACK\t\r\n\ \\r\n\ - \\ENQ\EOT\v\STX\SOH\ETX\DC2\EOT\240\ENQ\DLE\DC1\n\ + \\ENQ\EOT\r\STX\SOH\ETX\DC2\EOT\137\ACK\DLE\DC1\n\ \\r\n\ - \\ENQ\EOT\v\STX\STX\ENQ\DC2\EOT\242\ENQ\STX\b\n\ + \\ENQ\EOT\r\STX\STX\ENQ\DC2\EOT\139\ACK\STX\b\n\ \+\n\ - \\EOT\EOT\v\STX\STX\DC2\EOT\242\ENQ\STX\NAK\SUB\GS Message of this diagnostic.\n\ + \\EOT\EOT\r\STX\STX\DC2\EOT\139\ACK\STX\NAK\SUB\GS Message of this diagnostic.\n\ \\n\ \\r\n\ - \\ENQ\EOT\v\STX\STX\SOH\DC2\EOT\242\ENQ\t\DLE\n\ + \\ENQ\EOT\r\STX\STX\SOH\DC2\EOT\139\ACK\t\DLE\n\ \\r\n\ - \\ENQ\EOT\v\STX\STX\ETX\DC2\EOT\242\ENQ\DC3\DC4\n\ + \\ENQ\EOT\r\STX\STX\ETX\DC2\EOT\139\ACK\DC3\DC4\n\ \\r\n\ - \\ENQ\EOT\v\STX\ETX\ENQ\DC2\EOT\245\ENQ\STX\b\n\ + \\ENQ\EOT\r\STX\ETX\ENQ\DC2\EOT\142\ACK\STX\b\n\ \~\n\ - \\EOT\EOT\v\STX\ETX\DC2\EOT\245\ENQ\STX\DC4\SUBp (optional) Human-readable string describing the source of this diagnostic, e.g.\n\ + \\EOT\EOT\r\STX\ETX\DC2\EOT\142\ACK\STX\DC4\SUBp (optional) Human-readable string describing the source of this diagnostic, e.g.\n\ \ 'typescript' or 'super lint'.\n\ \\n\ \\r\n\ - \\ENQ\EOT\v\STX\ETX\SOH\DC2\EOT\245\ENQ\t\SI\n\ + \\ENQ\EOT\r\STX\ETX\SOH\DC2\EOT\142\ACK\t\SI\n\ \\r\n\ - \\ENQ\EOT\v\STX\ETX\ETX\DC2\EOT\245\ENQ\DC2\DC3\n\ + \\ENQ\EOT\r\STX\ETX\ETX\DC2\EOT\142\ACK\DC2\DC3\n\ \\r\n\ - \\ENQ\EOT\v\STX\EOT\EOT\DC2\EOT\246\ENQ\STX\n\ + \\ENQ\EOT\r\STX\EOT\EOT\DC2\EOT\143\ACK\STX\n\ \\n\ \\f\n\ - \\EOT\EOT\v\STX\EOT\DC2\EOT\246\ENQ\STX\"\n\ + \\EOT\EOT\r\STX\EOT\DC2\EOT\143\ACK\STX\"\n\ \\r\n\ - \\ENQ\EOT\v\STX\EOT\ACK\DC2\EOT\246\ENQ\v\CAN\n\ + \\ENQ\EOT\r\STX\EOT\ACK\DC2\EOT\143\ACK\v\CAN\n\ \\r\n\ - \\ENQ\EOT\v\STX\EOT\SOH\DC2\EOT\246\ENQ\EM\GS\n\ + \\ENQ\EOT\r\STX\EOT\SOH\DC2\EOT\143\ACK\EM\GS\n\ \\r\n\ - \\ENQ\EOT\v\STX\EOT\ETX\DC2\EOT\246\ENQ !\n\ + \\ENQ\EOT\r\STX\EOT\ETX\DC2\EOT\143\ACK !\n\ \\f\n\ - \\STX\ENQ\ENQ\DC2\ACK\249\ENQ\NUL\255\ENQ\SOH\n\ + \\STX\ENQ\ENQ\DC2\ACK\146\ACK\NUL\152\ACK\SOH\n\ \\v\n\ - \\ETX\ENQ\ENQ\SOH\DC2\EOT\249\ENQ\ENQ\r\n\ + \\ETX\ENQ\ENQ\SOH\DC2\EOT\146\ACK\ENQ\r\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\NUL\SOH\DC2\EOT\250\ENQ\STX\NAK\n\ + \\ENQ\ENQ\ENQ\STX\NUL\SOH\DC2\EOT\147\ACK\STX\NAK\n\ \\f\n\ - \\EOT\ENQ\ENQ\STX\NUL\DC2\EOT\250\ENQ\STX\SUB\n\ + \\EOT\ENQ\ENQ\STX\NUL\DC2\EOT\147\ACK\STX\SUB\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\NUL\STX\DC2\EOT\250\ENQ\CAN\EM\n\ + \\ENQ\ENQ\ENQ\STX\NUL\STX\DC2\EOT\147\ACK\CAN\EM\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\SOH\SOH\DC2\EOT\251\ENQ\STX\a\n\ + \\ENQ\ENQ\ENQ\STX\SOH\SOH\DC2\EOT\148\ACK\STX\a\n\ \\f\n\ - \\EOT\ENQ\ENQ\STX\SOH\DC2\EOT\251\ENQ\STX\f\n\ + \\EOT\ENQ\ENQ\STX\SOH\DC2\EOT\148\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\SOH\STX\DC2\EOT\251\ENQ\n\ + \\ENQ\ENQ\ENQ\STX\SOH\STX\DC2\EOT\148\ACK\n\ \\v\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\STX\SOH\DC2\EOT\252\ENQ\STX\t\n\ + \\ENQ\ENQ\ENQ\STX\STX\SOH\DC2\EOT\149\ACK\STX\t\n\ \\f\n\ - \\EOT\ENQ\ENQ\STX\STX\DC2\EOT\252\ENQ\STX\SO\n\ + \\EOT\ENQ\ENQ\STX\STX\DC2\EOT\149\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\STX\STX\DC2\EOT\252\ENQ\f\r\n\ + \\ENQ\ENQ\ENQ\STX\STX\STX\DC2\EOT\149\ACK\f\r\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\ETX\SOH\DC2\EOT\253\ENQ\STX\r\n\ + \\ENQ\ENQ\ENQ\STX\ETX\SOH\DC2\EOT\150\ACK\STX\r\n\ \\f\n\ - \\EOT\ENQ\ENQ\STX\ETX\DC2\EOT\253\ENQ\STX\DC2\n\ + \\EOT\ENQ\ENQ\STX\ETX\DC2\EOT\150\ACK\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\ETX\STX\DC2\EOT\253\ENQ\DLE\DC1\n\ + \\ENQ\ENQ\ENQ\STX\ETX\STX\DC2\EOT\150\ACK\DLE\DC1\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\EOT\SOH\DC2\EOT\254\ENQ\STX\ACK\n\ + \\ENQ\ENQ\ENQ\STX\EOT\SOH\DC2\EOT\151\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\ENQ\STX\EOT\DC2\EOT\254\ENQ\STX\v\n\ + \\EOT\ENQ\ENQ\STX\EOT\DC2\EOT\151\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\EOT\STX\DC2\EOT\254\ENQ\t\n\ + \\ENQ\ENQ\ENQ\STX\EOT\STX\DC2\EOT\151\ACK\t\n\ \\n\ \\f\n\ - \\STX\ENQ\ACK\DC2\ACK\129\ACK\NUL\133\ACK\SOH\n\ + \\STX\ENQ\ACK\DC2\ACK\154\ACK\NUL\158\ACK\SOH\n\ \\v\n\ - \\ETX\ENQ\ACK\SOH\DC2\EOT\129\ACK\ENQ\DC2\n\ + \\ETX\ENQ\ACK\SOH\DC2\EOT\154\ACK\ENQ\DC2\n\ \\r\n\ - \\ENQ\ENQ\ACK\STX\NUL\SOH\DC2\EOT\130\ACK\STX\SUB\n\ + \\ENQ\ENQ\ACK\STX\NUL\SOH\DC2\EOT\155\ACK\STX\SUB\n\ \\f\n\ - \\EOT\ENQ\ACK\STX\NUL\DC2\EOT\130\ACK\STX\US\n\ + \\EOT\ENQ\ACK\STX\NUL\DC2\EOT\155\ACK\STX\US\n\ \\r\n\ - \\ENQ\ENQ\ACK\STX\NUL\STX\DC2\EOT\130\ACK\GS\RS\n\ + \\ENQ\ENQ\ACK\STX\NUL\STX\DC2\EOT\155\ACK\GS\RS\n\ \\r\n\ - \\ENQ\ENQ\ACK\STX\SOH\SOH\DC2\EOT\131\ACK\STX\r\n\ + \\ENQ\ENQ\ACK\STX\SOH\SOH\DC2\EOT\156\ACK\STX\r\n\ \\f\n\ - \\EOT\ENQ\ACK\STX\SOH\DC2\EOT\131\ACK\STX\DC2\n\ + \\EOT\ENQ\ACK\STX\SOH\DC2\EOT\156\ACK\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\ACK\STX\SOH\STX\DC2\EOT\131\ACK\DLE\DC1\n\ + \\ENQ\ENQ\ACK\STX\SOH\STX\DC2\EOT\156\ACK\DLE\DC1\n\ \\r\n\ - \\ENQ\ENQ\ACK\STX\STX\SOH\DC2\EOT\132\ACK\STX\f\n\ + \\ENQ\ENQ\ACK\STX\STX\SOH\DC2\EOT\157\ACK\STX\f\n\ \\f\n\ - \\EOT\ENQ\ACK\STX\STX\DC2\EOT\132\ACK\STX\DC1\n\ + \\EOT\ENQ\ACK\STX\STX\DC2\EOT\157\ACK\STX\DC1\n\ \\r\n\ - \\ENQ\ENQ\ACK\STX\STX\STX\DC2\EOT\132\ACK\SI\DLE\n\ + \\ENQ\ENQ\ACK\STX\STX\STX\DC2\EOT\157\ACK\SI\DLE\n\ \\208\ETX\n\ - \\STX\ENQ\a\DC2\ACK\141\ACK\NUL\131\a\SOH\SUB\193\ETX Language standardises names of common programming languages that can be used\n\ + \\STX\ENQ\a\DC2\ACK\166\ACK\NUL\156\a\SOH\SUB\193\ETX Language standardises names of common programming languages that can be used\n\ \ for the `Document.language` field. The primary purpose of this enum is to\n\ \ prevent a situation where we have a single programming language ends up with\n\ \ multiple string representations. For example, the C++ language uses the name\n\ @@ -8789,707 +9687,707 @@ packedFileDescriptor \ Feel free to send a pull-request to add missing programming languages.\n\ \\n\ \\v\n\ - \\ETX\ENQ\a\SOH\DC2\EOT\141\ACK\ENQ\r\n\ + \\ETX\ENQ\a\SOH\DC2\EOT\166\ACK\ENQ\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\NUL\SOH\DC2\EOT\142\ACK\STX\NAK\n\ + \\ENQ\ENQ\a\STX\NUL\SOH\DC2\EOT\167\ACK\STX\NAK\n\ \\f\n\ - \\EOT\ENQ\a\STX\NUL\DC2\EOT\142\ACK\STX\SUB\n\ + \\EOT\ENQ\a\STX\NUL\DC2\EOT\167\ACK\STX\SUB\n\ \\r\n\ - \\ENQ\ENQ\a\STX\NUL\STX\DC2\EOT\142\ACK\CAN\EM\n\ + \\ENQ\ENQ\a\STX\NUL\STX\DC2\EOT\167\ACK\CAN\EM\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SOH\SOH\DC2\EOT\143\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX\SOH\SOH\DC2\EOT\168\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX\SOH\DC2\EOT\143\ACK\STX\f\n\ + \\EOT\ENQ\a\STX\SOH\DC2\EOT\168\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SOH\STX\DC2\EOT\143\ACK\t\v\n\ + \\ENQ\ENQ\a\STX\SOH\STX\DC2\EOT\168\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\STX\SOH\DC2\EOT\144\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX\STX\SOH\DC2\EOT\169\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX\STX\DC2\EOT\144\ACK\STX\f\n\ + \\EOT\ENQ\a\STX\STX\DC2\EOT\169\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX\STX\STX\DC2\EOT\144\ACK\t\v\n\ + \\ENQ\ENQ\a\STX\STX\STX\DC2\EOT\169\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ETX\SOH\DC2\EOT\145\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX\ETX\SOH\DC2\EOT\170\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX\ETX\DC2\EOT\145\ACK\STX\v\n\ + \\EOT\ENQ\a\STX\ETX\DC2\EOT\170\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ETX\STX\DC2\EOT\145\ACK\b\n\ + \\ENQ\ENQ\a\STX\ETX\STX\DC2\EOT\170\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX\EOT\SOH\DC2\EOT\146\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX\EOT\SOH\DC2\EOT\171\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX\EOT\DC2\EOT\146\ACK\STX\v\n\ + \\EOT\ENQ\a\STX\EOT\DC2\EOT\171\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\EOT\STX\DC2\EOT\146\ACK\b\n\ + \\ENQ\ENQ\a\STX\EOT\STX\DC2\EOT\171\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ENQ\SOH\DC2\EOT\147\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX\ENQ\SOH\DC2\EOT\172\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX\ENQ\DC2\EOT\147\ACK\STX\f\n\ + \\EOT\ENQ\a\STX\ENQ\DC2\EOT\172\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ENQ\STX\DC2\EOT\147\ACK\t\v\n\ + \\ENQ\ENQ\a\STX\ENQ\STX\DC2\EOT\172\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ACK\SOH\DC2\EOT\148\ACK\STX\n\ + \\ENQ\ENQ\a\STX\ACK\SOH\DC2\EOT\173\ACK\STX\n\ \\n\ \\f\n\ - \\EOT\ENQ\a\STX\ACK\DC2\EOT\148\ACK\STX\DLE\n\ + \\EOT\ENQ\a\STX\ACK\DC2\EOT\173\ACK\STX\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ACK\STX\DC2\EOT\148\ACK\r\SI\n\ + \\ENQ\ENQ\a\STX\ACK\STX\DC2\EOT\173\ACK\r\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX\a\SOH\DC2\EOT\149\ACK\STX\n\ + \\ENQ\ENQ\a\STX\a\SOH\DC2\EOT\174\ACK\STX\n\ \\n\ \\f\n\ - \\EOT\ENQ\a\STX\a\DC2\EOT\149\ACK\STX\DLE\n\ + \\EOT\ENQ\a\STX\a\DC2\EOT\174\ACK\STX\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STX\a\STX\DC2\EOT\149\ACK\r\SI\n\ + \\ENQ\ENQ\a\STX\a\STX\DC2\EOT\174\ACK\r\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX\b\SOH\DC2\EOT\150\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX\b\SOH\DC2\EOT\175\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX\b\DC2\EOT\150\ACK\STX\v\n\ + \\EOT\ENQ\a\STX\b\DC2\EOT\175\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\b\STX\DC2\EOT\150\ACK\b\n\ + \\ENQ\ENQ\a\STX\b\STX\DC2\EOT\175\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX\t\SOH\DC2\EOT\151\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX\t\SOH\DC2\EOT\176\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX\t\DC2\EOT\151\ACK\STX\v\n\ + \\EOT\ENQ\a\STX\t\DC2\EOT\176\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\t\STX\DC2\EOT\151\ACK\b\n\ + \\ENQ\ENQ\a\STX\t\STX\DC2\EOT\176\ACK\b\n\ \\n\ \\r\n\ \\ENQ\ENQ\a\STX\n\ - \\SOH\DC2\EOT\152\ACK\STX\b\n\ + \\SOH\DC2\EOT\177\ACK\STX\b\n\ \\f\n\ \\EOT\ENQ\a\STX\n\ - \\DC2\EOT\152\ACK\STX\SO\n\ + \\DC2\EOT\177\ACK\STX\SO\n\ \\r\n\ \\ENQ\ENQ\a\STX\n\ - \\STX\DC2\EOT\152\ACK\v\r\n\ + \\STX\DC2\EOT\177\ACK\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\v\SOH\DC2\EOT\153\ACK\STX\ETX\n\ + \\ENQ\ENQ\a\STX\v\SOH\DC2\EOT\178\ACK\STX\ETX\n\ \\f\n\ - \\EOT\ENQ\a\STX\v\DC2\EOT\153\ACK\STX\t\n\ + \\EOT\ENQ\a\STX\v\DC2\EOT\178\ACK\STX\t\n\ \\r\n\ - \\ENQ\ENQ\a\STX\v\STX\DC2\EOT\153\ACK\ACK\b\n\ + \\ENQ\ENQ\a\STX\v\STX\DC2\EOT\178\ACK\ACK\b\n\ \\r\n\ - \\ENQ\ENQ\a\STX\f\SOH\DC2\EOT\154\ACK\STX\a\n\ + \\ENQ\ENQ\a\STX\f\SOH\DC2\EOT\179\ACK\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STX\f\DC2\EOT\154\ACK\STX\r\n\ + \\EOT\ENQ\a\STX\f\DC2\EOT\179\ACK\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\f\STX\DC2\EOT\154\ACK\n\ + \\ENQ\ENQ\a\STX\f\STX\DC2\EOT\179\ACK\n\ \\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX\r\SOH\DC2\EOT\155\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX\r\SOH\DC2\EOT\180\ACK\STX\ENQ\n\ \G\n\ - \\EOT\ENQ\a\STX\r\DC2\EOT\155\ACK\STX\v\"9 C++ (the name \"CPP\" was chosen for consistency with LSP)\n\ + \\EOT\ENQ\a\STX\r\DC2\EOT\180\ACK\STX\v\"9 C++ (the name \"CPP\" was chosen for consistency with LSP)\n\ \\r\n\ - \\ENQ\ENQ\a\STX\r\STX\DC2\EOT\155\ACK\b\n\ + \\ENQ\ENQ\a\STX\r\STX\DC2\EOT\180\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SO\SOH\DC2\EOT\156\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX\SO\SOH\DC2\EOT\181\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX\SO\DC2\EOT\156\ACK\STX\v\n\ + \\EOT\ENQ\a\STX\SO\DC2\EOT\181\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SO\STX\DC2\EOT\156\ACK\b\n\ + \\ENQ\ENQ\a\STX\SO\STX\DC2\EOT\181\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SI\SOH\DC2\EOT\157\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX\SI\SOH\DC2\EOT\182\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX\SI\DC2\EOT\157\ACK\STX\r\n\ + \\EOT\ENQ\a\STX\SI\DC2\EOT\182\ACK\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SI\STX\DC2\EOT\157\ACK\v\f\n\ + \\ENQ\ENQ\a\STX\SI\STX\DC2\EOT\182\ACK\v\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DLE\SOH\DC2\EOT\158\ACK\STX\t\n\ + \\ENQ\ENQ\a\STX\DLE\SOH\DC2\EOT\183\ACK\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STX\DLE\DC2\EOT\158\ACK\STX\SO\n\ + \\EOT\ENQ\a\STX\DLE\DC2\EOT\183\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DLE\STX\DC2\EOT\158\ACK\f\r\n\ + \\ENQ\ENQ\a\STX\DLE\STX\DC2\EOT\183\ACK\f\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DC1\SOH\DC2\EOT\159\ACK\STX\SO\n\ + \\ENQ\ENQ\a\STX\DC1\SOH\DC2\EOT\184\ACK\STX\SO\n\ \\f\n\ - \\EOT\ENQ\a\STX\DC1\DC2\EOT\159\ACK\STX\DC4\n\ + \\EOT\ENQ\a\STX\DC1\DC2\EOT\184\ACK\STX\DC4\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DC1\STX\DC2\EOT\159\ACK\DC1\DC3\n\ + \\ENQ\ENQ\a\STX\DC1\STX\DC2\EOT\184\ACK\DC1\DC3\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DC2\SOH\DC2\EOT\160\ACK\STX\f\n\ + \\ENQ\ENQ\a\STX\DC2\SOH\DC2\EOT\185\ACK\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STX\DC2\DC2\EOT\160\ACK\STX\DC1\n\ + \\EOT\ENQ\a\STX\DC2\DC2\EOT\185\ACK\STX\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DC2\STX\DC2\EOT\160\ACK\SI\DLE\n\ + \\ENQ\ENQ\a\STX\DC2\STX\DC2\EOT\185\ACK\SI\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DC3\SOH\DC2\EOT\161\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX\DC3\SOH\DC2\EOT\186\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX\DC3\DC2\EOT\161\ACK\STX\v\n\ + \\EOT\ENQ\a\STX\DC3\DC2\EOT\186\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DC3\STX\DC2\EOT\161\ACK\b\n\ + \\ENQ\ENQ\a\STX\DC3\STX\DC2\EOT\186\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DC4\SOH\DC2\EOT\162\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX\DC4\SOH\DC2\EOT\187\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX\DC4\DC2\EOT\162\ACK\STX\f\n\ + \\EOT\ENQ\a\STX\DC4\DC2\EOT\187\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DC4\STX\DC2\EOT\162\ACK\t\v\n\ + \\ENQ\ENQ\a\STX\DC4\STX\DC2\EOT\187\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\NAK\SOH\DC2\EOT\163\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX\NAK\SOH\DC2\EOT\188\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX\NAK\DC2\EOT\163\ACK\STX\v\n\ + \\EOT\ENQ\a\STX\NAK\DC2\EOT\188\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\NAK\STX\DC2\EOT\163\ACK\t\n\ + \\ENQ\ENQ\a\STX\NAK\STX\DC2\EOT\188\ACK\t\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SYN\SOH\DC2\EOT\164\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX\SYN\SOH\DC2\EOT\189\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX\SYN\DC2\EOT\164\ACK\STX\SO\n\ + \\EOT\ENQ\a\STX\SYN\DC2\EOT\189\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SYN\STX\DC2\EOT\164\ACK\v\r\n\ + \\ENQ\ENQ\a\STX\SYN\STX\DC2\EOT\189\ACK\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ETB\SOH\DC2\EOT\165\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX\ETB\SOH\DC2\EOT\190\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX\ETB\DC2\EOT\165\ACK\STX\f\n\ + \\EOT\ENQ\a\STX\ETB\DC2\EOT\190\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ETB\STX\DC2\EOT\165\ACK\t\v\n\ + \\ENQ\ENQ\a\STX\ETB\STX\DC2\EOT\190\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\CAN\SOH\DC2\EOT\166\ACK\STX\f\n\ + \\ENQ\ENQ\a\STX\CAN\SOH\DC2\EOT\191\ACK\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STX\CAN\DC2\EOT\166\ACK\STX\DC2\n\ + \\EOT\ENQ\a\STX\CAN\DC2\EOT\191\ACK\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STX\CAN\STX\DC2\EOT\166\ACK\SI\DC1\n\ + \\ENQ\ENQ\a\STX\CAN\STX\DC2\EOT\191\ACK\SI\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STX\EM\SOH\DC2\EOT\167\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX\EM\SOH\DC2\EOT\192\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX\EM\DC2\EOT\167\ACK\STX\SO\n\ + \\EOT\ENQ\a\STX\EM\DC2\EOT\192\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX\EM\STX\DC2\EOT\167\ACK\v\r\n\ + \\ENQ\ENQ\a\STX\EM\STX\DC2\EOT\192\ACK\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SUB\SOH\DC2\EOT\168\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX\SUB\SOH\DC2\EOT\193\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX\SUB\DC2\EOT\168\ACK\STX\SO\n\ + \\EOT\ENQ\a\STX\SUB\DC2\EOT\193\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SUB\STX\DC2\EOT\168\ACK\v\r\n\ + \\ENQ\ENQ\a\STX\SUB\STX\DC2\EOT\193\ACK\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ESC\SOH\DC2\EOT\169\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX\ESC\SOH\DC2\EOT\194\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX\ESC\DC2\EOT\169\ACK\STX\SO\n\ + \\EOT\ENQ\a\STX\ESC\DC2\EOT\194\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ESC\STX\DC2\EOT\169\ACK\v\r\n\ + \\ENQ\ENQ\a\STX\ESC\STX\DC2\EOT\194\ACK\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\FS\SOH\DC2\EOT\170\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX\FS\SOH\DC2\EOT\195\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX\FS\DC2\EOT\170\ACK\STX\SO\n\ + \\EOT\ENQ\a\STX\FS\DC2\EOT\195\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX\FS\STX\DC2\EOT\170\ACK\v\r\n\ + \\ENQ\ENQ\a\STX\FS\STX\DC2\EOT\195\ACK\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\GS\SOH\DC2\EOT\171\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX\GS\SOH\DC2\EOT\196\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX\GS\DC2\EOT\171\ACK\STX\f\n\ + \\EOT\ENQ\a\STX\GS\DC2\EOT\196\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX\GS\STX\DC2\EOT\171\ACK\t\v\n\ + \\ENQ\ENQ\a\STX\GS\STX\DC2\EOT\196\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\RS\SOH\DC2\EOT\172\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX\RS\SOH\DC2\EOT\197\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX\RS\DC2\EOT\172\ACK\STX\f\n\ + \\EOT\ENQ\a\STX\RS\DC2\EOT\197\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX\RS\STX\DC2\EOT\172\ACK\t\v\n\ + \\ENQ\ENQ\a\STX\RS\STX\DC2\EOT\197\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\US\SOH\DC2\EOT\173\ACK\STX\t\n\ + \\ENQ\ENQ\a\STX\US\SOH\DC2\EOT\198\ACK\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STX\US\DC2\EOT\173\ACK\STX\SI\n\ + \\EOT\ENQ\a\STX\US\DC2\EOT\198\ACK\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX\US\STX\DC2\EOT\173\ACK\f\SO\n\ + \\ENQ\ENQ\a\STX\US\STX\DC2\EOT\198\ACK\f\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX \SOH\DC2\EOT\174\ACK\STX\f\n\ + \\ENQ\ENQ\a\STX \SOH\DC2\EOT\199\ACK\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STX \DC2\EOT\174\ACK\STX\DC2\n\ + \\EOT\ENQ\a\STX \DC2\EOT\199\ACK\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STX \STX\DC2\EOT\174\ACK\SI\DC1\n\ + \\ENQ\ENQ\a\STX \STX\DC2\EOT\199\ACK\SI\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STX!\SOH\DC2\EOT\175\ACK\STX\f\n\ + \\ENQ\ENQ\a\STX!\SOH\DC2\EOT\200\ACK\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STX!\DC2\EOT\175\ACK\STX\DC2\n\ + \\EOT\ENQ\a\STX!\DC2\EOT\200\ACK\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STX!\STX\DC2\EOT\175\ACK\SI\DC1\n\ + \\ENQ\ENQ\a\STX!\STX\DC2\EOT\200\ACK\SI\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STX\"\SOH\DC2\EOT\176\ACK\STX\f\n\ + \\ENQ\ENQ\a\STX\"\SOH\DC2\EOT\201\ACK\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STX\"\DC2\EOT\176\ACK\STX\DC2\n\ + \\EOT\ENQ\a\STX\"\DC2\EOT\201\ACK\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STX\"\STX\DC2\EOT\176\ACK\SI\DC1\n\ + \\ENQ\ENQ\a\STX\"\STX\DC2\EOT\201\ACK\SI\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STX#\SOH\DC2\EOT\177\ACK\STX\EOT\n\ + \\ENQ\ENQ\a\STX#\SOH\DC2\EOT\202\ACK\STX\EOT\n\ \\f\n\ - \\EOT\ENQ\a\STX#\DC2\EOT\177\ACK\STX\n\ + \\EOT\ENQ\a\STX#\DC2\EOT\202\ACK\STX\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX#\STX\DC2\EOT\177\ACK\a\t\n\ + \\ENQ\ENQ\a\STX#\STX\DC2\EOT\202\ACK\a\t\n\ \\r\n\ - \\ENQ\ENQ\a\STX$\SOH\DC2\EOT\178\ACK\STX\t\n\ + \\ENQ\ENQ\a\STX$\SOH\DC2\EOT\203\ACK\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STX$\DC2\EOT\178\ACK\STX\SI\n\ + \\EOT\ENQ\a\STX$\DC2\EOT\203\ACK\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX$\STX\DC2\EOT\178\ACK\f\SO\n\ + \\ENQ\ENQ\a\STX$\STX\DC2\EOT\203\ACK\f\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX%\SOH\DC2\EOT\179\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX%\SOH\DC2\EOT\204\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX%\DC2\EOT\179\ACK\STX\r\n\ + \\EOT\ENQ\a\STX%\DC2\EOT\204\ACK\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX%\STX\DC2\EOT\179\ACK\v\f\n\ + \\ENQ\ENQ\a\STX%\STX\DC2\EOT\204\ACK\v\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX&\SOH\DC2\EOT\180\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX&\SOH\DC2\EOT\205\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX&\DC2\EOT\180\ACK\STX\f\n\ + \\EOT\ENQ\a\STX&\DC2\EOT\205\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX&\STX\DC2\EOT\180\ACK\t\v\n\ + \\ENQ\ENQ\a\STX&\STX\DC2\EOT\205\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX'\SOH\DC2\EOT\181\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX'\SOH\DC2\EOT\206\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX'\DC2\EOT\181\ACK\STX\f\n\ + \\EOT\ENQ\a\STX'\DC2\EOT\206\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX'\STX\DC2\EOT\181\ACK\t\v\n\ + \\ENQ\ENQ\a\STX'\STX\DC2\EOT\206\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX(\SOH\DC2\EOT\182\ACK\STX\f\n\ + \\ENQ\ENQ\a\STX(\SOH\DC2\EOT\207\ACK\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STX(\DC2\EOT\182\ACK\STX\DC2\n\ + \\EOT\ENQ\a\STX(\DC2\EOT\207\ACK\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STX(\STX\DC2\EOT\182\ACK\SI\DC1\n\ + \\ENQ\ENQ\a\STX(\STX\DC2\EOT\207\ACK\SI\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STX)\SOH\DC2\EOT\183\ACK\STX\t\n\ + \\ENQ\ENQ\a\STX)\SOH\DC2\EOT\208\ACK\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STX)\DC2\EOT\183\ACK\STX\SI\n\ + \\EOT\ENQ\a\STX)\DC2\EOT\208\ACK\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX)\STX\DC2\EOT\183\ACK\f\SO\n\ + \\ENQ\ENQ\a\STX)\STX\DC2\EOT\208\ACK\f\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX*\SOH\DC2\EOT\184\ACK\STX\a\n\ + \\ENQ\ENQ\a\STX*\SOH\DC2\EOT\209\ACK\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STX*\DC2\EOT\184\ACK\STX\r\n\ + \\EOT\ENQ\a\STX*\DC2\EOT\209\ACK\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX*\STX\DC2\EOT\184\ACK\n\ + \\ENQ\ENQ\a\STX*\STX\DC2\EOT\209\ACK\n\ \\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX+\SOH\DC2\EOT\185\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX+\SOH\DC2\EOT\210\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX+\DC2\EOT\185\ACK\STX\v\n\ + \\EOT\ENQ\a\STX+\DC2\EOT\210\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX+\STX\DC2\EOT\185\ACK\b\n\ + \\ENQ\ENQ\a\STX+\STX\DC2\EOT\210\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX,\SOH\DC2\EOT\186\ACK\STX\ETX\n\ + \\ENQ\ENQ\a\STX,\SOH\DC2\EOT\211\ACK\STX\ETX\n\ \\f\n\ - \\EOT\ENQ\a\STX,\DC2\EOT\186\ACK\STX\t\n\ + \\EOT\ENQ\a\STX,\DC2\EOT\211\ACK\STX\t\n\ \\r\n\ - \\ENQ\ENQ\a\STX,\STX\DC2\EOT\186\ACK\ACK\b\n\ + \\ENQ\ENQ\a\STX,\STX\DC2\EOT\211\ACK\ACK\b\n\ \\r\n\ - \\ENQ\ENQ\a\STX-\SOH\DC2\EOT\187\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX-\SOH\DC2\EOT\212\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX-\DC2\EOT\187\ACK\STX\f\n\ + \\EOT\ENQ\a\STX-\DC2\EOT\212\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX-\STX\DC2\EOT\187\ACK\t\v\n\ + \\ENQ\ENQ\a\STX-\STX\DC2\EOT\212\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX.\SOH\DC2\EOT\188\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX.\SOH\DC2\EOT\213\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX.\DC2\EOT\188\ACK\STX\v\n\ + \\EOT\ENQ\a\STX.\DC2\EOT\213\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX.\STX\DC2\EOT\188\ACK\t\n\ + \\ENQ\ENQ\a\STX.\STX\DC2\EOT\213\ACK\t\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX/\SOH\DC2\EOT\189\ACK\STX\f\n\ + \\ENQ\ENQ\a\STX/\SOH\DC2\EOT\214\ACK\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STX/\DC2\EOT\189\ACK\STX\DC2\n\ + \\EOT\ENQ\a\STX/\DC2\EOT\214\ACK\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STX/\STX\DC2\EOT\189\ACK\SI\DC1\n\ + \\ENQ\ENQ\a\STX/\STX\DC2\EOT\214\ACK\SI\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STX0\SOH\DC2\EOT\190\ACK\STX\DC1\n\ + \\ENQ\ENQ\a\STX0\SOH\DC2\EOT\215\ACK\STX\DC1\n\ \\f\n\ - \\EOT\ENQ\a\STX0\DC2\EOT\190\ACK\STX\ETB\n\ + \\EOT\ENQ\a\STX0\DC2\EOT\215\ACK\STX\ETB\n\ \\r\n\ - \\ENQ\ENQ\a\STX0\STX\DC2\EOT\190\ACK\DC4\SYN\n\ + \\ENQ\ENQ\a\STX0\STX\DC2\EOT\215\ACK\DC4\SYN\n\ \\r\n\ - \\ENQ\ENQ\a\STX1\SOH\DC2\EOT\191\ACK\STX\t\n\ + \\ENQ\ENQ\a\STX1\SOH\DC2\EOT\216\ACK\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STX1\DC2\EOT\191\ACK\STX\SI\n\ + \\EOT\ENQ\a\STX1\DC2\EOT\216\ACK\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX1\STX\DC2\EOT\191\ACK\f\SO\n\ + \\ENQ\ENQ\a\STX1\STX\DC2\EOT\216\ACK\f\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX2\SOH\DC2\EOT\192\ACK\STX\a\n\ + \\ENQ\ENQ\a\STX2\SOH\DC2\EOT\217\ACK\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STX2\DC2\EOT\192\ACK\STX\r\n\ + \\EOT\ENQ\a\STX2\DC2\EOT\217\ACK\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX2\STX\DC2\EOT\192\ACK\n\ + \\ENQ\ENQ\a\STX2\STX\DC2\EOT\217\ACK\n\ \\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX3\SOH\DC2\EOT\193\ACK\STX\n\ + \\ENQ\ENQ\a\STX3\SOH\DC2\EOT\218\ACK\STX\n\ \\n\ \\f\n\ - \\EOT\ENQ\a\STX3\DC2\EOT\193\ACK\STX\DC1\n\ + \\EOT\ENQ\a\STX3\DC2\EOT\218\ACK\STX\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STX3\STX\DC2\EOT\193\ACK\r\DLE\n\ + \\ENQ\ENQ\a\STX3\STX\DC2\EOT\218\ACK\r\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STX4\SOH\DC2\EOT\194\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX4\SOH\DC2\EOT\219\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX4\DC2\EOT\194\ACK\STX\r\n\ + \\EOT\ENQ\a\STX4\DC2\EOT\219\ACK\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX4\STX\DC2\EOT\194\ACK\v\f\n\ + \\ENQ\ENQ\a\STX4\STX\DC2\EOT\219\ACK\v\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX5\SOH\DC2\EOT\195\ACK\STX\a\n\ + \\ENQ\ENQ\a\STX5\SOH\DC2\EOT\220\ACK\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STX5\DC2\EOT\195\ACK\STX\r\n\ + \\EOT\ENQ\a\STX5\DC2\EOT\220\ACK\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX5\STX\DC2\EOT\195\ACK\n\ + \\ENQ\ENQ\a\STX5\STX\DC2\EOT\220\ACK\n\ \\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX6\SOH\DC2\EOT\196\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX6\SOH\DC2\EOT\221\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX6\DC2\EOT\196\ACK\STX\f\n\ + \\EOT\ENQ\a\STX6\DC2\EOT\221\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX6\STX\DC2\EOT\196\ACK\t\v\n\ + \\ENQ\ENQ\a\STX6\STX\DC2\EOT\221\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX7\SOH\DC2\EOT\197\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX7\SOH\DC2\EOT\222\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX7\DC2\EOT\197\ACK\STX\f\n\ + \\EOT\ENQ\a\STX7\DC2\EOT\222\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX7\STX\DC2\EOT\197\ACK\t\v\n\ + \\ENQ\ENQ\a\STX7\STX\DC2\EOT\222\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX8\SOH\DC2\EOT\198\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX8\SOH\DC2\EOT\223\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX8\DC2\EOT\198\ACK\STX\v\n\ + \\EOT\ENQ\a\STX8\DC2\EOT\223\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX8\STX\DC2\EOT\198\ACK\b\n\ + \\ENQ\ENQ\a\STX8\STX\DC2\EOT\223\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX9\SOH\DC2\EOT\199\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX9\SOH\DC2\EOT\224\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX9\DC2\EOT\199\ACK\STX\r\n\ + \\EOT\ENQ\a\STX9\DC2\EOT\224\ACK\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX9\STX\DC2\EOT\199\ACK\t\f\n\ + \\ENQ\ENQ\a\STX9\STX\DC2\EOT\224\ACK\t\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX:\SOH\DC2\EOT\200\ACK\STX\n\ + \\ENQ\ENQ\a\STX:\SOH\DC2\EOT\225\ACK\STX\n\ \\n\ \\f\n\ - \\EOT\ENQ\a\STX:\DC2\EOT\200\ACK\STX\DLE\n\ + \\EOT\ENQ\a\STX:\DC2\EOT\225\ACK\STX\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STX:\STX\DC2\EOT\200\ACK\r\SI\n\ + \\ENQ\ENQ\a\STX:\STX\DC2\EOT\225\ACK\r\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX;\SOH\DC2\EOT\201\ACK\STX\n\ + \\ENQ\ENQ\a\STX;\SOH\DC2\EOT\226\ACK\STX\n\ \\n\ \\f\n\ - \\EOT\ENQ\a\STX;\DC2\EOT\201\ACK\STX\DLE\n\ + \\EOT\ENQ\a\STX;\DC2\EOT\226\ACK\STX\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STX;\STX\DC2\EOT\201\ACK\r\SI\n\ + \\ENQ\ENQ\a\STX;\STX\DC2\EOT\226\ACK\r\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX<\SOH\DC2\EOT\202\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX<\SOH\DC2\EOT\227\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX<\DC2\EOT\202\ACK\STX\SO\n\ + \\EOT\ENQ\a\STX<\DC2\EOT\227\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX<\STX\DC2\EOT\202\ACK\v\r\n\ + \\ENQ\ENQ\a\STX<\STX\DC2\EOT\227\ACK\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX=\SOH\DC2\EOT\203\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX=\SOH\DC2\EOT\228\ACK\STX\b\n\ \'\n\ - \\EOT\ENQ\a\STX=\DC2\EOT\203\ACK\STX\SI\"\EM https://nickel-lang.org/\n\ + \\EOT\ENQ\a\STX=\DC2\EOT\228\ACK\STX\SI\"\EM https://nickel-lang.org/\n\ \\r\n\ - \\ENQ\ENQ\a\STX=\STX\DC2\EOT\203\ACK\v\SO\n\ + \\ENQ\ENQ\a\STX=\STX\DC2\EOT\228\ACK\v\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX>\SOH\DC2\EOT\204\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX>\SOH\DC2\EOT\229\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX>\DC2\EOT\204\ACK\STX\v\n\ + \\EOT\ENQ\a\STX>\DC2\EOT\229\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX>\STX\DC2\EOT\204\ACK\b\n\ + \\ENQ\ENQ\a\STX>\STX\DC2\EOT\229\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX?\SOH\DC2\EOT\205\ACK\STX\a\n\ + \\ENQ\ENQ\a\STX?\SOH\DC2\EOT\230\ACK\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STX?\DC2\EOT\205\ACK\STX\r\n\ + \\EOT\ENQ\a\STX?\DC2\EOT\230\ACK\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX?\STX\DC2\EOT\205\ACK\n\ + \\ENQ\ENQ\a\STX?\STX\DC2\EOT\230\ACK\n\ \\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX@\SOH\DC2\EOT\206\ACK\STX\r\n\ + \\ENQ\ENQ\a\STX@\SOH\DC2\EOT\231\ACK\STX\r\n\ \\f\n\ - \\EOT\ENQ\a\STX@\DC2\EOT\206\ACK\STX\DC3\n\ + \\EOT\ENQ\a\STX@\DC2\EOT\231\ACK\STX\DC3\n\ \\r\n\ - \\ENQ\ENQ\a\STX@\STX\DC2\EOT\206\ACK\DLE\DC2\n\ + \\ENQ\ENQ\a\STX@\STX\DC2\EOT\231\ACK\DLE\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STXA\SOH\DC2\EOT\207\ACK\STX\SI\n\ + \\ENQ\ENQ\a\STXA\SOH\DC2\EOT\232\ACK\STX\SI\n\ \\f\n\ - \\EOT\ENQ\a\STXA\DC2\EOT\207\ACK\STX\NAK\n\ + \\EOT\ENQ\a\STXA\DC2\EOT\232\ACK\STX\NAK\n\ \\r\n\ - \\ENQ\ENQ\a\STXA\STX\DC2\EOT\207\ACK\DC2\DC4\n\ + \\ENQ\ENQ\a\STXA\STX\DC2\EOT\232\ACK\DC2\DC4\n\ \\r\n\ - \\ENQ\ENQ\a\STXB\SOH\DC2\EOT\208\ACK\STX\b\n\ + \\ENQ\ENQ\a\STXB\SOH\DC2\EOT\233\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STXB\DC2\EOT\208\ACK\STX\SO\n\ + \\EOT\ENQ\a\STXB\DC2\EOT\233\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXB\STX\DC2\EOT\208\ACK\v\r\n\ + \\ENQ\ENQ\a\STXB\STX\DC2\EOT\233\ACK\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXC\SOH\DC2\EOT\209\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STXC\SOH\DC2\EOT\234\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXC\DC2\EOT\209\ACK\STX\v\n\ + \\EOT\ENQ\a\STXC\DC2\EOT\234\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXC\STX\DC2\EOT\209\ACK\b\n\ + \\ENQ\ENQ\a\STXC\STX\DC2\EOT\234\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXD\SOH\DC2\EOT\210\ACK\STX\a\n\ + \\ENQ\ENQ\a\STXD\SOH\DC2\EOT\235\ACK\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STXD\DC2\EOT\210\ACK\STX\r\n\ + \\EOT\ENQ\a\STXD\DC2\EOT\235\ACK\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXD\STX\DC2\EOT\210\ACK\n\ + \\ENQ\ENQ\a\STXD\STX\DC2\EOT\235\ACK\n\ \\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXE\SOH\DC2\EOT\211\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STXE\SOH\DC2\EOT\236\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXE\DC2\EOT\211\ACK\STX\f\n\ + \\EOT\ENQ\a\STXE\DC2\EOT\236\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXE\STX\DC2\EOT\211\ACK\t\v\n\ + \\ENQ\ENQ\a\STXE\STX\DC2\EOT\236\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXF\SOH\DC2\EOT\212\ACK\STX\f\n\ + \\ENQ\ENQ\a\STXF\SOH\DC2\EOT\237\ACK\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STXF\DC2\EOT\212\ACK\STX\DC2\n\ + \\EOT\ENQ\a\STXF\DC2\EOT\237\ACK\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STXF\STX\DC2\EOT\212\ACK\SI\DC1\n\ + \\ENQ\ENQ\a\STXF\STX\DC2\EOT\237\ACK\SI\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STXG\SOH\DC2\EOT\213\ACK\STX\b\n\ + \\ENQ\ENQ\a\STXG\SOH\DC2\EOT\238\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STXG\DC2\EOT\213\ACK\STX\SO\n\ + \\EOT\ENQ\a\STXG\DC2\EOT\238\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXG\STX\DC2\EOT\213\ACK\v\r\n\ + \\ENQ\ENQ\a\STXG\STX\DC2\EOT\238\ACK\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXH\SOH\DC2\EOT\214\ACK\STX\n\ + \\ENQ\ENQ\a\STXH\SOH\DC2\EOT\239\ACK\STX\n\ \\n\ \\f\n\ - \\EOT\ENQ\a\STXH\DC2\EOT\214\ACK\STX\DC1\n\ + \\EOT\ENQ\a\STXH\DC2\EOT\239\ACK\STX\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STXH\STX\DC2\EOT\214\ACK\r\DLE\n\ + \\ENQ\ENQ\a\STXH\STX\DC2\EOT\239\ACK\r\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STXI\SOH\DC2\EOT\215\ACK\STX\b\n\ + \\ENQ\ENQ\a\STXI\SOH\DC2\EOT\240\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STXI\DC2\EOT\215\ACK\STX\SO\n\ + \\EOT\ENQ\a\STXI\DC2\EOT\240\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXI\STX\DC2\EOT\215\ACK\v\r\n\ + \\ENQ\ENQ\a\STXI\STX\DC2\EOT\240\ACK\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXJ\SOH\DC2\EOT\216\ACK\STX\ETX\n\ + \\ENQ\ENQ\a\STXJ\SOH\DC2\EOT\241\ACK\STX\ETX\n\ \\f\n\ - \\EOT\ENQ\a\STXJ\DC2\EOT\216\ACK\STX\t\n\ + \\EOT\ENQ\a\STXJ\DC2\EOT\241\ACK\STX\t\n\ \\r\n\ - \\ENQ\ENQ\a\STXJ\STX\DC2\EOT\216\ACK\ACK\b\n\ + \\ENQ\ENQ\a\STXJ\STX\DC2\EOT\241\ACK\ACK\b\n\ \\r\n\ - \\ENQ\ENQ\a\STXK\SOH\DC2\EOT\217\ACK\STX\b\n\ + \\ENQ\ENQ\a\STXK\SOH\DC2\EOT\242\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STXK\DC2\EOT\217\ACK\STX\SO\n\ + \\EOT\ENQ\a\STXK\DC2\EOT\242\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXK\STX\DC2\EOT\217\ACK\v\r\n\ + \\ENQ\ENQ\a\STXK\STX\DC2\EOT\242\ACK\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXL\SOH\DC2\EOT\218\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STXL\SOH\DC2\EOT\243\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXL\DC2\EOT\218\ACK\STX\f\n\ + \\EOT\ENQ\a\STXL\DC2\EOT\243\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXL\STX\DC2\EOT\218\ACK\t\v\n\ + \\ENQ\ENQ\a\STXL\STX\DC2\EOT\243\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXM\SOH\DC2\EOT\219\ACK\STX\a\n\ + \\ENQ\ENQ\a\STXM\SOH\DC2\EOT\244\ACK\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STXM\DC2\EOT\219\ACK\STX\r\n\ + \\EOT\ENQ\a\STXM\DC2\EOT\244\ACK\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXM\STX\DC2\EOT\219\ACK\n\ + \\ENQ\ENQ\a\STXM\STX\DC2\EOT\244\ACK\n\ \\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXN\SOH\DC2\EOT\220\ACK\STX\a\n\ + \\ENQ\ENQ\a\STXN\SOH\DC2\EOT\245\ACK\STX\a\n\ \1\n\ - \\EOT\ENQ\a\STXN\DC2\EOT\220\ACK\STX\SO\"# Internal language for testing SCIP\n\ + \\EOT\ENQ\a\STXN\DC2\EOT\245\ACK\STX\SO\"# Internal language for testing SCIP\n\ \\r\n\ - \\ENQ\ENQ\a\STXN\STX\DC2\EOT\220\ACK\n\ + \\ENQ\ENQ\a\STXN\STX\DC2\EOT\245\ACK\n\ \\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXO\SOH\DC2\EOT\221\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STXO\SOH\DC2\EOT\246\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXO\DC2\EOT\221\ACK\STX\f\n\ + \\EOT\ENQ\a\STXO\DC2\EOT\246\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXO\STX\DC2\EOT\221\ACK\t\v\n\ + \\ENQ\ENQ\a\STXO\STX\DC2\EOT\246\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXP\SOH\DC2\EOT\222\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STXP\SOH\DC2\EOT\247\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXP\DC2\EOT\222\ACK\STX\f\n\ + \\EOT\ENQ\a\STXP\DC2\EOT\247\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXP\STX\DC2\EOT\222\ACK\t\v\n\ + \\ENQ\ENQ\a\STXP\STX\DC2\EOT\247\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXQ\SOH\DC2\EOT\223\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STXQ\SOH\DC2\EOT\248\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXQ\DC2\EOT\223\ACK\STX\f\n\ + \\EOT\ENQ\a\STXQ\DC2\EOT\248\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXQ\STX\DC2\EOT\223\ACK\t\v\n\ + \\ENQ\ENQ\a\STXQ\STX\DC2\EOT\248\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXR\SOH\DC2\EOT\224\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STXR\SOH\DC2\EOT\249\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXR\DC2\EOT\224\ACK\STX\v\n\ + \\EOT\ENQ\a\STXR\DC2\EOT\249\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXR\STX\DC2\EOT\224\ACK\b\n\ + \\ENQ\ENQ\a\STXR\STX\DC2\EOT\249\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXS\SOH\DC2\EOT\225\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STXS\SOH\DC2\EOT\250\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXS\DC2\EOT\225\ACK\STX\f\n\ + \\EOT\ENQ\a\STXS\DC2\EOT\250\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXS\STX\DC2\EOT\225\ACK\t\v\n\ + \\ENQ\ENQ\a\STXS\STX\DC2\EOT\250\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXT\SOH\DC2\EOT\226\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STXT\SOH\DC2\EOT\251\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXT\DC2\EOT\226\ACK\STX\v\n\ + \\EOT\ENQ\a\STXT\DC2\EOT\251\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXT\STX\DC2\EOT\226\ACK\b\n\ + \\ENQ\ENQ\a\STXT\STX\DC2\EOT\251\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXU\SOH\DC2\EOT\227\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STXU\SOH\DC2\EOT\252\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXU\DC2\EOT\227\ACK\STX\v\n\ + \\EOT\ENQ\a\STXU\DC2\EOT\252\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXU\STX\DC2\EOT\227\ACK\b\n\ + \\ENQ\ENQ\a\STXU\STX\DC2\EOT\252\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXV\SOH\DC2\EOT\228\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STXV\SOH\DC2\EOT\253\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXV\DC2\EOT\228\ACK\STX\f\n\ + \\EOT\ENQ\a\STXV\DC2\EOT\253\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXV\STX\DC2\EOT\228\ACK\t\v\n\ + \\ENQ\ENQ\a\STXV\STX\DC2\EOT\253\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXW\SOH\DC2\EOT\229\ACK\STX\a\n\ + \\ENQ\ENQ\a\STXW\SOH\DC2\EOT\254\ACK\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STXW\DC2\EOT\229\ACK\STX\f\n\ + \\EOT\ENQ\a\STXW\DC2\EOT\254\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXW\STX\DC2\EOT\229\ACK\n\ + \\ENQ\ENQ\a\STXW\STX\DC2\EOT\254\ACK\n\ \\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXX\SOH\DC2\EOT\230\ACK\STX\b\n\ + \\ENQ\ENQ\a\STXX\SOH\DC2\EOT\255\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STXX\DC2\EOT\230\ACK\STX\SO\n\ + \\EOT\ENQ\a\STXX\DC2\EOT\255\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXX\STX\DC2\EOT\230\ACK\v\r\n\ + \\ENQ\ENQ\a\STXX\STX\DC2\EOT\255\ACK\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXY\SOH\DC2\EOT\231\ACK\STX\r\n\ + \\ENQ\ENQ\a\STXY\SOH\DC2\EOT\128\a\STX\r\n\ \\DC3\n\ - \\EOT\ENQ\a\STXY\DC2\EOT\231\ACK\STX\DC3\"\ENQ Bash\n\ + \\EOT\ENQ\a\STXY\DC2\EOT\128\a\STX\DC3\"\ENQ Bash\n\ \\r\n\ - \\ENQ\ENQ\a\STXY\STX\DC2\EOT\231\ACK\DLE\DC2\n\ + \\ENQ\ENQ\a\STXY\STX\DC2\EOT\128\a\DLE\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STXZ\SOH\DC2\EOT\232\ACK\STX\t\n\ + \\ENQ\ENQ\a\STXZ\SOH\DC2\EOT\129\a\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STXZ\DC2\EOT\232\ACK\STX\SI\n\ + \\EOT\ENQ\a\STXZ\DC2\EOT\129\a\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STXZ\STX\DC2\EOT\232\ACK\f\SO\n\ + \\ENQ\ENQ\a\STXZ\STX\DC2\EOT\129\a\f\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX[\SOH\DC2\EOT\233\ACK\STX\a\n\ + \\ENQ\ENQ\a\STX[\SOH\DC2\EOT\130\a\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STX[\DC2\EOT\233\ACK\STX\SO\n\ + \\EOT\ENQ\a\STX[\DC2\EOT\130\a\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX[\STX\DC2\EOT\233\ACK\n\ + \\ENQ\ENQ\a\STX[\STX\DC2\EOT\130\a\n\ \\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\\\SOH\DC2\EOT\234\ACK\STX\n\ + \\ENQ\ENQ\a\STX\\\SOH\DC2\EOT\131\a\STX\n\ \\n\ \\f\n\ - \\EOT\ENQ\a\STX\\\DC2\EOT\234\ACK\STX\DLE\n\ + \\EOT\ENQ\a\STX\\\DC2\EOT\131\a\STX\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STX\\\STX\DC2\EOT\234\ACK\r\SI\n\ + \\ENQ\ENQ\a\STX\\\STX\DC2\EOT\131\a\r\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX]\SOH\DC2\EOT\235\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX]\SOH\DC2\EOT\132\a\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX]\DC2\EOT\235\ACK\STX\SI\n\ + \\EOT\ENQ\a\STX]\DC2\EOT\132\a\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX]\STX\DC2\EOT\235\ACK\v\SO\n\ + \\ENQ\ENQ\a\STX]\STX\DC2\EOT\132\a\v\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX^\SOH\DC2\EOT\236\ACK\STX\a\n\ + \\ENQ\ENQ\a\STX^\SOH\DC2\EOT\133\a\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STX^\DC2\EOT\236\ACK\STX\f\n\ + \\EOT\ENQ\a\STX^\DC2\EOT\133\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX^\STX\DC2\EOT\236\ACK\n\ + \\ENQ\ENQ\a\STX^\STX\DC2\EOT\133\a\n\ \\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX_\SOH\DC2\EOT\237\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX_\SOH\DC2\EOT\134\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX_\DC2\EOT\237\ACK\STX\f\n\ + \\EOT\ENQ\a\STX_\DC2\EOT\134\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX_\STX\DC2\EOT\237\ACK\b\v\n\ + \\ENQ\ENQ\a\STX_\STX\DC2\EOT\134\a\b\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX`\SOH\DC2\EOT\238\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX`\SOH\DC2\EOT\135\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX`\DC2\EOT\238\ACK\STX\f\n\ + \\EOT\ENQ\a\STX`\DC2\EOT\135\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX`\STX\DC2\EOT\238\ACK\t\v\n\ + \\ENQ\ENQ\a\STX`\STX\DC2\EOT\135\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXa\SOH\DC2\EOT\239\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STXa\SOH\DC2\EOT\136\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXa\DC2\EOT\239\ACK\STX\v\n\ + \\EOT\ENQ\a\STXa\DC2\EOT\136\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXa\STX\DC2\EOT\239\ACK\b\n\ + \\ENQ\ENQ\a\STXa\STX\DC2\EOT\136\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXb\SOH\DC2\EOT\240\ACK\STX\b\n\ + \\ENQ\ENQ\a\STXb\SOH\DC2\EOT\137\a\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STXb\DC2\EOT\240\ACK\STX\SI\n\ + \\EOT\ENQ\a\STXb\DC2\EOT\137\a\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STXb\STX\DC2\EOT\240\ACK\v\SO\n\ + \\ENQ\ENQ\a\STXb\STX\DC2\EOT\137\a\v\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXc\SOH\DC2\EOT\241\ACK\STX\f\n\ + \\ENQ\ENQ\a\STXc\SOH\DC2\EOT\138\a\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STXc\DC2\EOT\241\ACK\STX\DC2\n\ + \\EOT\ENQ\a\STXc\DC2\EOT\138\a\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STXc\STX\DC2\EOT\241\ACK\SI\DC1\n\ + \\ENQ\ENQ\a\STXc\STX\DC2\EOT\138\a\SI\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STXd\SOH\DC2\EOT\242\ACK\STX\DC1\n\ + \\ENQ\ENQ\a\STXd\SOH\DC2\EOT\139\a\STX\DC1\n\ \\f\n\ - \\EOT\ENQ\a\STXd\DC2\EOT\242\ACK\STX\ETB\n\ + \\EOT\ENQ\a\STXd\DC2\EOT\139\a\STX\ETB\n\ \\r\n\ - \\ENQ\ENQ\a\STXd\STX\DC2\EOT\242\ACK\DC4\SYN\n\ + \\ENQ\ENQ\a\STXd\STX\DC2\EOT\139\a\DC4\SYN\n\ \\r\n\ - \\ENQ\ENQ\a\STXe\SOH\DC2\EOT\243\ACK\STX\t\n\ + \\ENQ\ENQ\a\STXe\SOH\DC2\EOT\140\a\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STXe\DC2\EOT\243\ACK\STX\DLE\n\ + \\EOT\ENQ\a\STXe\DC2\EOT\140\a\STX\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STXe\STX\DC2\EOT\243\ACK\f\SI\n\ + \\ENQ\ENQ\a\STXe\STX\DC2\EOT\140\a\f\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STXf\SOH\DC2\EOT\244\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STXf\SOH\DC2\EOT\141\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXf\DC2\EOT\244\ACK\STX\r\n\ + \\EOT\ENQ\a\STXf\DC2\EOT\141\a\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXf\STX\DC2\EOT\244\ACK\t\f\n\ + \\ENQ\ENQ\a\STXf\STX\DC2\EOT\141\a\t\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXg\SOH\DC2\EOT\245\ACK\STX\r\n\ + \\ENQ\ENQ\a\STXg\SOH\DC2\EOT\142\a\STX\r\n\ \\f\n\ - \\EOT\ENQ\a\STXg\DC2\EOT\245\ACK\STX\DC3\n\ + \\EOT\ENQ\a\STXg\DC2\EOT\142\a\STX\DC3\n\ \\r\n\ - \\ENQ\ENQ\a\STXg\STX\DC2\EOT\245\ACK\DLE\DC2\n\ + \\ENQ\ENQ\a\STXg\STX\DC2\EOT\142\a\DLE\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STXh\SOH\DC2\EOT\246\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STXh\SOH\DC2\EOT\143\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXh\DC2\EOT\246\ACK\STX\v\n\ + \\EOT\ENQ\a\STXh\DC2\EOT\143\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXh\STX\DC2\EOT\246\ACK\b\n\ + \\ENQ\ENQ\a\STXh\STX\DC2\EOT\143\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXi\SOH\DC2\EOT\247\ACK\STX\t\n\ + \\ENQ\ENQ\a\STXi\SOH\DC2\EOT\144\a\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STXi\DC2\EOT\247\ACK\STX\SI\n\ + \\EOT\ENQ\a\STXi\DC2\EOT\144\a\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STXi\STX\DC2\EOT\247\ACK\f\SO\n\ + \\ENQ\ENQ\a\STXi\STX\DC2\EOT\144\a\f\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXj\SOH\DC2\EOT\248\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STXj\SOH\DC2\EOT\145\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXj\DC2\EOT\248\ACK\STX\v\n\ + \\EOT\ENQ\a\STXj\DC2\EOT\145\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXj\STX\DC2\EOT\248\ACK\b\n\ + \\ENQ\ENQ\a\STXj\STX\DC2\EOT\145\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXk\SOH\DC2\EOT\249\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STXk\SOH\DC2\EOT\146\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXk\DC2\EOT\249\ACK\STX\v\n\ + \\EOT\ENQ\a\STXk\DC2\EOT\146\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXk\STX\DC2\EOT\249\ACK\b\n\ + \\ENQ\ENQ\a\STXk\STX\DC2\EOT\146\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXl\SOH\DC2\EOT\250\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STXl\SOH\DC2\EOT\147\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXl\DC2\EOT\250\ACK\STX\f\n\ + \\EOT\ENQ\a\STXl\DC2\EOT\147\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXl\STX\DC2\EOT\250\ACK\t\v\n\ + \\ENQ\ENQ\a\STXl\STX\DC2\EOT\147\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXm\SOH\DC2\EOT\251\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STXm\SOH\DC2\EOT\148\a\STX\ENQ\n\ \\147\ETX\n\ - \\EOT\ENQ\a\STXm\DC2\EOT\251\ACK\STX\v\"\132\ETX NextLanguage = 111;\n\ + \\EOT\ENQ\a\STXm\DC2\EOT\148\a\STX\v\"\132\ETX NextLanguage = 111;\n\ \ Steps add a new language:\n\ \ 1. Copy-paste the \"NextLanguage = N\" line above\n\ \ 2. Increment \"NextLanguage = N\" to \"NextLanguage = N+1\"\n\ @@ -9498,5 +10396,5 @@ packedFileDescriptor \ 5. (optional) Add a brief comment behind the language if the name is not self-explanatory\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXm\STX\DC2\EOT\251\ACK\b\n\ + \\ENQ\ENQ\a\STXm\STX\DC2\EOT\148\a\b\n\ \b\ACKproto3" \ No newline at end of file diff --git a/bindings/haskell/src/Proto/Scip_Fields.hs b/bindings/haskell/src/Proto/Scip_Fields.hs index 2008de89..803c18df 100644 --- a/bindings/haskell/src/Proto/Scip_Fields.hs +++ b/bindings/haskell/src/Proto/Scip_Fields.hs @@ -86,6 +86,17 @@ enclosingSymbol :: Data.ProtoLens.Field.HasField s "enclosingSymbol" a) => Lens.Family2.LensLike' f s a enclosingSymbol = Data.ProtoLens.Field.field @"enclosingSymbol" +endCharacter :: + forall f s a. + (Prelude.Functor f, + Data.ProtoLens.Field.HasField s "endCharacter" a) => + Lens.Family2.LensLike' f s a +endCharacter = Data.ProtoLens.Field.field @"endCharacter" +endLine :: + forall f s a. + (Prelude.Functor f, Data.ProtoLens.Field.HasField s "endLine" a) => + Lens.Family2.LensLike' f s a +endLine = Data.ProtoLens.Field.field @"endLine" externalSymbols :: forall f s a. (Prelude.Functor f, @@ -127,6 +138,11 @@ language :: Data.ProtoLens.Field.HasField s "language" a) => Lens.Family2.LensLike' f s a language = Data.ProtoLens.Field.field @"language" +line :: + forall f s a. + (Prelude.Functor f, Data.ProtoLens.Field.HasField s "line" a) => + Lens.Family2.LensLike' f s a +line = Data.ProtoLens.Field.field @"line" manager :: forall f s a. (Prelude.Functor f, Data.ProtoLens.Field.HasField s "manager" a) => @@ -138,6 +154,20 @@ maybe'metadata :: Data.ProtoLens.Field.HasField s "maybe'metadata" a) => Lens.Family2.LensLike' f s a maybe'metadata = Data.ProtoLens.Field.field @"maybe'metadata" +maybe'multiLineEnclosingRange :: + forall f s a. + (Prelude.Functor f, + Data.ProtoLens.Field.HasField s "maybe'multiLineEnclosingRange" a) => + Lens.Family2.LensLike' f s a +maybe'multiLineEnclosingRange + = Data.ProtoLens.Field.field @"maybe'multiLineEnclosingRange" +maybe'multiLineRange :: + forall f s a. + (Prelude.Functor f, + Data.ProtoLens.Field.HasField s "maybe'multiLineRange" a) => + Lens.Family2.LensLike' f s a +maybe'multiLineRange + = Data.ProtoLens.Field.field @"maybe'multiLineRange" maybe'package :: forall f s a. (Prelude.Functor f, @@ -151,12 +181,39 @@ maybe'signatureDocumentation :: Lens.Family2.LensLike' f s a maybe'signatureDocumentation = Data.ProtoLens.Field.field @"maybe'signatureDocumentation" +maybe'singleLineEnclosingRange :: + forall f s a. + (Prelude.Functor f, + Data.ProtoLens.Field.HasField s "maybe'singleLineEnclosingRange" a) => + Lens.Family2.LensLike' f s a +maybe'singleLineEnclosingRange + = Data.ProtoLens.Field.field @"maybe'singleLineEnclosingRange" +maybe'singleLineRange :: + forall f s a. + (Prelude.Functor f, + Data.ProtoLens.Field.HasField s "maybe'singleLineRange" a) => + Lens.Family2.LensLike' f s a +maybe'singleLineRange + = Data.ProtoLens.Field.field @"maybe'singleLineRange" maybe'toolInfo :: forall f s a. (Prelude.Functor f, Data.ProtoLens.Field.HasField s "maybe'toolInfo" a) => Lens.Family2.LensLike' f s a maybe'toolInfo = Data.ProtoLens.Field.field @"maybe'toolInfo" +maybe'typedEnclosingRange :: + forall f s a. + (Prelude.Functor f, + Data.ProtoLens.Field.HasField s "maybe'typedEnclosingRange" a) => + Lens.Family2.LensLike' f s a +maybe'typedEnclosingRange + = Data.ProtoLens.Field.field @"maybe'typedEnclosingRange" +maybe'typedRange :: + forall f s a. + (Prelude.Functor f, + Data.ProtoLens.Field.HasField s "maybe'typedRange" a) => + Lens.Family2.LensLike' f s a +maybe'typedRange = Data.ProtoLens.Field.field @"maybe'typedRange" message :: forall f s a. (Prelude.Functor f, Data.ProtoLens.Field.HasField s "message" a) => @@ -168,6 +225,19 @@ metadata :: Data.ProtoLens.Field.HasField s "metadata" a) => Lens.Family2.LensLike' f s a metadata = Data.ProtoLens.Field.field @"metadata" +multiLineEnclosingRange :: + forall f s a. + (Prelude.Functor f, + Data.ProtoLens.Field.HasField s "multiLineEnclosingRange" a) => + Lens.Family2.LensLike' f s a +multiLineEnclosingRange + = Data.ProtoLens.Field.field @"multiLineEnclosingRange" +multiLineRange :: + forall f s a. + (Prelude.Functor f, + Data.ProtoLens.Field.HasField s "multiLineRange" a) => + Lens.Family2.LensLike' f s a +multiLineRange = Data.ProtoLens.Field.field @"multiLineRange" name :: forall f s a. (Prelude.Functor f, Data.ProtoLens.Field.HasField s "name" a) => @@ -238,11 +308,36 @@ signatureDocumentation :: Lens.Family2.LensLike' f s a signatureDocumentation = Data.ProtoLens.Field.field @"signatureDocumentation" +singleLineEnclosingRange :: + forall f s a. + (Prelude.Functor f, + Data.ProtoLens.Field.HasField s "singleLineEnclosingRange" a) => + Lens.Family2.LensLike' f s a +singleLineEnclosingRange + = Data.ProtoLens.Field.field @"singleLineEnclosingRange" +singleLineRange :: + forall f s a. + (Prelude.Functor f, + Data.ProtoLens.Field.HasField s "singleLineRange" a) => + Lens.Family2.LensLike' f s a +singleLineRange = Data.ProtoLens.Field.field @"singleLineRange" source :: forall f s a. (Prelude.Functor f, Data.ProtoLens.Field.HasField s "source" a) => Lens.Family2.LensLike' f s a source = Data.ProtoLens.Field.field @"source" +startCharacter :: + forall f s a. + (Prelude.Functor f, + Data.ProtoLens.Field.HasField s "startCharacter" a) => + Lens.Family2.LensLike' f s a +startCharacter = Data.ProtoLens.Field.field @"startCharacter" +startLine :: + forall f s a. + (Prelude.Functor f, + Data.ProtoLens.Field.HasField s "startLine" a) => + Lens.Family2.LensLike' f s a +startLine = Data.ProtoLens.Field.field @"startLine" suffix :: forall f s a. (Prelude.Functor f, Data.ProtoLens.Field.HasField s "suffix" a) => diff --git a/bindings/java/src/main/java/org/scip_code/scip/MultiLineRange.java b/bindings/java/src/main/java/org/scip_code/scip/MultiLineRange.java new file mode 100644 index 00000000..a73aac23 --- /dev/null +++ b/bindings/java/src/main/java/org/scip_code/scip/MultiLineRange.java @@ -0,0 +1,643 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: scip.proto +// Protobuf Java Version: 4.34.1 + +package org.scip_code.scip; + +/** + *
+ * MultiLineRange represents a half-open [start, end) range spanning multiple lines.
+ * 
+ * + * Protobuf type {@code scip.MultiLineRange} + */ +@com.google.protobuf.Generated +public final class MultiLineRange extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:scip.MultiLineRange) + MultiLineRangeOrBuilder { +private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 34, + /* patch= */ 1, + /* suffix= */ "", + "MultiLineRange"); + } + // Use MultiLineRange.newBuilder() to construct. + private MultiLineRange(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private MultiLineRange() { + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.scip_code.scip.ScipProto.internal_static_scip_MultiLineRange_descriptor; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return org.scip_code.scip.ScipProto.internal_static_scip_MultiLineRange_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.scip_code.scip.ScipProto.internal_static_scip_MultiLineRange_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.scip_code.scip.MultiLineRange.class, org.scip_code.scip.MultiLineRange.Builder.class); + } + + public static final int START_LINE_FIELD_NUMBER = 1; + private int startLine_ = 0; + /** + * int32 start_line = 1 [json_name = "startLine"]; + * @return The startLine. + */ + @java.lang.Override + public int getStartLine() { + return startLine_; + } + + public static final int START_CHARACTER_FIELD_NUMBER = 2; + private int startCharacter_ = 0; + /** + * int32 start_character = 2 [json_name = "startCharacter"]; + * @return The startCharacter. + */ + @java.lang.Override + public int getStartCharacter() { + return startCharacter_; + } + + public static final int END_LINE_FIELD_NUMBER = 3; + private int endLine_ = 0; + /** + * int32 end_line = 3 [json_name = "endLine"]; + * @return The endLine. + */ + @java.lang.Override + public int getEndLine() { + return endLine_; + } + + public static final int END_CHARACTER_FIELD_NUMBER = 4; + private int endCharacter_ = 0; + /** + * int32 end_character = 4 [json_name = "endCharacter"]; + * @return The endCharacter. + */ + @java.lang.Override + public int getEndCharacter() { + return endCharacter_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (startLine_ != 0) { + output.writeInt32(1, startLine_); + } + if (startCharacter_ != 0) { + output.writeInt32(2, startCharacter_); + } + if (endLine_ != 0) { + output.writeInt32(3, endLine_); + } + if (endCharacter_ != 0) { + output.writeInt32(4, endCharacter_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (startLine_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, startLine_); + } + if (startCharacter_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, startCharacter_); + } + if (endLine_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(3, endLine_); + } + if (endCharacter_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(4, endCharacter_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.scip_code.scip.MultiLineRange)) { + return super.equals(obj); + } + org.scip_code.scip.MultiLineRange other = (org.scip_code.scip.MultiLineRange) obj; + + if (getStartLine() + != other.getStartLine()) return false; + if (getStartCharacter() + != other.getStartCharacter()) return false; + if (getEndLine() + != other.getEndLine()) return false; + if (getEndCharacter() + != other.getEndCharacter()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + START_LINE_FIELD_NUMBER; + hash = (53 * hash) + getStartLine(); + hash = (37 * hash) + START_CHARACTER_FIELD_NUMBER; + hash = (53 * hash) + getStartCharacter(); + hash = (37 * hash) + END_LINE_FIELD_NUMBER; + hash = (53 * hash) + getEndLine(); + hash = (37 * hash) + END_CHARACTER_FIELD_NUMBER; + hash = (53 * hash) + getEndCharacter(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.scip_code.scip.MultiLineRange parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.scip_code.scip.MultiLineRange parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.scip_code.scip.MultiLineRange parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.scip_code.scip.MultiLineRange parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.scip_code.scip.MultiLineRange parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.scip_code.scip.MultiLineRange parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.scip_code.scip.MultiLineRange parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static org.scip_code.scip.MultiLineRange parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static org.scip_code.scip.MultiLineRange parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static org.scip_code.scip.MultiLineRange parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.scip_code.scip.MultiLineRange parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static org.scip_code.scip.MultiLineRange parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.scip_code.scip.MultiLineRange prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+   * MultiLineRange represents a half-open [start, end) range spanning multiple lines.
+   * 
+ * + * Protobuf type {@code scip.MultiLineRange} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:scip.MultiLineRange) + org.scip_code.scip.MultiLineRangeOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.scip_code.scip.ScipProto.internal_static_scip_MultiLineRange_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.scip_code.scip.ScipProto.internal_static_scip_MultiLineRange_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.scip_code.scip.MultiLineRange.class, org.scip_code.scip.MultiLineRange.Builder.class); + } + + // Construct using org.scip_code.scip.MultiLineRange.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + startLine_ = 0; + startCharacter_ = 0; + endLine_ = 0; + endCharacter_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.scip_code.scip.ScipProto.internal_static_scip_MultiLineRange_descriptor; + } + + @java.lang.Override + public org.scip_code.scip.MultiLineRange getDefaultInstanceForType() { + return org.scip_code.scip.MultiLineRange.getDefaultInstance(); + } + + @java.lang.Override + public org.scip_code.scip.MultiLineRange build() { + org.scip_code.scip.MultiLineRange result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.scip_code.scip.MultiLineRange buildPartial() { + org.scip_code.scip.MultiLineRange result = new org.scip_code.scip.MultiLineRange(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(org.scip_code.scip.MultiLineRange result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.startLine_ = startLine_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.startCharacter_ = startCharacter_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.endLine_ = endLine_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.endCharacter_ = endCharacter_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.scip_code.scip.MultiLineRange) { + return mergeFrom((org.scip_code.scip.MultiLineRange)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.scip_code.scip.MultiLineRange other) { + if (other == org.scip_code.scip.MultiLineRange.getDefaultInstance()) return this; + if (other.getStartLine() != 0) { + setStartLine(other.getStartLine()); + } + if (other.getStartCharacter() != 0) { + setStartCharacter(other.getStartCharacter()); + } + if (other.getEndLine() != 0) { + setEndLine(other.getEndLine()); + } + if (other.getEndCharacter() != 0) { + setEndCharacter(other.getEndCharacter()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + startLine_ = input.readInt32(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: { + startCharacter_ = input.readInt32(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 24: { + endLine_ = input.readInt32(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 32: { + endCharacter_ = input.readInt32(); + bitField0_ |= 0x00000008; + break; + } // case 32 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private int startLine_ ; + /** + * int32 start_line = 1 [json_name = "startLine"]; + * @return The startLine. + */ + @java.lang.Override + public int getStartLine() { + return startLine_; + } + /** + * int32 start_line = 1 [json_name = "startLine"]; + * @param value The startLine to set. + * @return This builder for chaining. + */ + public Builder setStartLine(int value) { + + startLine_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * int32 start_line = 1 [json_name = "startLine"]; + * @return This builder for chaining. + */ + public Builder clearStartLine() { + bitField0_ = (bitField0_ & ~0x00000001); + startLine_ = 0; + onChanged(); + return this; + } + + private int startCharacter_ ; + /** + * int32 start_character = 2 [json_name = "startCharacter"]; + * @return The startCharacter. + */ + @java.lang.Override + public int getStartCharacter() { + return startCharacter_; + } + /** + * int32 start_character = 2 [json_name = "startCharacter"]; + * @param value The startCharacter to set. + * @return This builder for chaining. + */ + public Builder setStartCharacter(int value) { + + startCharacter_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * int32 start_character = 2 [json_name = "startCharacter"]; + * @return This builder for chaining. + */ + public Builder clearStartCharacter() { + bitField0_ = (bitField0_ & ~0x00000002); + startCharacter_ = 0; + onChanged(); + return this; + } + + private int endLine_ ; + /** + * int32 end_line = 3 [json_name = "endLine"]; + * @return The endLine. + */ + @java.lang.Override + public int getEndLine() { + return endLine_; + } + /** + * int32 end_line = 3 [json_name = "endLine"]; + * @param value The endLine to set. + * @return This builder for chaining. + */ + public Builder setEndLine(int value) { + + endLine_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * int32 end_line = 3 [json_name = "endLine"]; + * @return This builder for chaining. + */ + public Builder clearEndLine() { + bitField0_ = (bitField0_ & ~0x00000004); + endLine_ = 0; + onChanged(); + return this; + } + + private int endCharacter_ ; + /** + * int32 end_character = 4 [json_name = "endCharacter"]; + * @return The endCharacter. + */ + @java.lang.Override + public int getEndCharacter() { + return endCharacter_; + } + /** + * int32 end_character = 4 [json_name = "endCharacter"]; + * @param value The endCharacter to set. + * @return This builder for chaining. + */ + public Builder setEndCharacter(int value) { + + endCharacter_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + * int32 end_character = 4 [json_name = "endCharacter"]; + * @return This builder for chaining. + */ + public Builder clearEndCharacter() { + bitField0_ = (bitField0_ & ~0x00000008); + endCharacter_ = 0; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:scip.MultiLineRange) + } + + // @@protoc_insertion_point(class_scope:scip.MultiLineRange) + private static final org.scip_code.scip.MultiLineRange DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.scip_code.scip.MultiLineRange(); + } + + public static org.scip_code.scip.MultiLineRange getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public MultiLineRange parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.scip_code.scip.MultiLineRange getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + +} + diff --git a/bindings/java/src/main/java/org/scip_code/scip/MultiLineRangeOrBuilder.java b/bindings/java/src/main/java/org/scip_code/scip/MultiLineRangeOrBuilder.java new file mode 100644 index 00000000..55a68108 --- /dev/null +++ b/bindings/java/src/main/java/org/scip_code/scip/MultiLineRangeOrBuilder.java @@ -0,0 +1,36 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: scip.proto +// Protobuf Java Version: 4.34.1 + +package org.scip_code.scip; + +@com.google.protobuf.Generated +public interface MultiLineRangeOrBuilder extends + // @@protoc_insertion_point(interface_extends:scip.MultiLineRange) + com.google.protobuf.MessageOrBuilder { + + /** + * int32 start_line = 1 [json_name = "startLine"]; + * @return The startLine. + */ + int getStartLine(); + + /** + * int32 start_character = 2 [json_name = "startCharacter"]; + * @return The startCharacter. + */ + int getStartCharacter(); + + /** + * int32 end_line = 3 [json_name = "endLine"]; + * @return The endLine. + */ + int getEndLine(); + + /** + * int32 end_character = 4 [json_name = "endCharacter"]; + * @return The endCharacter. + */ + int getEndCharacter(); +} diff --git a/bindings/java/src/main/java/org/scip_code/scip/Occurrence.java b/bindings/java/src/main/java/org/scip_code/scip/Occurrence.java index 111a3429..6e8cfb76 100644 --- a/bindings/java/src/main/java/org/scip_code/scip/Occurrence.java +++ b/bindings/java/src/main/java/org/scip_code/scip/Occurrence.java @@ -63,114 +63,257 @@ public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { org.scip_code.scip.Occurrence.class, org.scip_code.scip.Occurrence.Builder.class); } + private int typedRangeCase_ = 0; + @SuppressWarnings("serial") + private java.lang.Object typedRange_; + public enum TypedRangeCase + implements com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + SINGLE_LINE_RANGE(8), + MULTI_LINE_RANGE(9), + TYPEDRANGE_NOT_SET(0); + private final int value; + private TypedRangeCase(int value) { + this.value = value; + } + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static TypedRangeCase valueOf(int value) { + return forNumber(value); + } + + public static TypedRangeCase forNumber(int value) { + switch (value) { + case 8: return SINGLE_LINE_RANGE; + case 9: return MULTI_LINE_RANGE; + case 0: return TYPEDRANGE_NOT_SET; + default: return null; + } + } + public int getNumber() { + return this.value; + } + }; + + public TypedRangeCase + getTypedRangeCase() { + return TypedRangeCase.forNumber( + typedRangeCase_); + } + + private int typedEnclosingRangeCase_ = 0; + @SuppressWarnings("serial") + private java.lang.Object typedEnclosingRange_; + public enum TypedEnclosingRangeCase + implements com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + SINGLE_LINE_ENCLOSING_RANGE(10), + MULTI_LINE_ENCLOSING_RANGE(11), + TYPEDENCLOSINGRANGE_NOT_SET(0); + private final int value; + private TypedEnclosingRangeCase(int value) { + this.value = value; + } + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static TypedEnclosingRangeCase valueOf(int value) { + return forNumber(value); + } + + public static TypedEnclosingRangeCase forNumber(int value) { + switch (value) { + case 10: return SINGLE_LINE_ENCLOSING_RANGE; + case 11: return MULTI_LINE_ENCLOSING_RANGE; + case 0: return TYPEDENCLOSINGRANGE_NOT_SET; + default: return null; + } + } + public int getNumber() { + return this.value; + } + }; + + public TypedEnclosingRangeCase + getTypedEnclosingRangeCase() { + return TypedEnclosingRangeCase.forNumber( + typedEnclosingRangeCase_); + } + public static final int RANGE_FIELD_NUMBER = 1; @SuppressWarnings("serial") private com.google.protobuf.Internal.IntList range_ = emptyIntList(); /** *
-   * Half-open [start, end) range of this occurrence. Must be exactly three or four
-   * elements:
+   * Deprecated: Use `single_line_range` or `multi_line_range` instead.
    *
+   * Half-open [start, end) range. Must be exactly three or four elements:
+   * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line)
    * - Four elements: `[startLine, startCharacter, endLine, endCharacter]`
-   * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line
-   * is inferred to have the same value as the start line.
-   *
-   * It is allowed for the range to be empty (i.e. start==end).
-   *
-   * Line numbers and characters are always 0-based. Make sure to increment the
-   * line/character values before displaying them in an editor-like UI because
-   * editors conventionally use 1-based numbers.
-   *
-   * The 'character' value is interpreted based on the PositionEncoding for
-   * the Document.
    *
    * Historical note: the original draft of this schema had a `Range` message
    * type with `start` and `end` fields of type `Position`, mirroring LSP.
    * Benchmarks revealed that this encoding was inefficient and that we could
    * reduce the total payload size of an index by 50% by using `repeated int32`
-   * instead. The `repeated int32` encoding is admittedly more embarrassing to
-   * work with in some programming languages but we hope the performance
-   * improvements make up for it.
+   * instead. However, the lack of type safety led to the introduction of
+   * `single_line_range` and `multi_line_range` as typed alternatives.
    * 
* - * repeated int32 range = 1 [json_name = "range"]; + * repeated int32 range = 1 [json_name = "range", deprecated = true]; + * @deprecated scip.Occurrence.range is deprecated. + * See scip.proto;l=675 * @return A list containing the range. */ @java.lang.Override - public java.util.List + @java.lang.Deprecated public java.util.List getRangeList() { return range_; } /** *
-   * Half-open [start, end) range of this occurrence. Must be exactly three or four
-   * elements:
+   * Deprecated: Use `single_line_range` or `multi_line_range` instead.
    *
+   * Half-open [start, end) range. Must be exactly three or four elements:
+   * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line)
    * - Four elements: `[startLine, startCharacter, endLine, endCharacter]`
-   * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line
-   * is inferred to have the same value as the start line.
-   *
-   * It is allowed for the range to be empty (i.e. start==end).
-   *
-   * Line numbers and characters are always 0-based. Make sure to increment the
-   * line/character values before displaying them in an editor-like UI because
-   * editors conventionally use 1-based numbers.
-   *
-   * The 'character' value is interpreted based on the PositionEncoding for
-   * the Document.
    *
    * Historical note: the original draft of this schema had a `Range` message
    * type with `start` and `end` fields of type `Position`, mirroring LSP.
    * Benchmarks revealed that this encoding was inefficient and that we could
    * reduce the total payload size of an index by 50% by using `repeated int32`
-   * instead. The `repeated int32` encoding is admittedly more embarrassing to
-   * work with in some programming languages but we hope the performance
-   * improvements make up for it.
+   * instead. However, the lack of type safety led to the introduction of
+   * `single_line_range` and `multi_line_range` as typed alternatives.
    * 
* - * repeated int32 range = 1 [json_name = "range"]; + * repeated int32 range = 1 [json_name = "range", deprecated = true]; + * @deprecated scip.Occurrence.range is deprecated. + * See scip.proto;l=675 * @return The count of range. */ - public int getRangeCount() { + @java.lang.Deprecated public int getRangeCount() { return range_.size(); } /** *
-   * Half-open [start, end) range of this occurrence. Must be exactly three or four
-   * elements:
+   * Deprecated: Use `single_line_range` or `multi_line_range` instead.
    *
+   * Half-open [start, end) range. Must be exactly three or four elements:
+   * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line)
    * - Four elements: `[startLine, startCharacter, endLine, endCharacter]`
-   * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line
-   * is inferred to have the same value as the start line.
-   *
-   * It is allowed for the range to be empty (i.e. start==end).
-   *
-   * Line numbers and characters are always 0-based. Make sure to increment the
-   * line/character values before displaying them in an editor-like UI because
-   * editors conventionally use 1-based numbers.
-   *
-   * The 'character' value is interpreted based on the PositionEncoding for
-   * the Document.
    *
    * Historical note: the original draft of this schema had a `Range` message
    * type with `start` and `end` fields of type `Position`, mirroring LSP.
    * Benchmarks revealed that this encoding was inefficient and that we could
    * reduce the total payload size of an index by 50% by using `repeated int32`
-   * instead. The `repeated int32` encoding is admittedly more embarrassing to
-   * work with in some programming languages but we hope the performance
-   * improvements make up for it.
+   * instead. However, the lack of type safety led to the introduction of
+   * `single_line_range` and `multi_line_range` as typed alternatives.
    * 
* - * repeated int32 range = 1 [json_name = "range"]; + * repeated int32 range = 1 [json_name = "range", deprecated = true]; + * @deprecated scip.Occurrence.range is deprecated. + * See scip.proto;l=675 * @param index The index of the element to return. * @return The range at the given index. */ - public int getRange(int index) { + @java.lang.Deprecated public int getRange(int index) { return range_.getInt(index); } private int rangeMemoizedSerializedSize = -1; + public static final int SINGLE_LINE_RANGE_FIELD_NUMBER = 8; + /** + *
+   * Range spanning a single line.
+   * 
+ * + * .scip.SingleLineRange single_line_range = 8 [json_name = "singleLineRange"]; + * @return Whether the singleLineRange field is set. + */ + @java.lang.Override + public boolean hasSingleLineRange() { + return typedRangeCase_ == 8; + } + /** + *
+   * Range spanning a single line.
+   * 
+ * + * .scip.SingleLineRange single_line_range = 8 [json_name = "singleLineRange"]; + * @return The singleLineRange. + */ + @java.lang.Override + public org.scip_code.scip.SingleLineRange getSingleLineRange() { + if (typedRangeCase_ == 8) { + return (org.scip_code.scip.SingleLineRange) typedRange_; + } + return org.scip_code.scip.SingleLineRange.getDefaultInstance(); + } + /** + *
+   * Range spanning a single line.
+   * 
+ * + * .scip.SingleLineRange single_line_range = 8 [json_name = "singleLineRange"]; + */ + @java.lang.Override + public org.scip_code.scip.SingleLineRangeOrBuilder getSingleLineRangeOrBuilder() { + if (typedRangeCase_ == 8) { + return (org.scip_code.scip.SingleLineRange) typedRange_; + } + return org.scip_code.scip.SingleLineRange.getDefaultInstance(); + } + + public static final int MULTI_LINE_RANGE_FIELD_NUMBER = 9; + /** + *
+   * Range spanning multiple lines.
+   * 
+ * + * .scip.MultiLineRange multi_line_range = 9 [json_name = "multiLineRange"]; + * @return Whether the multiLineRange field is set. + */ + @java.lang.Override + public boolean hasMultiLineRange() { + return typedRangeCase_ == 9; + } + /** + *
+   * Range spanning multiple lines.
+   * 
+ * + * .scip.MultiLineRange multi_line_range = 9 [json_name = "multiLineRange"]; + * @return The multiLineRange. + */ + @java.lang.Override + public org.scip_code.scip.MultiLineRange getMultiLineRange() { + if (typedRangeCase_ == 9) { + return (org.scip_code.scip.MultiLineRange) typedRange_; + } + return org.scip_code.scip.MultiLineRange.getDefaultInstance(); + } + /** + *
+   * Range spanning multiple lines.
+   * 
+ * + * .scip.MultiLineRange multi_line_range = 9 [json_name = "multiLineRange"]; + */ + @java.lang.Override + public org.scip_code.scip.MultiLineRangeOrBuilder getMultiLineRangeOrBuilder() { + if (typedRangeCase_ == 9) { + return (org.scip_code.scip.MultiLineRange) typedRange_; + } + return org.scip_code.scip.MultiLineRange.getDefaultInstance(); + } + public static final int SYMBOL_FIELD_NUMBER = 2; @SuppressWarnings("serial") private volatile java.lang.Object symbol_ = ""; @@ -410,195 +553,110 @@ public org.scip_code.scip.DiagnosticOrBuilder getDiagnosticsOrBuilder( emptyIntList(); /** *
-   * (optional) Using the same encoding as the sibling `range` field, half-open
-   * source range of the nearest non-trivial enclosing AST node. This range must
-   * enclose the `range` field. Example applications that make use of the
-   * enclosing_range field:
-   *
-   * - Call hierarchies: to determine what symbols are references from the body
-   * of a function
-   * - Symbol outline: to display breadcrumbs from the cursor position to the
-   * root of the file
-   * - Expand selection: to select the nearest enclosing AST node.
-   * - Highlight range: to indicate the AST expression that is associated with a
-   * hover popover
-   *
-   * For definition occurrences, the enclosing range should indicate the
-   * start/end bounds of the entire definition AST node, including
-   * documentation.
-   * ```
-   * const n = 3
-   * ^ range
-   * ^^^^^^^^^^^ enclosing_range
-   *
-   * /** Parses the string into something */
-   * ^ enclosing_range start --------------------------------------|
-   * function parse(input string): string {                        |
-   * ^^^^^ range                                          |
-   * return input.slice(n)                                     |
-   * }                                                             |
-   * ^ enclosing_range end <---------------------------------------|
-   * ```
-   *
-   * Any attributes/decorators/attached macros should also be part of the
-   * enclosing range.
-   *
-   * ```python
-   * @cache
-   * ^ enclosing_range start---------------------|
-   * def factorial(n):                           |
-   * return n * factorial(n-1) if n else 1   |
-   * < enclosing_range end-----------------------|
-   *
-   * ```
-   *
-   * For reference occurrences, the enclosing range should indicate the start/end
-   * bounds of the parent expression.
-   * ```
-   * const a = a.b
-   * ^ range
-   * ^^^ enclosing_range
-   * const b = a.b(41).f(42).g(43)
-   * ^ range
-   * ^^^^^^^^^^^^^ enclosing_range
-   * ```
+   * Deprecated: Use `typed_enclosing_range` instead.
    * 
* - * repeated int32 enclosing_range = 7 [json_name = "enclosingRange"]; + * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; + * @deprecated scip.Occurrence.enclosing_range is deprecated. + * See scip.proto;l=713 * @return A list containing the enclosingRange. */ @java.lang.Override - public java.util.List + @java.lang.Deprecated public java.util.List getEnclosingRangeList() { return enclosingRange_; } /** *
-   * (optional) Using the same encoding as the sibling `range` field, half-open
-   * source range of the nearest non-trivial enclosing AST node. This range must
-   * enclose the `range` field. Example applications that make use of the
-   * enclosing_range field:
-   *
-   * - Call hierarchies: to determine what symbols are references from the body
-   * of a function
-   * - Symbol outline: to display breadcrumbs from the cursor position to the
-   * root of the file
-   * - Expand selection: to select the nearest enclosing AST node.
-   * - Highlight range: to indicate the AST expression that is associated with a
-   * hover popover
-   *
-   * For definition occurrences, the enclosing range should indicate the
-   * start/end bounds of the entire definition AST node, including
-   * documentation.
-   * ```
-   * const n = 3
-   * ^ range
-   * ^^^^^^^^^^^ enclosing_range
-   *
-   * /** Parses the string into something */
-   * ^ enclosing_range start --------------------------------------|
-   * function parse(input string): string {                        |
-   * ^^^^^ range                                          |
-   * return input.slice(n)                                     |
-   * }                                                             |
-   * ^ enclosing_range end <---------------------------------------|
-   * ```
-   *
-   * Any attributes/decorators/attached macros should also be part of the
-   * enclosing range.
-   *
-   * ```python
-   * @cache
-   * ^ enclosing_range start---------------------|
-   * def factorial(n):                           |
-   * return n * factorial(n-1) if n else 1   |
-   * < enclosing_range end-----------------------|
-   *
-   * ```
-   *
-   * For reference occurrences, the enclosing range should indicate the start/end
-   * bounds of the parent expression.
-   * ```
-   * const a = a.b
-   * ^ range
-   * ^^^ enclosing_range
-   * const b = a.b(41).f(42).g(43)
-   * ^ range
-   * ^^^^^^^^^^^^^ enclosing_range
-   * ```
+   * Deprecated: Use `typed_enclosing_range` instead.
    * 
* - * repeated int32 enclosing_range = 7 [json_name = "enclosingRange"]; + * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; + * @deprecated scip.Occurrence.enclosing_range is deprecated. + * See scip.proto;l=713 * @return The count of enclosingRange. */ - public int getEnclosingRangeCount() { + @java.lang.Deprecated public int getEnclosingRangeCount() { return enclosingRange_.size(); } /** *
-   * (optional) Using the same encoding as the sibling `range` field, half-open
-   * source range of the nearest non-trivial enclosing AST node. This range must
-   * enclose the `range` field. Example applications that make use of the
-   * enclosing_range field:
-   *
-   * - Call hierarchies: to determine what symbols are references from the body
-   * of a function
-   * - Symbol outline: to display breadcrumbs from the cursor position to the
-   * root of the file
-   * - Expand selection: to select the nearest enclosing AST node.
-   * - Highlight range: to indicate the AST expression that is associated with a
-   * hover popover
-   *
-   * For definition occurrences, the enclosing range should indicate the
-   * start/end bounds of the entire definition AST node, including
-   * documentation.
-   * ```
-   * const n = 3
-   * ^ range
-   * ^^^^^^^^^^^ enclosing_range
-   *
-   * /** Parses the string into something */
-   * ^ enclosing_range start --------------------------------------|
-   * function parse(input string): string {                        |
-   * ^^^^^ range                                          |
-   * return input.slice(n)                                     |
-   * }                                                             |
-   * ^ enclosing_range end <---------------------------------------|
-   * ```
-   *
-   * Any attributes/decorators/attached macros should also be part of the
-   * enclosing range.
-   *
-   * ```python
-   * @cache
-   * ^ enclosing_range start---------------------|
-   * def factorial(n):                           |
-   * return n * factorial(n-1) if n else 1   |
-   * < enclosing_range end-----------------------|
-   *
-   * ```
-   *
-   * For reference occurrences, the enclosing range should indicate the start/end
-   * bounds of the parent expression.
-   * ```
-   * const a = a.b
-   * ^ range
-   * ^^^ enclosing_range
-   * const b = a.b(41).f(42).g(43)
-   * ^ range
-   * ^^^^^^^^^^^^^ enclosing_range
-   * ```
+   * Deprecated: Use `typed_enclosing_range` instead.
    * 
* - * repeated int32 enclosing_range = 7 [json_name = "enclosingRange"]; + * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; + * @deprecated scip.Occurrence.enclosing_range is deprecated. + * See scip.proto;l=713 * @param index The index of the element to return. * @return The enclosingRange at the given index. */ - public int getEnclosingRange(int index) { + @java.lang.Deprecated public int getEnclosingRange(int index) { return enclosingRange_.getInt(index); } private int enclosingRangeMemoizedSerializedSize = -1; + public static final int SINGLE_LINE_ENCLOSING_RANGE_FIELD_NUMBER = 10; + /** + * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; + * @return Whether the singleLineEnclosingRange field is set. + */ + @java.lang.Override + public boolean hasSingleLineEnclosingRange() { + return typedEnclosingRangeCase_ == 10; + } + /** + * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; + * @return The singleLineEnclosingRange. + */ + @java.lang.Override + public org.scip_code.scip.SingleLineRange getSingleLineEnclosingRange() { + if (typedEnclosingRangeCase_ == 10) { + return (org.scip_code.scip.SingleLineRange) typedEnclosingRange_; + } + return org.scip_code.scip.SingleLineRange.getDefaultInstance(); + } + /** + * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; + */ + @java.lang.Override + public org.scip_code.scip.SingleLineRangeOrBuilder getSingleLineEnclosingRangeOrBuilder() { + if (typedEnclosingRangeCase_ == 10) { + return (org.scip_code.scip.SingleLineRange) typedEnclosingRange_; + } + return org.scip_code.scip.SingleLineRange.getDefaultInstance(); + } + + public static final int MULTI_LINE_ENCLOSING_RANGE_FIELD_NUMBER = 11; + /** + * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; + * @return Whether the multiLineEnclosingRange field is set. + */ + @java.lang.Override + public boolean hasMultiLineEnclosingRange() { + return typedEnclosingRangeCase_ == 11; + } + /** + * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; + * @return The multiLineEnclosingRange. + */ + @java.lang.Override + public org.scip_code.scip.MultiLineRange getMultiLineEnclosingRange() { + if (typedEnclosingRangeCase_ == 11) { + return (org.scip_code.scip.MultiLineRange) typedEnclosingRange_; + } + return org.scip_code.scip.MultiLineRange.getDefaultInstance(); + } + /** + * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; + */ + @java.lang.Override + public org.scip_code.scip.MultiLineRangeOrBuilder getMultiLineEnclosingRangeOrBuilder() { + if (typedEnclosingRangeCase_ == 11) { + return (org.scip_code.scip.MultiLineRange) typedEnclosingRange_; + } + return org.scip_code.scip.MultiLineRange.getDefaultInstance(); + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -643,6 +701,18 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) for (int i = 0; i < enclosingRange_.size(); i++) { output.writeInt32NoTag(enclosingRange_.getInt(i)); } + if (typedRangeCase_ == 8) { + output.writeMessage(8, (org.scip_code.scip.SingleLineRange) typedRange_); + } + if (typedRangeCase_ == 9) { + output.writeMessage(9, (org.scip_code.scip.MultiLineRange) typedRange_); + } + if (typedEnclosingRangeCase_ == 10) { + output.writeMessage(10, (org.scip_code.scip.SingleLineRange) typedEnclosingRange_); + } + if (typedEnclosingRangeCase_ == 11) { + output.writeMessage(11, (org.scip_code.scip.MultiLineRange) typedEnclosingRange_); + } getUnknownFields().writeTo(output); } @@ -708,6 +778,22 @@ public int getSerializedSize() { } enclosingRangeMemoizedSerializedSize = dataSize; } + if (typedRangeCase_ == 8) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, (org.scip_code.scip.SingleLineRange) typedRange_); + } + if (typedRangeCase_ == 9) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, (org.scip_code.scip.MultiLineRange) typedRange_); + } + if (typedEnclosingRangeCase_ == 10) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(10, (org.scip_code.scip.SingleLineRange) typedEnclosingRange_); + } + if (typedEnclosingRangeCase_ == 11) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(11, (org.scip_code.scip.MultiLineRange) typedEnclosingRange_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -736,6 +822,32 @@ public boolean equals(final java.lang.Object obj) { .equals(other.getDiagnosticsList())) return false; if (!getEnclosingRangeList() .equals(other.getEnclosingRangeList())) return false; + if (!getTypedRangeCase().equals(other.getTypedRangeCase())) return false; + switch (typedRangeCase_) { + case 8: + if (!getSingleLineRange() + .equals(other.getSingleLineRange())) return false; + break; + case 9: + if (!getMultiLineRange() + .equals(other.getMultiLineRange())) return false; + break; + case 0: + default: + } + if (!getTypedEnclosingRangeCase().equals(other.getTypedEnclosingRangeCase())) return false; + switch (typedEnclosingRangeCase_) { + case 10: + if (!getSingleLineEnclosingRange() + .equals(other.getSingleLineEnclosingRange())) return false; + break; + case 11: + if (!getMultiLineEnclosingRange() + .equals(other.getMultiLineEnclosingRange())) return false; + break; + case 0: + default: + } if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -769,6 +881,30 @@ public int hashCode() { hash = (37 * hash) + ENCLOSING_RANGE_FIELD_NUMBER; hash = (53 * hash) + getEnclosingRangeList().hashCode(); } + switch (typedRangeCase_) { + case 8: + hash = (37 * hash) + SINGLE_LINE_RANGE_FIELD_NUMBER; + hash = (53 * hash) + getSingleLineRange().hashCode(); + break; + case 9: + hash = (37 * hash) + MULTI_LINE_RANGE_FIELD_NUMBER; + hash = (53 * hash) + getMultiLineRange().hashCode(); + break; + case 0: + default: + } + switch (typedEnclosingRangeCase_) { + case 10: + hash = (37 * hash) + SINGLE_LINE_ENCLOSING_RANGE_FIELD_NUMBER; + hash = (53 * hash) + getSingleLineEnclosingRange().hashCode(); + break; + case 11: + hash = (37 * hash) + MULTI_LINE_ENCLOSING_RANGE_FIELD_NUMBER; + hash = (53 * hash) + getMultiLineEnclosingRange().hashCode(); + break; + case 0: + default: + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -909,6 +1045,12 @@ public Builder clear() { super.clear(); bitField0_ = 0; range_ = emptyIntList(); + if (singleLineRangeBuilder_ != null) { + singleLineRangeBuilder_.clear(); + } + if (multiLineRangeBuilder_ != null) { + multiLineRangeBuilder_.clear(); + } symbol_ = ""; symbolRoles_ = 0; overrideDocumentation_ = @@ -920,8 +1062,18 @@ public Builder clear() { diagnostics_ = null; diagnosticsBuilder_.clear(); } - bitField0_ = (bitField0_ & ~0x00000020); + bitField0_ = (bitField0_ & ~0x00000080); enclosingRange_ = emptyIntList(); + if (singleLineEnclosingRangeBuilder_ != null) { + singleLineEnclosingRangeBuilder_.clear(); + } + if (multiLineEnclosingRangeBuilder_ != null) { + multiLineEnclosingRangeBuilder_.clear(); + } + typedRangeCase_ = 0; + typedRange_ = null; + typedEnclosingRangeCase_ = 0; + typedEnclosingRange_ = null; return this; } @@ -950,15 +1102,16 @@ public org.scip_code.scip.Occurrence buildPartial() { org.scip_code.scip.Occurrence result = new org.scip_code.scip.Occurrence(this); buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } + buildPartialOneofs(result); onBuilt(); return result; } private void buildPartialRepeatedFields(org.scip_code.scip.Occurrence result) { if (diagnosticsBuilder_ == null) { - if (((bitField0_ & 0x00000020) != 0)) { + if (((bitField0_ & 0x00000080) != 0)) { diagnostics_ = java.util.Collections.unmodifiableList(diagnostics_); - bitField0_ = (bitField0_ & ~0x00000020); + bitField0_ = (bitField0_ & ~0x00000080); } result.diagnostics_ = diagnostics_; } else { @@ -972,25 +1125,48 @@ private void buildPartial0(org.scip_code.scip.Occurrence result) { range_.makeImmutable(); result.range_ = range_; } - if (((from_bitField0_ & 0x00000002) != 0)) { + if (((from_bitField0_ & 0x00000008) != 0)) { result.symbol_ = symbol_; } - if (((from_bitField0_ & 0x00000004) != 0)) { + if (((from_bitField0_ & 0x00000010) != 0)) { result.symbolRoles_ = symbolRoles_; } - if (((from_bitField0_ & 0x00000008) != 0)) { + if (((from_bitField0_ & 0x00000020) != 0)) { overrideDocumentation_.makeImmutable(); result.overrideDocumentation_ = overrideDocumentation_; } - if (((from_bitField0_ & 0x00000010) != 0)) { + if (((from_bitField0_ & 0x00000040) != 0)) { result.syntaxKind_ = syntaxKind_; } - if (((from_bitField0_ & 0x00000040) != 0)) { + if (((from_bitField0_ & 0x00000100) != 0)) { enclosingRange_.makeImmutable(); result.enclosingRange_ = enclosingRange_; } } + private void buildPartialOneofs(org.scip_code.scip.Occurrence result) { + result.typedRangeCase_ = typedRangeCase_; + result.typedRange_ = this.typedRange_; + if (typedRangeCase_ == 8 && + singleLineRangeBuilder_ != null) { + result.typedRange_ = singleLineRangeBuilder_.build(); + } + if (typedRangeCase_ == 9 && + multiLineRangeBuilder_ != null) { + result.typedRange_ = multiLineRangeBuilder_.build(); + } + result.typedEnclosingRangeCase_ = typedEnclosingRangeCase_; + result.typedEnclosingRange_ = this.typedEnclosingRange_; + if (typedEnclosingRangeCase_ == 10 && + singleLineEnclosingRangeBuilder_ != null) { + result.typedEnclosingRange_ = singleLineEnclosingRangeBuilder_.build(); + } + if (typedEnclosingRangeCase_ == 11 && + multiLineEnclosingRangeBuilder_ != null) { + result.typedEnclosingRange_ = multiLineEnclosingRangeBuilder_.build(); + } + } + @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof org.scip_code.scip.Occurrence) { @@ -1016,7 +1192,7 @@ public Builder mergeFrom(org.scip_code.scip.Occurrence other) { } if (!other.getSymbol().isEmpty()) { symbol_ = other.symbol_; - bitField0_ |= 0x00000002; + bitField0_ |= 0x00000008; onChanged(); } if (other.getSymbolRoles() != 0) { @@ -1025,7 +1201,7 @@ public Builder mergeFrom(org.scip_code.scip.Occurrence other) { if (!other.overrideDocumentation_.isEmpty()) { if (overrideDocumentation_.isEmpty()) { overrideDocumentation_ = other.overrideDocumentation_; - bitField0_ |= 0x00000008; + bitField0_ |= 0x00000020; } else { ensureOverrideDocumentationIsMutable(); overrideDocumentation_.addAll(other.overrideDocumentation_); @@ -1039,7 +1215,7 @@ public Builder mergeFrom(org.scip_code.scip.Occurrence other) { if (!other.diagnostics_.isEmpty()) { if (diagnostics_.isEmpty()) { diagnostics_ = other.diagnostics_; - bitField0_ = (bitField0_ & ~0x00000020); + bitField0_ = (bitField0_ & ~0x00000080); } else { ensureDiagnosticsIsMutable(); diagnostics_.addAll(other.diagnostics_); @@ -1052,7 +1228,7 @@ public Builder mergeFrom(org.scip_code.scip.Occurrence other) { diagnosticsBuilder_.dispose(); diagnosticsBuilder_ = null; diagnostics_ = other.diagnostics_; - bitField0_ = (bitField0_ & ~0x00000020); + bitField0_ = (bitField0_ & ~0x00000080); diagnosticsBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? internalGetDiagnosticsFieldBuilder() : null; @@ -1065,13 +1241,39 @@ public Builder mergeFrom(org.scip_code.scip.Occurrence other) { if (enclosingRange_.isEmpty()) { enclosingRange_ = other.enclosingRange_; enclosingRange_.makeImmutable(); - bitField0_ |= 0x00000040; + bitField0_ |= 0x00000100; } else { ensureEnclosingRangeIsMutable(); enclosingRange_.addAll(other.enclosingRange_); } onChanged(); } + switch (other.getTypedRangeCase()) { + case SINGLE_LINE_RANGE: { + mergeSingleLineRange(other.getSingleLineRange()); + break; + } + case MULTI_LINE_RANGE: { + mergeMultiLineRange(other.getMultiLineRange()); + break; + } + case TYPEDRANGE_NOT_SET: { + break; + } + } + switch (other.getTypedEnclosingRangeCase()) { + case SINGLE_LINE_ENCLOSING_RANGE: { + mergeSingleLineEnclosingRange(other.getSingleLineEnclosingRange()); + break; + } + case MULTI_LINE_ENCLOSING_RANGE: { + mergeMultiLineEnclosingRange(other.getMultiLineEnclosingRange()); + break; + } + case TYPEDENCLOSINGRANGE_NOT_SET: { + break; + } + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -1116,12 +1318,12 @@ public Builder mergeFrom( } // case 10 case 18: { symbol_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000002; + bitField0_ |= 0x00000008; break; } // case 18 case 24: { symbolRoles_ = input.readInt32(); - bitField0_ |= 0x00000004; + bitField0_ |= 0x00000010; break; } // case 24 case 34: { @@ -1131,7 +1333,7 @@ public Builder mergeFrom( } // case 34 case 40: { syntaxKind_ = input.readEnum(); - bitField0_ |= 0x00000010; + bitField0_ |= 0x00000040; break; } // case 40 case 50: { @@ -1163,6 +1365,34 @@ public Builder mergeFrom( input.popLimit(limit); break; } // case 58 + case 66: { + input.readMessage( + internalGetSingleLineRangeFieldBuilder().getBuilder(), + extensionRegistry); + typedRangeCase_ = 8; + break; + } // case 66 + case 74: { + input.readMessage( + internalGetMultiLineRangeFieldBuilder().getBuilder(), + extensionRegistry); + typedRangeCase_ = 9; + break; + } // case 74 + case 82: { + input.readMessage( + internalGetSingleLineEnclosingRangeFieldBuilder().getBuilder(), + extensionRegistry); + typedEnclosingRangeCase_ = 10; + break; + } // case 82 + case 90: { + input.readMessage( + internalGetMultiLineEnclosingRangeFieldBuilder().getBuilder(), + extensionRegistry); + typedEnclosingRangeCase_ = 11; + break; + } // case 90 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { done = true; // was an endgroup tag @@ -1178,6 +1408,36 @@ public Builder mergeFrom( } // finally return this; } + private int typedRangeCase_ = 0; + private java.lang.Object typedRange_; + public TypedRangeCase + getTypedRangeCase() { + return TypedRangeCase.forNumber( + typedRangeCase_); + } + + public Builder clearTypedRange() { + typedRangeCase_ = 0; + typedRange_ = null; + onChanged(); + return this; + } + + private int typedEnclosingRangeCase_ = 0; + private java.lang.Object typedEnclosingRange_; + public TypedEnclosingRangeCase + getTypedEnclosingRangeCase() { + return TypedEnclosingRangeCase.forNumber( + typedEnclosingRangeCase_); + } + + public Builder clearTypedEnclosingRange() { + typedEnclosingRangeCase_ = 0; + typedEnclosingRange_ = null; + onChanged(); + return this; + } + private int bitField0_; private com.google.protobuf.Internal.IntList range_ = emptyIntList(); @@ -1189,139 +1449,103 @@ private void ensureRangeIsMutable() { } /** *
-     * Half-open [start, end) range of this occurrence. Must be exactly three or four
-     * elements:
+     * Deprecated: Use `single_line_range` or `multi_line_range` instead.
      *
+     * Half-open [start, end) range. Must be exactly three or four elements:
+     * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line)
      * - Four elements: `[startLine, startCharacter, endLine, endCharacter]`
-     * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line
-     * is inferred to have the same value as the start line.
-     *
-     * It is allowed for the range to be empty (i.e. start==end).
-     *
-     * Line numbers and characters are always 0-based. Make sure to increment the
-     * line/character values before displaying them in an editor-like UI because
-     * editors conventionally use 1-based numbers.
-     *
-     * The 'character' value is interpreted based on the PositionEncoding for
-     * the Document.
      *
      * Historical note: the original draft of this schema had a `Range` message
      * type with `start` and `end` fields of type `Position`, mirroring LSP.
      * Benchmarks revealed that this encoding was inefficient and that we could
      * reduce the total payload size of an index by 50% by using `repeated int32`
-     * instead. The `repeated int32` encoding is admittedly more embarrassing to
-     * work with in some programming languages but we hope the performance
-     * improvements make up for it.
+     * instead. However, the lack of type safety led to the introduction of
+     * `single_line_range` and `multi_line_range` as typed alternatives.
      * 
* - * repeated int32 range = 1 [json_name = "range"]; + * repeated int32 range = 1 [json_name = "range", deprecated = true]; + * @deprecated scip.Occurrence.range is deprecated. + * See scip.proto;l=675 * @return A list containing the range. */ - public java.util.List + @java.lang.Deprecated public java.util.List getRangeList() { range_.makeImmutable(); return range_; } /** *
-     * Half-open [start, end) range of this occurrence. Must be exactly three or four
-     * elements:
+     * Deprecated: Use `single_line_range` or `multi_line_range` instead.
      *
+     * Half-open [start, end) range. Must be exactly three or four elements:
+     * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line)
      * - Four elements: `[startLine, startCharacter, endLine, endCharacter]`
-     * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line
-     * is inferred to have the same value as the start line.
-     *
-     * It is allowed for the range to be empty (i.e. start==end).
-     *
-     * Line numbers and characters are always 0-based. Make sure to increment the
-     * line/character values before displaying them in an editor-like UI because
-     * editors conventionally use 1-based numbers.
-     *
-     * The 'character' value is interpreted based on the PositionEncoding for
-     * the Document.
      *
      * Historical note: the original draft of this schema had a `Range` message
      * type with `start` and `end` fields of type `Position`, mirroring LSP.
      * Benchmarks revealed that this encoding was inefficient and that we could
      * reduce the total payload size of an index by 50% by using `repeated int32`
-     * instead. The `repeated int32` encoding is admittedly more embarrassing to
-     * work with in some programming languages but we hope the performance
-     * improvements make up for it.
+     * instead. However, the lack of type safety led to the introduction of
+     * `single_line_range` and `multi_line_range` as typed alternatives.
      * 
* - * repeated int32 range = 1 [json_name = "range"]; + * repeated int32 range = 1 [json_name = "range", deprecated = true]; + * @deprecated scip.Occurrence.range is deprecated. + * See scip.proto;l=675 * @return The count of range. */ - public int getRangeCount() { + @java.lang.Deprecated public int getRangeCount() { return range_.size(); } /** *
-     * Half-open [start, end) range of this occurrence. Must be exactly three or four
-     * elements:
+     * Deprecated: Use `single_line_range` or `multi_line_range` instead.
      *
+     * Half-open [start, end) range. Must be exactly three or four elements:
+     * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line)
      * - Four elements: `[startLine, startCharacter, endLine, endCharacter]`
-     * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line
-     * is inferred to have the same value as the start line.
-     *
-     * It is allowed for the range to be empty (i.e. start==end).
-     *
-     * Line numbers and characters are always 0-based. Make sure to increment the
-     * line/character values before displaying them in an editor-like UI because
-     * editors conventionally use 1-based numbers.
-     *
-     * The 'character' value is interpreted based on the PositionEncoding for
-     * the Document.
      *
      * Historical note: the original draft of this schema had a `Range` message
      * type with `start` and `end` fields of type `Position`, mirroring LSP.
      * Benchmarks revealed that this encoding was inefficient and that we could
      * reduce the total payload size of an index by 50% by using `repeated int32`
-     * instead. The `repeated int32` encoding is admittedly more embarrassing to
-     * work with in some programming languages but we hope the performance
-     * improvements make up for it.
+     * instead. However, the lack of type safety led to the introduction of
+     * `single_line_range` and `multi_line_range` as typed alternatives.
      * 
* - * repeated int32 range = 1 [json_name = "range"]; + * repeated int32 range = 1 [json_name = "range", deprecated = true]; + * @deprecated scip.Occurrence.range is deprecated. + * See scip.proto;l=675 * @param index The index of the element to return. * @return The range at the given index. */ - public int getRange(int index) { + @java.lang.Deprecated public int getRange(int index) { return range_.getInt(index); } /** *
-     * Half-open [start, end) range of this occurrence. Must be exactly three or four
-     * elements:
+     * Deprecated: Use `single_line_range` or `multi_line_range` instead.
      *
+     * Half-open [start, end) range. Must be exactly three or four elements:
+     * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line)
      * - Four elements: `[startLine, startCharacter, endLine, endCharacter]`
-     * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line
-     * is inferred to have the same value as the start line.
-     *
-     * It is allowed for the range to be empty (i.e. start==end).
-     *
-     * Line numbers and characters are always 0-based. Make sure to increment the
-     * line/character values before displaying them in an editor-like UI because
-     * editors conventionally use 1-based numbers.
-     *
-     * The 'character' value is interpreted based on the PositionEncoding for
-     * the Document.
      *
      * Historical note: the original draft of this schema had a `Range` message
      * type with `start` and `end` fields of type `Position`, mirroring LSP.
      * Benchmarks revealed that this encoding was inefficient and that we could
      * reduce the total payload size of an index by 50% by using `repeated int32`
-     * instead. The `repeated int32` encoding is admittedly more embarrassing to
-     * work with in some programming languages but we hope the performance
-     * improvements make up for it.
+     * instead. However, the lack of type safety led to the introduction of
+     * `single_line_range` and `multi_line_range` as typed alternatives.
      * 
* - * repeated int32 range = 1 [json_name = "range"]; + * repeated int32 range = 1 [json_name = "range", deprecated = true]; + * @deprecated scip.Occurrence.range is deprecated. + * See scip.proto;l=675 * @param index The index to set the value at. * @param value The range to set. * @return This builder for chaining. */ - public Builder setRange( + @java.lang.Deprecated public Builder setRange( int index, int value) { ensureRangeIsMutable(); @@ -1332,36 +1556,27 @@ public Builder setRange( } /** *
-     * Half-open [start, end) range of this occurrence. Must be exactly three or four
-     * elements:
+     * Deprecated: Use `single_line_range` or `multi_line_range` instead.
      *
+     * Half-open [start, end) range. Must be exactly three or four elements:
+     * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line)
      * - Four elements: `[startLine, startCharacter, endLine, endCharacter]`
-     * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line
-     * is inferred to have the same value as the start line.
-     *
-     * It is allowed for the range to be empty (i.e. start==end).
-     *
-     * Line numbers and characters are always 0-based. Make sure to increment the
-     * line/character values before displaying them in an editor-like UI because
-     * editors conventionally use 1-based numbers.
-     *
-     * The 'character' value is interpreted based on the PositionEncoding for
-     * the Document.
      *
      * Historical note: the original draft of this schema had a `Range` message
      * type with `start` and `end` fields of type `Position`, mirroring LSP.
      * Benchmarks revealed that this encoding was inefficient and that we could
      * reduce the total payload size of an index by 50% by using `repeated int32`
-     * instead. The `repeated int32` encoding is admittedly more embarrassing to
-     * work with in some programming languages but we hope the performance
-     * improvements make up for it.
+     * instead. However, the lack of type safety led to the introduction of
+     * `single_line_range` and `multi_line_range` as typed alternatives.
      * 
* - * repeated int32 range = 1 [json_name = "range"]; + * repeated int32 range = 1 [json_name = "range", deprecated = true]; + * @deprecated scip.Occurrence.range is deprecated. + * See scip.proto;l=675 * @param value The range to add. * @return This builder for chaining. */ - public Builder addRange(int value) { + @java.lang.Deprecated public Builder addRange(int value) { ensureRangeIsMutable(); range_.addInt(value); @@ -1371,36 +1586,27 @@ public Builder addRange(int value) { } /** *
-     * Half-open [start, end) range of this occurrence. Must be exactly three or four
-     * elements:
+     * Deprecated: Use `single_line_range` or `multi_line_range` instead.
      *
+     * Half-open [start, end) range. Must be exactly three or four elements:
+     * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line)
      * - Four elements: `[startLine, startCharacter, endLine, endCharacter]`
-     * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line
-     * is inferred to have the same value as the start line.
-     *
-     * It is allowed for the range to be empty (i.e. start==end).
-     *
-     * Line numbers and characters are always 0-based. Make sure to increment the
-     * line/character values before displaying them in an editor-like UI because
-     * editors conventionally use 1-based numbers.
-     *
-     * The 'character' value is interpreted based on the PositionEncoding for
-     * the Document.
      *
      * Historical note: the original draft of this schema had a `Range` message
      * type with `start` and `end` fields of type `Position`, mirroring LSP.
      * Benchmarks revealed that this encoding was inefficient and that we could
      * reduce the total payload size of an index by 50% by using `repeated int32`
-     * instead. The `repeated int32` encoding is admittedly more embarrassing to
-     * work with in some programming languages but we hope the performance
-     * improvements make up for it.
+     * instead. However, the lack of type safety led to the introduction of
+     * `single_line_range` and `multi_line_range` as typed alternatives.
      * 
* - * repeated int32 range = 1 [json_name = "range"]; + * repeated int32 range = 1 [json_name = "range", deprecated = true]; + * @deprecated scip.Occurrence.range is deprecated. + * See scip.proto;l=675 * @param values The range to add. * @return This builder for chaining. */ - public Builder addAllRange( + @java.lang.Deprecated public Builder addAllRange( java.lang.Iterable values) { ensureRangeIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll( @@ -1411,89 +1617,436 @@ public Builder addAllRange( } /** *
-     * Half-open [start, end) range of this occurrence. Must be exactly three or four
-     * elements:
+     * Deprecated: Use `single_line_range` or `multi_line_range` instead.
      *
+     * Half-open [start, end) range. Must be exactly three or four elements:
+     * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line)
      * - Four elements: `[startLine, startCharacter, endLine, endCharacter]`
-     * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line
-     * is inferred to have the same value as the start line.
-     *
-     * It is allowed for the range to be empty (i.e. start==end).
-     *
-     * Line numbers and characters are always 0-based. Make sure to increment the
-     * line/character values before displaying them in an editor-like UI because
-     * editors conventionally use 1-based numbers.
-     *
-     * The 'character' value is interpreted based on the PositionEncoding for
-     * the Document.
      *
      * Historical note: the original draft of this schema had a `Range` message
      * type with `start` and `end` fields of type `Position`, mirroring LSP.
      * Benchmarks revealed that this encoding was inefficient and that we could
      * reduce the total payload size of an index by 50% by using `repeated int32`
-     * instead. The `repeated int32` encoding is admittedly more embarrassing to
-     * work with in some programming languages but we hope the performance
-     * improvements make up for it.
+     * instead. However, the lack of type safety led to the introduction of
+     * `single_line_range` and `multi_line_range` as typed alternatives.
      * 
* - * repeated int32 range = 1 [json_name = "range"]; + * repeated int32 range = 1 [json_name = "range", deprecated = true]; + * @deprecated scip.Occurrence.range is deprecated. + * See scip.proto;l=675 * @return This builder for chaining. */ - public Builder clearRange() { + @java.lang.Deprecated public Builder clearRange() { range_ = emptyIntList(); bitField0_ = (bitField0_ & ~0x00000001); onChanged(); return this; } - private java.lang.Object symbol_ = ""; + private com.google.protobuf.SingleFieldBuilder< + org.scip_code.scip.SingleLineRange, org.scip_code.scip.SingleLineRange.Builder, org.scip_code.scip.SingleLineRangeOrBuilder> singleLineRangeBuilder_; /** *
-     * (optional) The symbol that appears at this position. See
-     * `SymbolInformation.symbol` for how to format symbols as strings.
+     * Range spanning a single line.
      * 
* - * string symbol = 2 [json_name = "symbol"]; - * @return The symbol. + * .scip.SingleLineRange single_line_range = 8 [json_name = "singleLineRange"]; + * @return Whether the singleLineRange field is set. */ - public java.lang.String getSymbol() { - java.lang.Object ref = symbol_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - symbol_ = s; - return s; + @java.lang.Override + public boolean hasSingleLineRange() { + return typedRangeCase_ == 8; + } + /** + *
+     * Range spanning a single line.
+     * 
+ * + * .scip.SingleLineRange single_line_range = 8 [json_name = "singleLineRange"]; + * @return The singleLineRange. + */ + @java.lang.Override + public org.scip_code.scip.SingleLineRange getSingleLineRange() { + if (singleLineRangeBuilder_ == null) { + if (typedRangeCase_ == 8) { + return (org.scip_code.scip.SingleLineRange) typedRange_; + } + return org.scip_code.scip.SingleLineRange.getDefaultInstance(); } else { - return (java.lang.String) ref; + if (typedRangeCase_ == 8) { + return singleLineRangeBuilder_.getMessage(); + } + return org.scip_code.scip.SingleLineRange.getDefaultInstance(); } } /** *
-     * (optional) The symbol that appears at this position. See
-     * `SymbolInformation.symbol` for how to format symbols as strings.
+     * Range spanning a single line.
      * 
* - * string symbol = 2 [json_name = "symbol"]; - * @return The bytes for symbol. + * .scip.SingleLineRange single_line_range = 8 [json_name = "singleLineRange"]; */ - public com.google.protobuf.ByteString - getSymbolBytes() { - java.lang.Object ref = symbol_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - symbol_ = b; - return b; + public Builder setSingleLineRange(org.scip_code.scip.SingleLineRange value) { + if (singleLineRangeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + typedRange_ = value; + onChanged(); } else { - return (com.google.protobuf.ByteString) ref; + singleLineRangeBuilder_.setMessage(value); } + typedRangeCase_ = 8; + return this; } /** *
-     * (optional) The symbol that appears at this position. See
-     * `SymbolInformation.symbol` for how to format symbols as strings.
+     * Range spanning a single line.
+     * 
+ * + * .scip.SingleLineRange single_line_range = 8 [json_name = "singleLineRange"]; + */ + public Builder setSingleLineRange( + org.scip_code.scip.SingleLineRange.Builder builderForValue) { + if (singleLineRangeBuilder_ == null) { + typedRange_ = builderForValue.build(); + onChanged(); + } else { + singleLineRangeBuilder_.setMessage(builderForValue.build()); + } + typedRangeCase_ = 8; + return this; + } + /** + *
+     * Range spanning a single line.
+     * 
+ * + * .scip.SingleLineRange single_line_range = 8 [json_name = "singleLineRange"]; + */ + public Builder mergeSingleLineRange(org.scip_code.scip.SingleLineRange value) { + if (singleLineRangeBuilder_ == null) { + if (typedRangeCase_ == 8 && + typedRange_ != org.scip_code.scip.SingleLineRange.getDefaultInstance()) { + typedRange_ = org.scip_code.scip.SingleLineRange.newBuilder((org.scip_code.scip.SingleLineRange) typedRange_) + .mergeFrom(value).buildPartial(); + } else { + typedRange_ = value; + } + onChanged(); + } else { + if (typedRangeCase_ == 8) { + singleLineRangeBuilder_.mergeFrom(value); + } else { + singleLineRangeBuilder_.setMessage(value); + } + } + typedRangeCase_ = 8; + return this; + } + /** + *
+     * Range spanning a single line.
+     * 
+ * + * .scip.SingleLineRange single_line_range = 8 [json_name = "singleLineRange"]; + */ + public Builder clearSingleLineRange() { + if (singleLineRangeBuilder_ == null) { + if (typedRangeCase_ == 8) { + typedRangeCase_ = 0; + typedRange_ = null; + onChanged(); + } + } else { + if (typedRangeCase_ == 8) { + typedRangeCase_ = 0; + typedRange_ = null; + } + singleLineRangeBuilder_.clear(); + } + return this; + } + /** + *
+     * Range spanning a single line.
+     * 
+ * + * .scip.SingleLineRange single_line_range = 8 [json_name = "singleLineRange"]; + */ + public org.scip_code.scip.SingleLineRange.Builder getSingleLineRangeBuilder() { + return internalGetSingleLineRangeFieldBuilder().getBuilder(); + } + /** + *
+     * Range spanning a single line.
+     * 
+ * + * .scip.SingleLineRange single_line_range = 8 [json_name = "singleLineRange"]; + */ + @java.lang.Override + public org.scip_code.scip.SingleLineRangeOrBuilder getSingleLineRangeOrBuilder() { + if ((typedRangeCase_ == 8) && (singleLineRangeBuilder_ != null)) { + return singleLineRangeBuilder_.getMessageOrBuilder(); + } else { + if (typedRangeCase_ == 8) { + return (org.scip_code.scip.SingleLineRange) typedRange_; + } + return org.scip_code.scip.SingleLineRange.getDefaultInstance(); + } + } + /** + *
+     * Range spanning a single line.
+     * 
+ * + * .scip.SingleLineRange single_line_range = 8 [json_name = "singleLineRange"]; + */ + private com.google.protobuf.SingleFieldBuilder< + org.scip_code.scip.SingleLineRange, org.scip_code.scip.SingleLineRange.Builder, org.scip_code.scip.SingleLineRangeOrBuilder> + internalGetSingleLineRangeFieldBuilder() { + if (singleLineRangeBuilder_ == null) { + if (!(typedRangeCase_ == 8)) { + typedRange_ = org.scip_code.scip.SingleLineRange.getDefaultInstance(); + } + singleLineRangeBuilder_ = new com.google.protobuf.SingleFieldBuilder< + org.scip_code.scip.SingleLineRange, org.scip_code.scip.SingleLineRange.Builder, org.scip_code.scip.SingleLineRangeOrBuilder>( + (org.scip_code.scip.SingleLineRange) typedRange_, + getParentForChildren(), + isClean()); + typedRange_ = null; + } + typedRangeCase_ = 8; + onChanged(); + return singleLineRangeBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + org.scip_code.scip.MultiLineRange, org.scip_code.scip.MultiLineRange.Builder, org.scip_code.scip.MultiLineRangeOrBuilder> multiLineRangeBuilder_; + /** + *
+     * Range spanning multiple lines.
+     * 
+ * + * .scip.MultiLineRange multi_line_range = 9 [json_name = "multiLineRange"]; + * @return Whether the multiLineRange field is set. + */ + @java.lang.Override + public boolean hasMultiLineRange() { + return typedRangeCase_ == 9; + } + /** + *
+     * Range spanning multiple lines.
+     * 
+ * + * .scip.MultiLineRange multi_line_range = 9 [json_name = "multiLineRange"]; + * @return The multiLineRange. + */ + @java.lang.Override + public org.scip_code.scip.MultiLineRange getMultiLineRange() { + if (multiLineRangeBuilder_ == null) { + if (typedRangeCase_ == 9) { + return (org.scip_code.scip.MultiLineRange) typedRange_; + } + return org.scip_code.scip.MultiLineRange.getDefaultInstance(); + } else { + if (typedRangeCase_ == 9) { + return multiLineRangeBuilder_.getMessage(); + } + return org.scip_code.scip.MultiLineRange.getDefaultInstance(); + } + } + /** + *
+     * Range spanning multiple lines.
+     * 
+ * + * .scip.MultiLineRange multi_line_range = 9 [json_name = "multiLineRange"]; + */ + public Builder setMultiLineRange(org.scip_code.scip.MultiLineRange value) { + if (multiLineRangeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + typedRange_ = value; + onChanged(); + } else { + multiLineRangeBuilder_.setMessage(value); + } + typedRangeCase_ = 9; + return this; + } + /** + *
+     * Range spanning multiple lines.
+     * 
+ * + * .scip.MultiLineRange multi_line_range = 9 [json_name = "multiLineRange"]; + */ + public Builder setMultiLineRange( + org.scip_code.scip.MultiLineRange.Builder builderForValue) { + if (multiLineRangeBuilder_ == null) { + typedRange_ = builderForValue.build(); + onChanged(); + } else { + multiLineRangeBuilder_.setMessage(builderForValue.build()); + } + typedRangeCase_ = 9; + return this; + } + /** + *
+     * Range spanning multiple lines.
+     * 
+ * + * .scip.MultiLineRange multi_line_range = 9 [json_name = "multiLineRange"]; + */ + public Builder mergeMultiLineRange(org.scip_code.scip.MultiLineRange value) { + if (multiLineRangeBuilder_ == null) { + if (typedRangeCase_ == 9 && + typedRange_ != org.scip_code.scip.MultiLineRange.getDefaultInstance()) { + typedRange_ = org.scip_code.scip.MultiLineRange.newBuilder((org.scip_code.scip.MultiLineRange) typedRange_) + .mergeFrom(value).buildPartial(); + } else { + typedRange_ = value; + } + onChanged(); + } else { + if (typedRangeCase_ == 9) { + multiLineRangeBuilder_.mergeFrom(value); + } else { + multiLineRangeBuilder_.setMessage(value); + } + } + typedRangeCase_ = 9; + return this; + } + /** + *
+     * Range spanning multiple lines.
+     * 
+ * + * .scip.MultiLineRange multi_line_range = 9 [json_name = "multiLineRange"]; + */ + public Builder clearMultiLineRange() { + if (multiLineRangeBuilder_ == null) { + if (typedRangeCase_ == 9) { + typedRangeCase_ = 0; + typedRange_ = null; + onChanged(); + } + } else { + if (typedRangeCase_ == 9) { + typedRangeCase_ = 0; + typedRange_ = null; + } + multiLineRangeBuilder_.clear(); + } + return this; + } + /** + *
+     * Range spanning multiple lines.
+     * 
+ * + * .scip.MultiLineRange multi_line_range = 9 [json_name = "multiLineRange"]; + */ + public org.scip_code.scip.MultiLineRange.Builder getMultiLineRangeBuilder() { + return internalGetMultiLineRangeFieldBuilder().getBuilder(); + } + /** + *
+     * Range spanning multiple lines.
+     * 
+ * + * .scip.MultiLineRange multi_line_range = 9 [json_name = "multiLineRange"]; + */ + @java.lang.Override + public org.scip_code.scip.MultiLineRangeOrBuilder getMultiLineRangeOrBuilder() { + if ((typedRangeCase_ == 9) && (multiLineRangeBuilder_ != null)) { + return multiLineRangeBuilder_.getMessageOrBuilder(); + } else { + if (typedRangeCase_ == 9) { + return (org.scip_code.scip.MultiLineRange) typedRange_; + } + return org.scip_code.scip.MultiLineRange.getDefaultInstance(); + } + } + /** + *
+     * Range spanning multiple lines.
+     * 
+ * + * .scip.MultiLineRange multi_line_range = 9 [json_name = "multiLineRange"]; + */ + private com.google.protobuf.SingleFieldBuilder< + org.scip_code.scip.MultiLineRange, org.scip_code.scip.MultiLineRange.Builder, org.scip_code.scip.MultiLineRangeOrBuilder> + internalGetMultiLineRangeFieldBuilder() { + if (multiLineRangeBuilder_ == null) { + if (!(typedRangeCase_ == 9)) { + typedRange_ = org.scip_code.scip.MultiLineRange.getDefaultInstance(); + } + multiLineRangeBuilder_ = new com.google.protobuf.SingleFieldBuilder< + org.scip_code.scip.MultiLineRange, org.scip_code.scip.MultiLineRange.Builder, org.scip_code.scip.MultiLineRangeOrBuilder>( + (org.scip_code.scip.MultiLineRange) typedRange_, + getParentForChildren(), + isClean()); + typedRange_ = null; + } + typedRangeCase_ = 9; + onChanged(); + return multiLineRangeBuilder_; + } + + private java.lang.Object symbol_ = ""; + /** + *
+     * (optional) The symbol that appears at this position. See
+     * `SymbolInformation.symbol` for how to format symbols as strings.
+     * 
+ * + * string symbol = 2 [json_name = "symbol"]; + * @return The symbol. + */ + public java.lang.String getSymbol() { + java.lang.Object ref = symbol_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + symbol_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+     * (optional) The symbol that appears at this position. See
+     * `SymbolInformation.symbol` for how to format symbols as strings.
+     * 
+ * + * string symbol = 2 [json_name = "symbol"]; + * @return The bytes for symbol. + */ + public com.google.protobuf.ByteString + getSymbolBytes() { + java.lang.Object ref = symbol_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + symbol_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+     * (optional) The symbol that appears at this position. See
+     * `SymbolInformation.symbol` for how to format symbols as strings.
      * 
* * string symbol = 2 [json_name = "symbol"]; @@ -1504,7 +2057,7 @@ public Builder setSymbol( java.lang.String value) { if (value == null) { throw new NullPointerException(); } symbol_ = value; - bitField0_ |= 0x00000002; + bitField0_ |= 0x00000008; onChanged(); return this; } @@ -1519,7 +2072,7 @@ public Builder setSymbol( */ public Builder clearSymbol() { symbol_ = getDefaultInstance().getSymbol(); - bitField0_ = (bitField0_ & ~0x00000002); + bitField0_ = (bitField0_ & ~0x00000008); onChanged(); return this; } @@ -1538,7 +2091,7 @@ public Builder setSymbolBytes( if (value == null) { throw new NullPointerException(); } checkByteStringIsUtf8(value); symbol_ = value; - bitField0_ |= 0x00000002; + bitField0_ |= 0x00000008; onChanged(); return this; } @@ -1570,7 +2123,7 @@ public int getSymbolRoles() { public Builder setSymbolRoles(int value) { symbolRoles_ = value; - bitField0_ |= 0x00000004; + bitField0_ |= 0x00000010; onChanged(); return this; } @@ -1584,7 +2137,7 @@ public Builder setSymbolRoles(int value) { * @return This builder for chaining. */ public Builder clearSymbolRoles() { - bitField0_ = (bitField0_ & ~0x00000004); + bitField0_ = (bitField0_ & ~0x00000010); symbolRoles_ = 0; onChanged(); return this; @@ -1596,7 +2149,7 @@ private void ensureOverrideDocumentationIsMutable() { if (!overrideDocumentation_.isModifiable()) { overrideDocumentation_ = new com.google.protobuf.LazyStringArrayList(overrideDocumentation_); } - bitField0_ |= 0x00000008; + bitField0_ |= 0x00000020; } /** *
@@ -1697,7 +2250,7 @@ public Builder setOverrideDocumentation(
       if (value == null) { throw new NullPointerException(); }
       ensureOverrideDocumentationIsMutable();
       overrideDocumentation_.set(index, value);
-      bitField0_ |= 0x00000008;
+      bitField0_ |= 0x00000020;
       onChanged();
       return this;
     }
@@ -1722,7 +2275,7 @@ public Builder addOverrideDocumentation(
       if (value == null) { throw new NullPointerException(); }
       ensureOverrideDocumentationIsMutable();
       overrideDocumentation_.add(value);
-      bitField0_ |= 0x00000008;
+      bitField0_ |= 0x00000020;
       onChanged();
       return this;
     }
@@ -1747,7 +2300,7 @@ public Builder addAllOverrideDocumentation(
       ensureOverrideDocumentationIsMutable();
       com.google.protobuf.AbstractMessageLite.Builder.addAll(
           values, overrideDocumentation_);
-      bitField0_ |= 0x00000008;
+      bitField0_ |= 0x00000020;
       onChanged();
       return this;
     }
@@ -1769,7 +2322,7 @@ public Builder addAllOverrideDocumentation(
     public Builder clearOverrideDocumentation() {
       overrideDocumentation_ =
         com.google.protobuf.LazyStringArrayList.emptyList();
-      bitField0_ = (bitField0_ & ~0x00000008);;
+      bitField0_ = (bitField0_ & ~0x00000020);;
       onChanged();
       return this;
     }
@@ -1795,7 +2348,7 @@ public Builder addOverrideDocumentationBytes(
       checkByteStringIsUtf8(value);
       ensureOverrideDocumentationIsMutable();
       overrideDocumentation_.add(value);
-      bitField0_ |= 0x00000008;
+      bitField0_ |= 0x00000020;
       onChanged();
       return this;
     }
@@ -1824,7 +2377,7 @@ public Builder addOverrideDocumentationBytes(
      */
     public Builder setSyntaxKindValue(int value) {
       syntaxKind_ = value;
-      bitField0_ |= 0x00000010;
+      bitField0_ |= 0x00000040;
       onChanged();
       return this;
     }
@@ -1852,7 +2405,7 @@ public org.scip_code.scip.SyntaxKind getSyntaxKind() {
      */
     public Builder setSyntaxKind(org.scip_code.scip.SyntaxKind value) {
       if (value == null) { throw new NullPointerException(); }
-      bitField0_ |= 0x00000010;
+      bitField0_ |= 0x00000040;
       syntaxKind_ = value.getNumber();
       onChanged();
       return this;
@@ -1866,7 +2419,7 @@ public Builder setSyntaxKind(org.scip_code.scip.SyntaxKind value) {
      * @return This builder for chaining.
      */
     public Builder clearSyntaxKind() {
-      bitField0_ = (bitField0_ & ~0x00000010);
+      bitField0_ = (bitField0_ & ~0x00000040);
       syntaxKind_ = 0;
       onChanged();
       return this;
@@ -1875,9 +2428,9 @@ public Builder clearSyntaxKind() {
     private java.util.List diagnostics_ =
       java.util.Collections.emptyList();
     private void ensureDiagnosticsIsMutable() {
-      if (!((bitField0_ & 0x00000020) != 0)) {
+      if (!((bitField0_ & 0x00000080) != 0)) {
         diagnostics_ = new java.util.ArrayList(diagnostics_);
-        bitField0_ |= 0x00000020;
+        bitField0_ |= 0x00000080;
        }
     }
 
@@ -2071,7 +2624,7 @@ public Builder addAllDiagnostics(
     public Builder clearDiagnostics() {
       if (diagnosticsBuilder_ == null) {
         diagnostics_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000020);
+        bitField0_ = (bitField0_ & ~0x00000080);
         onChanged();
       } else {
         diagnosticsBuilder_.clear();
@@ -2176,7 +2729,7 @@ public org.scip_code.scip.Diagnostic.Builder addDiagnosticsBuilder(
         diagnosticsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
             org.scip_code.scip.Diagnostic, org.scip_code.scip.Diagnostic.Builder, org.scip_code.scip.DiagnosticOrBuilder>(
                 diagnostics_,
-                ((bitField0_ & 0x00000020) != 0),
+                ((bitField0_ & 0x00000080) != 0),
                 getParentForChildren(),
                 isClean());
         diagnostics_ = null;
@@ -2189,470 +2742,411 @@ private void ensureEnclosingRangeIsMutable() {
       if (!enclosingRange_.isModifiable()) {
         enclosingRange_ = makeMutableCopy(enclosingRange_);
       }
-      bitField0_ |= 0x00000040;
+      bitField0_ |= 0x00000100;
     }
     /**
      * 
-     * (optional) Using the same encoding as the sibling `range` field, half-open
-     * source range of the nearest non-trivial enclosing AST node. This range must
-     * enclose the `range` field. Example applications that make use of the
-     * enclosing_range field:
-     *
-     * - Call hierarchies: to determine what symbols are references from the body
-     * of a function
-     * - Symbol outline: to display breadcrumbs from the cursor position to the
-     * root of the file
-     * - Expand selection: to select the nearest enclosing AST node.
-     * - Highlight range: to indicate the AST expression that is associated with a
-     * hover popover
-     *
-     * For definition occurrences, the enclosing range should indicate the
-     * start/end bounds of the entire definition AST node, including
-     * documentation.
-     * ```
-     * const n = 3
-     * ^ range
-     * ^^^^^^^^^^^ enclosing_range
-     *
-     * /** Parses the string into something */
-     * ^ enclosing_range start --------------------------------------|
-     * function parse(input string): string {                        |
-     * ^^^^^ range                                          |
-     * return input.slice(n)                                     |
-     * }                                                             |
-     * ^ enclosing_range end <---------------------------------------|
-     * ```
-     *
-     * Any attributes/decorators/attached macros should also be part of the
-     * enclosing range.
-     *
-     * ```python
-     * @cache
-     * ^ enclosing_range start---------------------|
-     * def factorial(n):                           |
-     * return n * factorial(n-1) if n else 1   |
-     * < enclosing_range end-----------------------|
-     *
-     * ```
-     *
-     * For reference occurrences, the enclosing range should indicate the start/end
-     * bounds of the parent expression.
-     * ```
-     * const a = a.b
-     * ^ range
-     * ^^^ enclosing_range
-     * const b = a.b(41).f(42).g(43)
-     * ^ range
-     * ^^^^^^^^^^^^^ enclosing_range
-     * ```
-     * 
- * - * repeated int32 enclosing_range = 7 [json_name = "enclosingRange"]; + * Deprecated: Use `typed_enclosing_range` instead. + *
+ * + * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; + * @deprecated scip.Occurrence.enclosing_range is deprecated. + * See scip.proto;l=713 * @return A list containing the enclosingRange. */ - public java.util.List + @java.lang.Deprecated public java.util.List getEnclosingRangeList() { enclosingRange_.makeImmutable(); return enclosingRange_; } /** *
-     * (optional) Using the same encoding as the sibling `range` field, half-open
-     * source range of the nearest non-trivial enclosing AST node. This range must
-     * enclose the `range` field. Example applications that make use of the
-     * enclosing_range field:
-     *
-     * - Call hierarchies: to determine what symbols are references from the body
-     * of a function
-     * - Symbol outline: to display breadcrumbs from the cursor position to the
-     * root of the file
-     * - Expand selection: to select the nearest enclosing AST node.
-     * - Highlight range: to indicate the AST expression that is associated with a
-     * hover popover
-     *
-     * For definition occurrences, the enclosing range should indicate the
-     * start/end bounds of the entire definition AST node, including
-     * documentation.
-     * ```
-     * const n = 3
-     * ^ range
-     * ^^^^^^^^^^^ enclosing_range
-     *
-     * /** Parses the string into something */
-     * ^ enclosing_range start --------------------------------------|
-     * function parse(input string): string {                        |
-     * ^^^^^ range                                          |
-     * return input.slice(n)                                     |
-     * }                                                             |
-     * ^ enclosing_range end <---------------------------------------|
-     * ```
-     *
-     * Any attributes/decorators/attached macros should also be part of the
-     * enclosing range.
-     *
-     * ```python
-     * @cache
-     * ^ enclosing_range start---------------------|
-     * def factorial(n):                           |
-     * return n * factorial(n-1) if n else 1   |
-     * < enclosing_range end-----------------------|
-     *
-     * ```
-     *
-     * For reference occurrences, the enclosing range should indicate the start/end
-     * bounds of the parent expression.
-     * ```
-     * const a = a.b
-     * ^ range
-     * ^^^ enclosing_range
-     * const b = a.b(41).f(42).g(43)
-     * ^ range
-     * ^^^^^^^^^^^^^ enclosing_range
-     * ```
-     * 
- * - * repeated int32 enclosing_range = 7 [json_name = "enclosingRange"]; + * Deprecated: Use `typed_enclosing_range` instead. + * + * + * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; + * @deprecated scip.Occurrence.enclosing_range is deprecated. + * See scip.proto;l=713 * @return The count of enclosingRange. */ - public int getEnclosingRangeCount() { + @java.lang.Deprecated public int getEnclosingRangeCount() { return enclosingRange_.size(); } /** *
-     * (optional) Using the same encoding as the sibling `range` field, half-open
-     * source range of the nearest non-trivial enclosing AST node. This range must
-     * enclose the `range` field. Example applications that make use of the
-     * enclosing_range field:
-     *
-     * - Call hierarchies: to determine what symbols are references from the body
-     * of a function
-     * - Symbol outline: to display breadcrumbs from the cursor position to the
-     * root of the file
-     * - Expand selection: to select the nearest enclosing AST node.
-     * - Highlight range: to indicate the AST expression that is associated with a
-     * hover popover
-     *
-     * For definition occurrences, the enclosing range should indicate the
-     * start/end bounds of the entire definition AST node, including
-     * documentation.
-     * ```
-     * const n = 3
-     * ^ range
-     * ^^^^^^^^^^^ enclosing_range
-     *
-     * /** Parses the string into something */
-     * ^ enclosing_range start --------------------------------------|
-     * function parse(input string): string {                        |
-     * ^^^^^ range                                          |
-     * return input.slice(n)                                     |
-     * }                                                             |
-     * ^ enclosing_range end <---------------------------------------|
-     * ```
-     *
-     * Any attributes/decorators/attached macros should also be part of the
-     * enclosing range.
-     *
-     * ```python
-     * @cache
-     * ^ enclosing_range start---------------------|
-     * def factorial(n):                           |
-     * return n * factorial(n-1) if n else 1   |
-     * < enclosing_range end-----------------------|
-     *
-     * ```
-     *
-     * For reference occurrences, the enclosing range should indicate the start/end
-     * bounds of the parent expression.
-     * ```
-     * const a = a.b
-     * ^ range
-     * ^^^ enclosing_range
-     * const b = a.b(41).f(42).g(43)
-     * ^ range
-     * ^^^^^^^^^^^^^ enclosing_range
-     * ```
-     * 
- * - * repeated int32 enclosing_range = 7 [json_name = "enclosingRange"]; + * Deprecated: Use `typed_enclosing_range` instead. + * + * + * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; + * @deprecated scip.Occurrence.enclosing_range is deprecated. + * See scip.proto;l=713 * @param index The index of the element to return. * @return The enclosingRange at the given index. */ - public int getEnclosingRange(int index) { + @java.lang.Deprecated public int getEnclosingRange(int index) { return enclosingRange_.getInt(index); } /** *
-     * (optional) Using the same encoding as the sibling `range` field, half-open
-     * source range of the nearest non-trivial enclosing AST node. This range must
-     * enclose the `range` field. Example applications that make use of the
-     * enclosing_range field:
-     *
-     * - Call hierarchies: to determine what symbols are references from the body
-     * of a function
-     * - Symbol outline: to display breadcrumbs from the cursor position to the
-     * root of the file
-     * - Expand selection: to select the nearest enclosing AST node.
-     * - Highlight range: to indicate the AST expression that is associated with a
-     * hover popover
-     *
-     * For definition occurrences, the enclosing range should indicate the
-     * start/end bounds of the entire definition AST node, including
-     * documentation.
-     * ```
-     * const n = 3
-     * ^ range
-     * ^^^^^^^^^^^ enclosing_range
-     *
-     * /** Parses the string into something */
-     * ^ enclosing_range start --------------------------------------|
-     * function parse(input string): string {                        |
-     * ^^^^^ range                                          |
-     * return input.slice(n)                                     |
-     * }                                                             |
-     * ^ enclosing_range end <---------------------------------------|
-     * ```
-     *
-     * Any attributes/decorators/attached macros should also be part of the
-     * enclosing range.
-     *
-     * ```python
-     * @cache
-     * ^ enclosing_range start---------------------|
-     * def factorial(n):                           |
-     * return n * factorial(n-1) if n else 1   |
-     * < enclosing_range end-----------------------|
-     *
-     * ```
-     *
-     * For reference occurrences, the enclosing range should indicate the start/end
-     * bounds of the parent expression.
-     * ```
-     * const a = a.b
-     * ^ range
-     * ^^^ enclosing_range
-     * const b = a.b(41).f(42).g(43)
-     * ^ range
-     * ^^^^^^^^^^^^^ enclosing_range
-     * ```
-     * 
- * - * repeated int32 enclosing_range = 7 [json_name = "enclosingRange"]; + * Deprecated: Use `typed_enclosing_range` instead. + * + * + * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; + * @deprecated scip.Occurrence.enclosing_range is deprecated. + * See scip.proto;l=713 * @param index The index to set the value at. * @param value The enclosingRange to set. * @return This builder for chaining. */ - public Builder setEnclosingRange( + @java.lang.Deprecated public Builder setEnclosingRange( int index, int value) { ensureEnclosingRangeIsMutable(); enclosingRange_.setInt(index, value); - bitField0_ |= 0x00000040; + bitField0_ |= 0x00000100; onChanged(); return this; } /** *
-     * (optional) Using the same encoding as the sibling `range` field, half-open
-     * source range of the nearest non-trivial enclosing AST node. This range must
-     * enclose the `range` field. Example applications that make use of the
-     * enclosing_range field:
-     *
-     * - Call hierarchies: to determine what symbols are references from the body
-     * of a function
-     * - Symbol outline: to display breadcrumbs from the cursor position to the
-     * root of the file
-     * - Expand selection: to select the nearest enclosing AST node.
-     * - Highlight range: to indicate the AST expression that is associated with a
-     * hover popover
-     *
-     * For definition occurrences, the enclosing range should indicate the
-     * start/end bounds of the entire definition AST node, including
-     * documentation.
-     * ```
-     * const n = 3
-     * ^ range
-     * ^^^^^^^^^^^ enclosing_range
-     *
-     * /** Parses the string into something */
-     * ^ enclosing_range start --------------------------------------|
-     * function parse(input string): string {                        |
-     * ^^^^^ range                                          |
-     * return input.slice(n)                                     |
-     * }                                                             |
-     * ^ enclosing_range end <---------------------------------------|
-     * ```
-     *
-     * Any attributes/decorators/attached macros should also be part of the
-     * enclosing range.
-     *
-     * ```python
-     * @cache
-     * ^ enclosing_range start---------------------|
-     * def factorial(n):                           |
-     * return n * factorial(n-1) if n else 1   |
-     * < enclosing_range end-----------------------|
-     *
-     * ```
-     *
-     * For reference occurrences, the enclosing range should indicate the start/end
-     * bounds of the parent expression.
-     * ```
-     * const a = a.b
-     * ^ range
-     * ^^^ enclosing_range
-     * const b = a.b(41).f(42).g(43)
-     * ^ range
-     * ^^^^^^^^^^^^^ enclosing_range
-     * ```
-     * 
- * - * repeated int32 enclosing_range = 7 [json_name = "enclosingRange"]; + * Deprecated: Use `typed_enclosing_range` instead. + * + * + * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; + * @deprecated scip.Occurrence.enclosing_range is deprecated. + * See scip.proto;l=713 * @param value The enclosingRange to add. * @return This builder for chaining. */ - public Builder addEnclosingRange(int value) { + @java.lang.Deprecated public Builder addEnclosingRange(int value) { ensureEnclosingRangeIsMutable(); enclosingRange_.addInt(value); - bitField0_ |= 0x00000040; + bitField0_ |= 0x00000100; onChanged(); return this; } /** *
-     * (optional) Using the same encoding as the sibling `range` field, half-open
-     * source range of the nearest non-trivial enclosing AST node. This range must
-     * enclose the `range` field. Example applications that make use of the
-     * enclosing_range field:
-     *
-     * - Call hierarchies: to determine what symbols are references from the body
-     * of a function
-     * - Symbol outline: to display breadcrumbs from the cursor position to the
-     * root of the file
-     * - Expand selection: to select the nearest enclosing AST node.
-     * - Highlight range: to indicate the AST expression that is associated with a
-     * hover popover
-     *
-     * For definition occurrences, the enclosing range should indicate the
-     * start/end bounds of the entire definition AST node, including
-     * documentation.
-     * ```
-     * const n = 3
-     * ^ range
-     * ^^^^^^^^^^^ enclosing_range
-     *
-     * /** Parses the string into something */
-     * ^ enclosing_range start --------------------------------------|
-     * function parse(input string): string {                        |
-     * ^^^^^ range                                          |
-     * return input.slice(n)                                     |
-     * }                                                             |
-     * ^ enclosing_range end <---------------------------------------|
-     * ```
-     *
-     * Any attributes/decorators/attached macros should also be part of the
-     * enclosing range.
-     *
-     * ```python
-     * @cache
-     * ^ enclosing_range start---------------------|
-     * def factorial(n):                           |
-     * return n * factorial(n-1) if n else 1   |
-     * < enclosing_range end-----------------------|
-     *
-     * ```
-     *
-     * For reference occurrences, the enclosing range should indicate the start/end
-     * bounds of the parent expression.
-     * ```
-     * const a = a.b
-     * ^ range
-     * ^^^ enclosing_range
-     * const b = a.b(41).f(42).g(43)
-     * ^ range
-     * ^^^^^^^^^^^^^ enclosing_range
-     * ```
-     * 
- * - * repeated int32 enclosing_range = 7 [json_name = "enclosingRange"]; + * Deprecated: Use `typed_enclosing_range` instead. + * + * + * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; + * @deprecated scip.Occurrence.enclosing_range is deprecated. + * See scip.proto;l=713 * @param values The enclosingRange to add. * @return This builder for chaining. */ - public Builder addAllEnclosingRange( + @java.lang.Deprecated public Builder addAllEnclosingRange( java.lang.Iterable values) { ensureEnclosingRangeIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll( values, enclosingRange_); - bitField0_ |= 0x00000040; + bitField0_ |= 0x00000100; onChanged(); return this; } /** *
-     * (optional) Using the same encoding as the sibling `range` field, half-open
-     * source range of the nearest non-trivial enclosing AST node. This range must
-     * enclose the `range` field. Example applications that make use of the
-     * enclosing_range field:
-     *
-     * - Call hierarchies: to determine what symbols are references from the body
-     * of a function
-     * - Symbol outline: to display breadcrumbs from the cursor position to the
-     * root of the file
-     * - Expand selection: to select the nearest enclosing AST node.
-     * - Highlight range: to indicate the AST expression that is associated with a
-     * hover popover
-     *
-     * For definition occurrences, the enclosing range should indicate the
-     * start/end bounds of the entire definition AST node, including
-     * documentation.
-     * ```
-     * const n = 3
-     * ^ range
-     * ^^^^^^^^^^^ enclosing_range
-     *
-     * /** Parses the string into something */
-     * ^ enclosing_range start --------------------------------------|
-     * function parse(input string): string {                        |
-     * ^^^^^ range                                          |
-     * return input.slice(n)                                     |
-     * }                                                             |
-     * ^ enclosing_range end <---------------------------------------|
-     * ```
-     *
-     * Any attributes/decorators/attached macros should also be part of the
-     * enclosing range.
-     *
-     * ```python
-     * @cache
-     * ^ enclosing_range start---------------------|
-     * def factorial(n):                           |
-     * return n * factorial(n-1) if n else 1   |
-     * < enclosing_range end-----------------------|
-     *
-     * ```
-     *
-     * For reference occurrences, the enclosing range should indicate the start/end
-     * bounds of the parent expression.
-     * ```
-     * const a = a.b
-     * ^ range
-     * ^^^ enclosing_range
-     * const b = a.b(41).f(42).g(43)
-     * ^ range
-     * ^^^^^^^^^^^^^ enclosing_range
-     * ```
-     * 
- * - * repeated int32 enclosing_range = 7 [json_name = "enclosingRange"]; + * Deprecated: Use `typed_enclosing_range` instead. + * + * + * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; + * @deprecated scip.Occurrence.enclosing_range is deprecated. + * See scip.proto;l=713 * @return This builder for chaining. */ - public Builder clearEnclosingRange() { + @java.lang.Deprecated public Builder clearEnclosingRange() { enclosingRange_ = emptyIntList(); - bitField0_ = (bitField0_ & ~0x00000040); + bitField0_ = (bitField0_ & ~0x00000100); onChanged(); return this; } + private com.google.protobuf.SingleFieldBuilder< + org.scip_code.scip.SingleLineRange, org.scip_code.scip.SingleLineRange.Builder, org.scip_code.scip.SingleLineRangeOrBuilder> singleLineEnclosingRangeBuilder_; + /** + * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; + * @return Whether the singleLineEnclosingRange field is set. + */ + @java.lang.Override + public boolean hasSingleLineEnclosingRange() { + return typedEnclosingRangeCase_ == 10; + } + /** + * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; + * @return The singleLineEnclosingRange. + */ + @java.lang.Override + public org.scip_code.scip.SingleLineRange getSingleLineEnclosingRange() { + if (singleLineEnclosingRangeBuilder_ == null) { + if (typedEnclosingRangeCase_ == 10) { + return (org.scip_code.scip.SingleLineRange) typedEnclosingRange_; + } + return org.scip_code.scip.SingleLineRange.getDefaultInstance(); + } else { + if (typedEnclosingRangeCase_ == 10) { + return singleLineEnclosingRangeBuilder_.getMessage(); + } + return org.scip_code.scip.SingleLineRange.getDefaultInstance(); + } + } + /** + * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; + */ + public Builder setSingleLineEnclosingRange(org.scip_code.scip.SingleLineRange value) { + if (singleLineEnclosingRangeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + typedEnclosingRange_ = value; + onChanged(); + } else { + singleLineEnclosingRangeBuilder_.setMessage(value); + } + typedEnclosingRangeCase_ = 10; + return this; + } + /** + * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; + */ + public Builder setSingleLineEnclosingRange( + org.scip_code.scip.SingleLineRange.Builder builderForValue) { + if (singleLineEnclosingRangeBuilder_ == null) { + typedEnclosingRange_ = builderForValue.build(); + onChanged(); + } else { + singleLineEnclosingRangeBuilder_.setMessage(builderForValue.build()); + } + typedEnclosingRangeCase_ = 10; + return this; + } + /** + * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; + */ + public Builder mergeSingleLineEnclosingRange(org.scip_code.scip.SingleLineRange value) { + if (singleLineEnclosingRangeBuilder_ == null) { + if (typedEnclosingRangeCase_ == 10 && + typedEnclosingRange_ != org.scip_code.scip.SingleLineRange.getDefaultInstance()) { + typedEnclosingRange_ = org.scip_code.scip.SingleLineRange.newBuilder((org.scip_code.scip.SingleLineRange) typedEnclosingRange_) + .mergeFrom(value).buildPartial(); + } else { + typedEnclosingRange_ = value; + } + onChanged(); + } else { + if (typedEnclosingRangeCase_ == 10) { + singleLineEnclosingRangeBuilder_.mergeFrom(value); + } else { + singleLineEnclosingRangeBuilder_.setMessage(value); + } + } + typedEnclosingRangeCase_ = 10; + return this; + } + /** + * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; + */ + public Builder clearSingleLineEnclosingRange() { + if (singleLineEnclosingRangeBuilder_ == null) { + if (typedEnclosingRangeCase_ == 10) { + typedEnclosingRangeCase_ = 0; + typedEnclosingRange_ = null; + onChanged(); + } + } else { + if (typedEnclosingRangeCase_ == 10) { + typedEnclosingRangeCase_ = 0; + typedEnclosingRange_ = null; + } + singleLineEnclosingRangeBuilder_.clear(); + } + return this; + } + /** + * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; + */ + public org.scip_code.scip.SingleLineRange.Builder getSingleLineEnclosingRangeBuilder() { + return internalGetSingleLineEnclosingRangeFieldBuilder().getBuilder(); + } + /** + * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; + */ + @java.lang.Override + public org.scip_code.scip.SingleLineRangeOrBuilder getSingleLineEnclosingRangeOrBuilder() { + if ((typedEnclosingRangeCase_ == 10) && (singleLineEnclosingRangeBuilder_ != null)) { + return singleLineEnclosingRangeBuilder_.getMessageOrBuilder(); + } else { + if (typedEnclosingRangeCase_ == 10) { + return (org.scip_code.scip.SingleLineRange) typedEnclosingRange_; + } + return org.scip_code.scip.SingleLineRange.getDefaultInstance(); + } + } + /** + * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; + */ + private com.google.protobuf.SingleFieldBuilder< + org.scip_code.scip.SingleLineRange, org.scip_code.scip.SingleLineRange.Builder, org.scip_code.scip.SingleLineRangeOrBuilder> + internalGetSingleLineEnclosingRangeFieldBuilder() { + if (singleLineEnclosingRangeBuilder_ == null) { + if (!(typedEnclosingRangeCase_ == 10)) { + typedEnclosingRange_ = org.scip_code.scip.SingleLineRange.getDefaultInstance(); + } + singleLineEnclosingRangeBuilder_ = new com.google.protobuf.SingleFieldBuilder< + org.scip_code.scip.SingleLineRange, org.scip_code.scip.SingleLineRange.Builder, org.scip_code.scip.SingleLineRangeOrBuilder>( + (org.scip_code.scip.SingleLineRange) typedEnclosingRange_, + getParentForChildren(), + isClean()); + typedEnclosingRange_ = null; + } + typedEnclosingRangeCase_ = 10; + onChanged(); + return singleLineEnclosingRangeBuilder_; + } + + private com.google.protobuf.SingleFieldBuilder< + org.scip_code.scip.MultiLineRange, org.scip_code.scip.MultiLineRange.Builder, org.scip_code.scip.MultiLineRangeOrBuilder> multiLineEnclosingRangeBuilder_; + /** + * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; + * @return Whether the multiLineEnclosingRange field is set. + */ + @java.lang.Override + public boolean hasMultiLineEnclosingRange() { + return typedEnclosingRangeCase_ == 11; + } + /** + * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; + * @return The multiLineEnclosingRange. + */ + @java.lang.Override + public org.scip_code.scip.MultiLineRange getMultiLineEnclosingRange() { + if (multiLineEnclosingRangeBuilder_ == null) { + if (typedEnclosingRangeCase_ == 11) { + return (org.scip_code.scip.MultiLineRange) typedEnclosingRange_; + } + return org.scip_code.scip.MultiLineRange.getDefaultInstance(); + } else { + if (typedEnclosingRangeCase_ == 11) { + return multiLineEnclosingRangeBuilder_.getMessage(); + } + return org.scip_code.scip.MultiLineRange.getDefaultInstance(); + } + } + /** + * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; + */ + public Builder setMultiLineEnclosingRange(org.scip_code.scip.MultiLineRange value) { + if (multiLineEnclosingRangeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + typedEnclosingRange_ = value; + onChanged(); + } else { + multiLineEnclosingRangeBuilder_.setMessage(value); + } + typedEnclosingRangeCase_ = 11; + return this; + } + /** + * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; + */ + public Builder setMultiLineEnclosingRange( + org.scip_code.scip.MultiLineRange.Builder builderForValue) { + if (multiLineEnclosingRangeBuilder_ == null) { + typedEnclosingRange_ = builderForValue.build(); + onChanged(); + } else { + multiLineEnclosingRangeBuilder_.setMessage(builderForValue.build()); + } + typedEnclosingRangeCase_ = 11; + return this; + } + /** + * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; + */ + public Builder mergeMultiLineEnclosingRange(org.scip_code.scip.MultiLineRange value) { + if (multiLineEnclosingRangeBuilder_ == null) { + if (typedEnclosingRangeCase_ == 11 && + typedEnclosingRange_ != org.scip_code.scip.MultiLineRange.getDefaultInstance()) { + typedEnclosingRange_ = org.scip_code.scip.MultiLineRange.newBuilder((org.scip_code.scip.MultiLineRange) typedEnclosingRange_) + .mergeFrom(value).buildPartial(); + } else { + typedEnclosingRange_ = value; + } + onChanged(); + } else { + if (typedEnclosingRangeCase_ == 11) { + multiLineEnclosingRangeBuilder_.mergeFrom(value); + } else { + multiLineEnclosingRangeBuilder_.setMessage(value); + } + } + typedEnclosingRangeCase_ = 11; + return this; + } + /** + * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; + */ + public Builder clearMultiLineEnclosingRange() { + if (multiLineEnclosingRangeBuilder_ == null) { + if (typedEnclosingRangeCase_ == 11) { + typedEnclosingRangeCase_ = 0; + typedEnclosingRange_ = null; + onChanged(); + } + } else { + if (typedEnclosingRangeCase_ == 11) { + typedEnclosingRangeCase_ = 0; + typedEnclosingRange_ = null; + } + multiLineEnclosingRangeBuilder_.clear(); + } + return this; + } + /** + * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; + */ + public org.scip_code.scip.MultiLineRange.Builder getMultiLineEnclosingRangeBuilder() { + return internalGetMultiLineEnclosingRangeFieldBuilder().getBuilder(); + } + /** + * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; + */ + @java.lang.Override + public org.scip_code.scip.MultiLineRangeOrBuilder getMultiLineEnclosingRangeOrBuilder() { + if ((typedEnclosingRangeCase_ == 11) && (multiLineEnclosingRangeBuilder_ != null)) { + return multiLineEnclosingRangeBuilder_.getMessageOrBuilder(); + } else { + if (typedEnclosingRangeCase_ == 11) { + return (org.scip_code.scip.MultiLineRange) typedEnclosingRange_; + } + return org.scip_code.scip.MultiLineRange.getDefaultInstance(); + } + } + /** + * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; + */ + private com.google.protobuf.SingleFieldBuilder< + org.scip_code.scip.MultiLineRange, org.scip_code.scip.MultiLineRange.Builder, org.scip_code.scip.MultiLineRangeOrBuilder> + internalGetMultiLineEnclosingRangeFieldBuilder() { + if (multiLineEnclosingRangeBuilder_ == null) { + if (!(typedEnclosingRangeCase_ == 11)) { + typedEnclosingRange_ = org.scip_code.scip.MultiLineRange.getDefaultInstance(); + } + multiLineEnclosingRangeBuilder_ = new com.google.protobuf.SingleFieldBuilder< + org.scip_code.scip.MultiLineRange, org.scip_code.scip.MultiLineRange.Builder, org.scip_code.scip.MultiLineRangeOrBuilder>( + (org.scip_code.scip.MultiLineRange) typedEnclosingRange_, + getParentForChildren(), + isClean()); + typedEnclosingRange_ = null; + } + typedEnclosingRangeCase_ = 11; + onChanged(); + return multiLineEnclosingRangeBuilder_; + } + // @@protoc_insertion_point(builder_scope:scip.Occurrence) } diff --git a/bindings/java/src/main/java/org/scip_code/scip/OccurrenceOrBuilder.java b/bindings/java/src/main/java/org/scip_code/scip/OccurrenceOrBuilder.java index e6399616..3a95b831 100644 --- a/bindings/java/src/main/java/org/scip_code/scip/OccurrenceOrBuilder.java +++ b/bindings/java/src/main/java/org/scip_code/scip/OccurrenceOrBuilder.java @@ -12,98 +12,125 @@ public interface OccurrenceOrBuilder extends /** *
-   * Half-open [start, end) range of this occurrence. Must be exactly three or four
-   * elements:
+   * Deprecated: Use `single_line_range` or `multi_line_range` instead.
    *
+   * Half-open [start, end) range. Must be exactly three or four elements:
+   * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line)
    * - Four elements: `[startLine, startCharacter, endLine, endCharacter]`
-   * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line
-   * is inferred to have the same value as the start line.
-   *
-   * It is allowed for the range to be empty (i.e. start==end).
-   *
-   * Line numbers and characters are always 0-based. Make sure to increment the
-   * line/character values before displaying them in an editor-like UI because
-   * editors conventionally use 1-based numbers.
-   *
-   * The 'character' value is interpreted based on the PositionEncoding for
-   * the Document.
    *
    * Historical note: the original draft of this schema had a `Range` message
    * type with `start` and `end` fields of type `Position`, mirroring LSP.
    * Benchmarks revealed that this encoding was inefficient and that we could
    * reduce the total payload size of an index by 50% by using `repeated int32`
-   * instead. The `repeated int32` encoding is admittedly more embarrassing to
-   * work with in some programming languages but we hope the performance
-   * improvements make up for it.
+   * instead. However, the lack of type safety led to the introduction of
+   * `single_line_range` and `multi_line_range` as typed alternatives.
    * 
* - * repeated int32 range = 1 [json_name = "range"]; + * repeated int32 range = 1 [json_name = "range", deprecated = true]; + * @deprecated scip.Occurrence.range is deprecated. + * See scip.proto;l=675 * @return A list containing the range. */ - java.util.List getRangeList(); + @java.lang.Deprecated java.util.List getRangeList(); /** *
-   * Half-open [start, end) range of this occurrence. Must be exactly three or four
-   * elements:
+   * Deprecated: Use `single_line_range` or `multi_line_range` instead.
    *
+   * Half-open [start, end) range. Must be exactly three or four elements:
+   * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line)
    * - Four elements: `[startLine, startCharacter, endLine, endCharacter]`
-   * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line
-   * is inferred to have the same value as the start line.
-   *
-   * It is allowed for the range to be empty (i.e. start==end).
-   *
-   * Line numbers and characters are always 0-based. Make sure to increment the
-   * line/character values before displaying them in an editor-like UI because
-   * editors conventionally use 1-based numbers.
-   *
-   * The 'character' value is interpreted based on the PositionEncoding for
-   * the Document.
    *
    * Historical note: the original draft of this schema had a `Range` message
    * type with `start` and `end` fields of type `Position`, mirroring LSP.
    * Benchmarks revealed that this encoding was inefficient and that we could
    * reduce the total payload size of an index by 50% by using `repeated int32`
-   * instead. The `repeated int32` encoding is admittedly more embarrassing to
-   * work with in some programming languages but we hope the performance
-   * improvements make up for it.
+   * instead. However, the lack of type safety led to the introduction of
+   * `single_line_range` and `multi_line_range` as typed alternatives.
    * 
* - * repeated int32 range = 1 [json_name = "range"]; + * repeated int32 range = 1 [json_name = "range", deprecated = true]; + * @deprecated scip.Occurrence.range is deprecated. + * See scip.proto;l=675 * @return The count of range. */ - int getRangeCount(); + @java.lang.Deprecated int getRangeCount(); /** *
-   * Half-open [start, end) range of this occurrence. Must be exactly three or four
-   * elements:
+   * Deprecated: Use `single_line_range` or `multi_line_range` instead.
    *
+   * Half-open [start, end) range. Must be exactly three or four elements:
+   * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line)
    * - Four elements: `[startLine, startCharacter, endLine, endCharacter]`
-   * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line
-   * is inferred to have the same value as the start line.
-   *
-   * It is allowed for the range to be empty (i.e. start==end).
-   *
-   * Line numbers and characters are always 0-based. Make sure to increment the
-   * line/character values before displaying them in an editor-like UI because
-   * editors conventionally use 1-based numbers.
-   *
-   * The 'character' value is interpreted based on the PositionEncoding for
-   * the Document.
    *
    * Historical note: the original draft of this schema had a `Range` message
    * type with `start` and `end` fields of type `Position`, mirroring LSP.
    * Benchmarks revealed that this encoding was inefficient and that we could
    * reduce the total payload size of an index by 50% by using `repeated int32`
-   * instead. The `repeated int32` encoding is admittedly more embarrassing to
-   * work with in some programming languages but we hope the performance
-   * improvements make up for it.
+   * instead. However, the lack of type safety led to the introduction of
+   * `single_line_range` and `multi_line_range` as typed alternatives.
    * 
* - * repeated int32 range = 1 [json_name = "range"]; + * repeated int32 range = 1 [json_name = "range", deprecated = true]; + * @deprecated scip.Occurrence.range is deprecated. + * See scip.proto;l=675 * @param index The index of the element to return. * @return The range at the given index. */ - int getRange(int index); + @java.lang.Deprecated int getRange(int index); + + /** + *
+   * Range spanning a single line.
+   * 
+ * + * .scip.SingleLineRange single_line_range = 8 [json_name = "singleLineRange"]; + * @return Whether the singleLineRange field is set. + */ + boolean hasSingleLineRange(); + /** + *
+   * Range spanning a single line.
+   * 
+ * + * .scip.SingleLineRange single_line_range = 8 [json_name = "singleLineRange"]; + * @return The singleLineRange. + */ + org.scip_code.scip.SingleLineRange getSingleLineRange(); + /** + *
+   * Range spanning a single line.
+   * 
+ * + * .scip.SingleLineRange single_line_range = 8 [json_name = "singleLineRange"]; + */ + org.scip_code.scip.SingleLineRangeOrBuilder getSingleLineRangeOrBuilder(); + + /** + *
+   * Range spanning multiple lines.
+   * 
+ * + * .scip.MultiLineRange multi_line_range = 9 [json_name = "multiLineRange"]; + * @return Whether the multiLineRange field is set. + */ + boolean hasMultiLineRange(); + /** + *
+   * Range spanning multiple lines.
+   * 
+ * + * .scip.MultiLineRange multi_line_range = 9 [json_name = "multiLineRange"]; + * @return The multiLineRange. + */ + org.scip_code.scip.MultiLineRange getMultiLineRange(); + /** + *
+   * Range spanning multiple lines.
+   * 
+ * + * .scip.MultiLineRange multi_line_range = 9 [json_name = "multiLineRange"]; + */ + org.scip_code.scip.MultiLineRangeOrBuilder getMultiLineRangeOrBuilder(); /** *
@@ -272,183 +299,70 @@ org.scip_code.scip.DiagnosticOrBuilder getDiagnosticsOrBuilder(
 
   /**
    * 
-   * (optional) Using the same encoding as the sibling `range` field, half-open
-   * source range of the nearest non-trivial enclosing AST node. This range must
-   * enclose the `range` field. Example applications that make use of the
-   * enclosing_range field:
-   *
-   * - Call hierarchies: to determine what symbols are references from the body
-   * of a function
-   * - Symbol outline: to display breadcrumbs from the cursor position to the
-   * root of the file
-   * - Expand selection: to select the nearest enclosing AST node.
-   * - Highlight range: to indicate the AST expression that is associated with a
-   * hover popover
-   *
-   * For definition occurrences, the enclosing range should indicate the
-   * start/end bounds of the entire definition AST node, including
-   * documentation.
-   * ```
-   * const n = 3
-   * ^ range
-   * ^^^^^^^^^^^ enclosing_range
-   *
-   * /** Parses the string into something */
-   * ^ enclosing_range start --------------------------------------|
-   * function parse(input string): string {                        |
-   * ^^^^^ range                                          |
-   * return input.slice(n)                                     |
-   * }                                                             |
-   * ^ enclosing_range end <---------------------------------------|
-   * ```
-   *
-   * Any attributes/decorators/attached macros should also be part of the
-   * enclosing range.
-   *
-   * ```python
-   * @cache
-   * ^ enclosing_range start---------------------|
-   * def factorial(n):                           |
-   * return n * factorial(n-1) if n else 1   |
-   * < enclosing_range end-----------------------|
-   *
-   * ```
-   *
-   * For reference occurrences, the enclosing range should indicate the start/end
-   * bounds of the parent expression.
-   * ```
-   * const a = a.b
-   * ^ range
-   * ^^^ enclosing_range
-   * const b = a.b(41).f(42).g(43)
-   * ^ range
-   * ^^^^^^^^^^^^^ enclosing_range
-   * ```
+   * Deprecated: Use `typed_enclosing_range` instead.
    * 
* - * repeated int32 enclosing_range = 7 [json_name = "enclosingRange"]; + * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; + * @deprecated scip.Occurrence.enclosing_range is deprecated. + * See scip.proto;l=713 * @return A list containing the enclosingRange. */ - java.util.List getEnclosingRangeList(); + @java.lang.Deprecated java.util.List getEnclosingRangeList(); /** *
-   * (optional) Using the same encoding as the sibling `range` field, half-open
-   * source range of the nearest non-trivial enclosing AST node. This range must
-   * enclose the `range` field. Example applications that make use of the
-   * enclosing_range field:
-   *
-   * - Call hierarchies: to determine what symbols are references from the body
-   * of a function
-   * - Symbol outline: to display breadcrumbs from the cursor position to the
-   * root of the file
-   * - Expand selection: to select the nearest enclosing AST node.
-   * - Highlight range: to indicate the AST expression that is associated with a
-   * hover popover
-   *
-   * For definition occurrences, the enclosing range should indicate the
-   * start/end bounds of the entire definition AST node, including
-   * documentation.
-   * ```
-   * const n = 3
-   * ^ range
-   * ^^^^^^^^^^^ enclosing_range
-   *
-   * /** Parses the string into something */
-   * ^ enclosing_range start --------------------------------------|
-   * function parse(input string): string {                        |
-   * ^^^^^ range                                          |
-   * return input.slice(n)                                     |
-   * }                                                             |
-   * ^ enclosing_range end <---------------------------------------|
-   * ```
-   *
-   * Any attributes/decorators/attached macros should also be part of the
-   * enclosing range.
-   *
-   * ```python
-   * @cache
-   * ^ enclosing_range start---------------------|
-   * def factorial(n):                           |
-   * return n * factorial(n-1) if n else 1   |
-   * < enclosing_range end-----------------------|
-   *
-   * ```
-   *
-   * For reference occurrences, the enclosing range should indicate the start/end
-   * bounds of the parent expression.
-   * ```
-   * const a = a.b
-   * ^ range
-   * ^^^ enclosing_range
-   * const b = a.b(41).f(42).g(43)
-   * ^ range
-   * ^^^^^^^^^^^^^ enclosing_range
-   * ```
+   * Deprecated: Use `typed_enclosing_range` instead.
    * 
* - * repeated int32 enclosing_range = 7 [json_name = "enclosingRange"]; + * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; + * @deprecated scip.Occurrence.enclosing_range is deprecated. + * See scip.proto;l=713 * @return The count of enclosingRange. */ - int getEnclosingRangeCount(); + @java.lang.Deprecated int getEnclosingRangeCount(); /** *
-   * (optional) Using the same encoding as the sibling `range` field, half-open
-   * source range of the nearest non-trivial enclosing AST node. This range must
-   * enclose the `range` field. Example applications that make use of the
-   * enclosing_range field:
-   *
-   * - Call hierarchies: to determine what symbols are references from the body
-   * of a function
-   * - Symbol outline: to display breadcrumbs from the cursor position to the
-   * root of the file
-   * - Expand selection: to select the nearest enclosing AST node.
-   * - Highlight range: to indicate the AST expression that is associated with a
-   * hover popover
-   *
-   * For definition occurrences, the enclosing range should indicate the
-   * start/end bounds of the entire definition AST node, including
-   * documentation.
-   * ```
-   * const n = 3
-   * ^ range
-   * ^^^^^^^^^^^ enclosing_range
-   *
-   * /** Parses the string into something */
-   * ^ enclosing_range start --------------------------------------|
-   * function parse(input string): string {                        |
-   * ^^^^^ range                                          |
-   * return input.slice(n)                                     |
-   * }                                                             |
-   * ^ enclosing_range end <---------------------------------------|
-   * ```
-   *
-   * Any attributes/decorators/attached macros should also be part of the
-   * enclosing range.
-   *
-   * ```python
-   * @cache
-   * ^ enclosing_range start---------------------|
-   * def factorial(n):                           |
-   * return n * factorial(n-1) if n else 1   |
-   * < enclosing_range end-----------------------|
-   *
-   * ```
-   *
-   * For reference occurrences, the enclosing range should indicate the start/end
-   * bounds of the parent expression.
-   * ```
-   * const a = a.b
-   * ^ range
-   * ^^^ enclosing_range
-   * const b = a.b(41).f(42).g(43)
-   * ^ range
-   * ^^^^^^^^^^^^^ enclosing_range
-   * ```
+   * Deprecated: Use `typed_enclosing_range` instead.
    * 
* - * repeated int32 enclosing_range = 7 [json_name = "enclosingRange"]; + * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; + * @deprecated scip.Occurrence.enclosing_range is deprecated. + * See scip.proto;l=713 * @param index The index of the element to return. * @return The enclosingRange at the given index. */ - int getEnclosingRange(int index); + @java.lang.Deprecated int getEnclosingRange(int index); + + /** + * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; + * @return Whether the singleLineEnclosingRange field is set. + */ + boolean hasSingleLineEnclosingRange(); + /** + * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; + * @return The singleLineEnclosingRange. + */ + org.scip_code.scip.SingleLineRange getSingleLineEnclosingRange(); + /** + * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; + */ + org.scip_code.scip.SingleLineRangeOrBuilder getSingleLineEnclosingRangeOrBuilder(); + + /** + * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; + * @return Whether the multiLineEnclosingRange field is set. + */ + boolean hasMultiLineEnclosingRange(); + /** + * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; + * @return The multiLineEnclosingRange. + */ + org.scip_code.scip.MultiLineRange getMultiLineEnclosingRange(); + /** + * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; + */ + org.scip_code.scip.MultiLineRangeOrBuilder getMultiLineEnclosingRangeOrBuilder(); + + org.scip_code.scip.Occurrence.TypedRangeCase getTypedRangeCase(); + + org.scip_code.scip.Occurrence.TypedEnclosingRangeCase getTypedEnclosingRangeCase(); } diff --git a/bindings/java/src/main/java/org/scip_code/scip/ScipProto.java b/bindings/java/src/main/java/org/scip_code/scip/ScipProto.java index bef40619..4da1ed80 100644 --- a/bindings/java/src/main/java/org/scip_code/scip/ScipProto.java +++ b/bindings/java/src/main/java/org/scip_code/scip/ScipProto.java @@ -76,6 +76,16 @@ public static void registerAllExtensions( static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_scip_Relationship_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_scip_SingleLineRange_descriptor; + static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_scip_SingleLineRange_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_scip_MultiLineRange_descriptor; + static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_scip_MultiLineRange_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_scip_Occurrence_descriptor; static final @@ -175,91 +185,106 @@ public static void registerAllExtensions( "sReference\022+\n\021is_implementation\030\003 \001(\010R\020i" + "sImplementation\022,\n\022is_type_definition\030\004 " + "\001(\010R\020isTypeDefinition\022#\n\ris_definition\030\005" + - " \001(\010R\014isDefinition\"\244\002\n\nOccurrence\022\024\n\005ran" + - "ge\030\001 \003(\005R\005range\022\026\n\006symbol\030\002 \001(\tR\006symbol\022" + - "!\n\014symbol_roles\030\003 \001(\005R\013symbolRoles\0225\n\026ov" + - "erride_documentation\030\004 \003(\tR\025overrideDocu" + - "mentation\0221\n\013syntax_kind\030\005 \001(\0162\020.scip.Sy" + - "ntaxKindR\nsyntaxKind\0222\n\013diagnostics\030\006 \003(" + - "\0132\020.scip.DiagnosticR\013diagnostics\022\'\n\017encl" + - "osing_range\030\007 \003(\005R\016enclosingRange\"\247\001\n\nDi" + - "agnostic\022*\n\010severity\030\001 \001(\0162\016.scip.Severi" + - "tyR\010severity\022\022\n\004code\030\002 \001(\tR\004code\022\030\n\007mess" + - "age\030\003 \001(\tR\007message\022\026\n\006source\030\004 \001(\tR\006sour" + - "ce\022\'\n\004tags\030\005 \003(\0162\023.scip.DiagnosticTagR\004t" + - "ags*1\n\017ProtocolVersion\022\036\n\032UnspecifiedPro" + - "tocolVersion\020\000*@\n\014TextEncoding\022\033\n\027Unspec" + - "ifiedTextEncoding\020\000\022\010\n\004UTF8\020\001\022\t\n\005UTF16\020\002" + - "*\244\001\n\020PositionEncoding\022\037\n\033UnspecifiedPosi" + - "tionEncoding\020\000\022#\n\037UTF8CodeUnitOffsetFrom" + - "LineStart\020\001\022$\n UTF16CodeUnitOffsetFromLi" + - "neStart\020\002\022$\n UTF32CodeUnitOffsetFromLine" + - "Start\020\003*\224\001\n\nSymbolRole\022\031\n\025UnspecifiedSym" + - "bolRole\020\000\022\016\n\nDefinition\020\001\022\n\n\006Import\020\002\022\017\n" + - "\013WriteAccess\020\004\022\016\n\nReadAccess\020\010\022\r\n\tGenera" + - "ted\020\020\022\010\n\004Test\020 \022\025\n\021ForwardDefinition\020@*\352" + - "\006\n\nSyntaxKind\022\031\n\025UnspecifiedSyntaxKind\020\000" + - "\022\013\n\007Comment\020\001\022\030\n\024PunctuationDelimiter\020\002\022" + - "\026\n\022PunctuationBracket\020\003\022\013\n\007Keyword\020\004\022\031\n\021" + - "IdentifierKeyword\020\004\032\002\010\001\022\026\n\022IdentifierOpe" + - "rator\020\005\022\016\n\nIdentifier\020\006\022\025\n\021IdentifierBui" + - "ltin\020\007\022\022\n\016IdentifierNull\020\010\022\026\n\022Identifier" + - "Constant\020\t\022\033\n\027IdentifierMutableGlobal\020\n\022" + - "\027\n\023IdentifierParameter\020\013\022\023\n\017IdentifierLo" + - "cal\020\014\022\026\n\022IdentifierShadowed\020\r\022\027\n\023Identif" + - "ierNamespace\020\016\022\030\n\020IdentifierModule\020\016\032\002\010\001" + - "\022\026\n\022IdentifierFunction\020\017\022 \n\034IdentifierFu" + - "nctionDefinition\020\020\022\023\n\017IdentifierMacro\020\021\022" + - "\035\n\031IdentifierMacroDefinition\020\022\022\022\n\016Identi" + - "fierType\020\023\022\031\n\025IdentifierBuiltinType\020\024\022\027\n" + - "\023IdentifierAttribute\020\025\022\017\n\013RegexEscape\020\026\022" + - "\021\n\rRegexRepeated\020\027\022\021\n\rRegexWildcard\020\030\022\022\n" + - "\016RegexDelimiter\020\031\022\r\n\tRegexJoin\020\032\022\021\n\rStri" + - "ngLiteral\020\033\022\027\n\023StringLiteralEscape\020\034\022\030\n\024" + - "StringLiteralSpecial\020\035\022\024\n\020StringLiteralK" + - "ey\020\036\022\024\n\020CharacterLiteral\020\037\022\022\n\016NumericLit" + - "eral\020 \022\022\n\016BooleanLiteral\020!\022\007\n\003Tag\020\"\022\020\n\014T" + - "agAttribute\020#\022\020\n\014TagDelimiter\020$\032\002\020\001*V\n\010S" + - "everity\022\027\n\023UnspecifiedSeverity\020\000\022\t\n\005Erro" + - "r\020\001\022\013\n\007Warning\020\002\022\017\n\013Information\020\003\022\010\n\004Hin" + - "t\020\004*N\n\rDiagnosticTag\022\034\n\030UnspecifiedDiagn" + - "osticTag\020\000\022\017\n\013Unnecessary\020\001\022\016\n\nDeprecate" + - "d\020\002*\233\n\n\010Language\022\027\n\023UnspecifiedLanguage\020" + - "\000\022\010\n\004ABAP\020<\022\010\n\004Apex\020`\022\007\n\003APL\0201\022\007\n\003Ada\020\'\022" + - "\010\n\004Agda\020-\022\014\n\010AsciiDoc\020V\022\014\n\010Assembly\020:\022\007\n" + - "\003Awk\020B\022\007\n\003Bat\020D\022\n\n\006BibTeX\020Q\022\005\n\001C\020\"\022\t\n\005CO" + - "BOL\020;\022\007\n\003CPP\020#\022\007\n\003CSS\020\032\022\n\n\006CSharp\020\001\022\013\n\007C" + - "lojure\020\010\022\020\n\014Coffeescript\020\025\022\016\n\nCommonLisp" + - "\020\t\022\007\n\003Coq\020/\022\010\n\004CUDA\020a\022\010\n\004Dart\020\003\022\n\n\006Delph" + - "i\0209\022\010\n\004Diff\020X\022\016\n\nDockerfile\020P\022\n\n\006Dyalog\020" + - "2\022\n\n\006Elixir\020\021\022\n\n\006Erlang\020\022\022\n\n\006FSharp\020*\022\010\n" + - "\004Fish\020A\022\010\n\004Flow\020\030\022\013\n\007Fortran\0208\022\016\n\nGit_Co" + - "mmit\020[\022\016\n\nGit_Config\020Y\022\016\n\nGit_Rebase\020\\\022\006" + - "\n\002Go\020!\022\013\n\007GraphQL\020b\022\n\n\006Groovy\020\007\022\010\n\004HTML\020" + - "\036\022\010\n\004Hack\020\024\022\016\n\nHandlebars\020Z\022\013\n\007Haskell\020," + - "\022\t\n\005Idris\020.\022\007\n\003Ini\020H\022\005\n\001J\0203\022\010\n\004JSON\020K\022\010\n" + - "\004Java\020\006\022\016\n\nJavaScript\020\026\022\023\n\017JavaScriptRea" + - "ct\020]\022\013\n\007Jsonnet\020L\022\t\n\005Julia\0207\022\014\n\010Justfile" + - "\020m\022\n\n\006Kotlin\020\004\022\t\n\005LaTeX\020S\022\010\n\004Lean\0200\022\010\n\004L" + - "ess\020\033\022\007\n\003Lua\020\014\022\010\n\004Luau\020l\022\014\n\010Makefile\020O\022\014" + - "\n\010Markdown\020T\022\n\n\006Matlab\0204\022\n\n\006Nickel\020n\022\007\n\003" + - "Nix\020M\022\t\n\005OCaml\020)\022\017\n\013Objective_C\020$\022\021\n\rObj" + - "ective_CPP\020%\022\n\n\006Pascal\020c\022\007\n\003PHP\020\023\022\t\n\005PLS" + - "QL\020F\022\010\n\004Perl\020\r\022\016\n\nPowerShell\020C\022\n\n\006Prolog" + - "\020G\022\014\n\010Protobuf\020d\022\n\n\006Python\020\017\022\005\n\001R\0206\022\n\n\006R" + - "acket\020\013\022\010\n\004Raku\020\016\022\t\n\005Razor\020>\022\t\n\005Repro\020f\022" + - "\010\n\004ReST\020U\022\010\n\004Ruby\020\020\022\010\n\004Rust\020(\022\007\n\003SAS\020=\022\010" + - "\n\004SCSS\020\035\022\007\n\003SML\020+\022\007\n\003SQL\020E\022\010\n\004Sass\020\034\022\t\n\005" + - "Scala\020\005\022\n\n\006Scheme\020\n\022\017\n\013ShellScript\020@\022\013\n\007" + - "Skylark\020N\022\t\n\005Slang\020k\022\014\n\010Solidity\020_\022\n\n\006Sv" + - "elte\020j\022\t\n\005Swift\020\002\022\007\n\003Tcl\020e\022\010\n\004TOML\020I\022\007\n\003" + - "TeX\020R\022\n\n\006Thrift\020g\022\016\n\nTypeScript\020\027\022\023\n\017Typ" + - "eScriptReact\020^\022\013\n\007Verilog\020h\022\010\n\004VHDL\020i\022\017\n" + - "\013VisualBasic\020?\022\007\n\003Vue\020\031\022\013\n\007Wolfram\0205\022\007\n\003" + - "XML\020\037\022\007\n\003XSL\020 \022\010\n\004YAML\020J\022\007\n\003Zig\020&BN\n\022org" + - ".scip_code.scipB\tScipProtoP\001Z+github.com" + - "/scip-code/scip/bindings/go/scip/b\006proto" + - "3" + " \001(\010R\014isDefinition\"s\n\017SingleLineRange\022\022\n" + + "\004line\030\001 \001(\005R\004line\022\'\n\017start_character\030\002 \001" + + "(\005R\016startCharacter\022#\n\rend_character\030\003 \001(" + + "\005R\014endCharacter\"\230\001\n\016MultiLineRange\022\035\n\nst" + + "art_line\030\001 \001(\005R\tstartLine\022\'\n\017start_chara" + + "cter\030\002 \001(\005R\016startCharacter\022\031\n\010end_line\030\003" + + " \001(\005R\007endLine\022#\n\rend_character\030\004 \001(\005R\014en" + + "dCharacter\"\210\005\n\nOccurrence\022\030\n\005range\030\001 \003(\005" + + "B\002\030\001R\005range\022C\n\021single_line_range\030\010 \001(\0132\025" + + ".scip.SingleLineRangeH\000R\017singleLineRange" + + "\022@\n\020multi_line_range\030\t \001(\0132\024.scip.MultiL" + + "ineRangeH\000R\016multiLineRange\022\026\n\006symbol\030\002 \001" + + "(\tR\006symbol\022!\n\014symbol_roles\030\003 \001(\005R\013symbol" + + "Roles\0225\n\026override_documentation\030\004 \003(\tR\025o" + + "verrideDocumentation\0221\n\013syntax_kind\030\005 \001(" + + "\0162\020.scip.SyntaxKindR\nsyntaxKind\0222\n\013diagn" + + "ostics\030\006 \003(\0132\020.scip.DiagnosticR\013diagnost" + + "ics\022+\n\017enclosing_range\030\007 \003(\005B\002\030\001R\016enclos" + + "ingRange\022V\n\033single_line_enclosing_range\030" + + "\n \001(\0132\025.scip.SingleLineRangeH\001R\030singleLi" + + "neEnclosingRange\022S\n\032multi_line_enclosing" + + "_range\030\013 \001(\0132\024.scip.MultiLineRangeH\001R\027mu" + + "ltiLineEnclosingRangeB\r\n\013typed_rangeB\027\n\025" + + "typed_enclosing_range\"\247\001\n\nDiagnostic\022*\n\010" + + "severity\030\001 \001(\0162\016.scip.SeverityR\010severity" + + "\022\022\n\004code\030\002 \001(\tR\004code\022\030\n\007message\030\003 \001(\tR\007m" + + "essage\022\026\n\006source\030\004 \001(\tR\006source\022\'\n\004tags\030\005" + + " \003(\0162\023.scip.DiagnosticTagR\004tags*1\n\017Proto" + + "colVersion\022\036\n\032UnspecifiedProtocolVersion" + + "\020\000*@\n\014TextEncoding\022\033\n\027UnspecifiedTextEnc" + + "oding\020\000\022\010\n\004UTF8\020\001\022\t\n\005UTF16\020\002*\244\001\n\020Positio" + + "nEncoding\022\037\n\033UnspecifiedPositionEncoding" + + "\020\000\022#\n\037UTF8CodeUnitOffsetFromLineStart\020\001\022" + + "$\n UTF16CodeUnitOffsetFromLineStart\020\002\022$\n" + + " UTF32CodeUnitOffsetFromLineStart\020\003*\224\001\n\n" + + "SymbolRole\022\031\n\025UnspecifiedSymbolRole\020\000\022\016\n" + + "\nDefinition\020\001\022\n\n\006Import\020\002\022\017\n\013WriteAccess" + + "\020\004\022\016\n\nReadAccess\020\010\022\r\n\tGenerated\020\020\022\010\n\004Tes" + + "t\020 \022\025\n\021ForwardDefinition\020@*\352\006\n\nSyntaxKin" + + "d\022\031\n\025UnspecifiedSyntaxKind\020\000\022\013\n\007Comment\020" + + "\001\022\030\n\024PunctuationDelimiter\020\002\022\026\n\022Punctuati" + + "onBracket\020\003\022\013\n\007Keyword\020\004\022\031\n\021IdentifierKe" + + "yword\020\004\032\002\010\001\022\026\n\022IdentifierOperator\020\005\022\016\n\nI" + + "dentifier\020\006\022\025\n\021IdentifierBuiltin\020\007\022\022\n\016Id" + + "entifierNull\020\010\022\026\n\022IdentifierConstant\020\t\022\033" + + "\n\027IdentifierMutableGlobal\020\n\022\027\n\023Identifie" + + "rParameter\020\013\022\023\n\017IdentifierLocal\020\014\022\026\n\022Ide" + + "ntifierShadowed\020\r\022\027\n\023IdentifierNamespace" + + "\020\016\022\030\n\020IdentifierModule\020\016\032\002\010\001\022\026\n\022Identifi" + + "erFunction\020\017\022 \n\034IdentifierFunctionDefini" + + "tion\020\020\022\023\n\017IdentifierMacro\020\021\022\035\n\031Identifie" + + "rMacroDefinition\020\022\022\022\n\016IdentifierType\020\023\022\031" + + "\n\025IdentifierBuiltinType\020\024\022\027\n\023IdentifierA" + + "ttribute\020\025\022\017\n\013RegexEscape\020\026\022\021\n\rRegexRepe" + + "ated\020\027\022\021\n\rRegexWildcard\020\030\022\022\n\016RegexDelimi" + + "ter\020\031\022\r\n\tRegexJoin\020\032\022\021\n\rStringLiteral\020\033\022" + + "\027\n\023StringLiteralEscape\020\034\022\030\n\024StringLitera" + + "lSpecial\020\035\022\024\n\020StringLiteralKey\020\036\022\024\n\020Char" + + "acterLiteral\020\037\022\022\n\016NumericLiteral\020 \022\022\n\016Bo" + + "oleanLiteral\020!\022\007\n\003Tag\020\"\022\020\n\014TagAttribute\020" + + "#\022\020\n\014TagDelimiter\020$\032\002\020\001*V\n\010Severity\022\027\n\023U" + + "nspecifiedSeverity\020\000\022\t\n\005Error\020\001\022\013\n\007Warni" + + "ng\020\002\022\017\n\013Information\020\003\022\010\n\004Hint\020\004*N\n\rDiagn" + + "osticTag\022\034\n\030UnspecifiedDiagnosticTag\020\000\022\017" + + "\n\013Unnecessary\020\001\022\016\n\nDeprecated\020\002*\233\n\n\010Lang" + + "uage\022\027\n\023UnspecifiedLanguage\020\000\022\010\n\004ABAP\020<\022" + + "\010\n\004Apex\020`\022\007\n\003APL\0201\022\007\n\003Ada\020\'\022\010\n\004Agda\020-\022\014\n" + + "\010AsciiDoc\020V\022\014\n\010Assembly\020:\022\007\n\003Awk\020B\022\007\n\003Ba" + + "t\020D\022\n\n\006BibTeX\020Q\022\005\n\001C\020\"\022\t\n\005COBOL\020;\022\007\n\003CPP" + + "\020#\022\007\n\003CSS\020\032\022\n\n\006CSharp\020\001\022\013\n\007Clojure\020\010\022\020\n\014" + + "Coffeescript\020\025\022\016\n\nCommonLisp\020\t\022\007\n\003Coq\020/\022" + + "\010\n\004CUDA\020a\022\010\n\004Dart\020\003\022\n\n\006Delphi\0209\022\010\n\004Diff\020" + + "X\022\016\n\nDockerfile\020P\022\n\n\006Dyalog\0202\022\n\n\006Elixir\020" + + "\021\022\n\n\006Erlang\020\022\022\n\n\006FSharp\020*\022\010\n\004Fish\020A\022\010\n\004F" + + "low\020\030\022\013\n\007Fortran\0208\022\016\n\nGit_Commit\020[\022\016\n\nGi" + + "t_Config\020Y\022\016\n\nGit_Rebase\020\\\022\006\n\002Go\020!\022\013\n\007Gr" + + "aphQL\020b\022\n\n\006Groovy\020\007\022\010\n\004HTML\020\036\022\010\n\004Hack\020\024\022" + + "\016\n\nHandlebars\020Z\022\013\n\007Haskell\020,\022\t\n\005Idris\020.\022" + + "\007\n\003Ini\020H\022\005\n\001J\0203\022\010\n\004JSON\020K\022\010\n\004Java\020\006\022\016\n\nJ" + + "avaScript\020\026\022\023\n\017JavaScriptReact\020]\022\013\n\007Json" + + "net\020L\022\t\n\005Julia\0207\022\014\n\010Justfile\020m\022\n\n\006Kotlin" + + "\020\004\022\t\n\005LaTeX\020S\022\010\n\004Lean\0200\022\010\n\004Less\020\033\022\007\n\003Lua" + + "\020\014\022\010\n\004Luau\020l\022\014\n\010Makefile\020O\022\014\n\010Markdown\020T" + + "\022\n\n\006Matlab\0204\022\n\n\006Nickel\020n\022\007\n\003Nix\020M\022\t\n\005OCa" + + "ml\020)\022\017\n\013Objective_C\020$\022\021\n\rObjective_CPP\020%" + + "\022\n\n\006Pascal\020c\022\007\n\003PHP\020\023\022\t\n\005PLSQL\020F\022\010\n\004Perl" + + "\020\r\022\016\n\nPowerShell\020C\022\n\n\006Prolog\020G\022\014\n\010Protob" + + "uf\020d\022\n\n\006Python\020\017\022\005\n\001R\0206\022\n\n\006Racket\020\013\022\010\n\004R" + + "aku\020\016\022\t\n\005Razor\020>\022\t\n\005Repro\020f\022\010\n\004ReST\020U\022\010\n" + + "\004Ruby\020\020\022\010\n\004Rust\020(\022\007\n\003SAS\020=\022\010\n\004SCSS\020\035\022\007\n\003" + + "SML\020+\022\007\n\003SQL\020E\022\010\n\004Sass\020\034\022\t\n\005Scala\020\005\022\n\n\006S" + + "cheme\020\n\022\017\n\013ShellScript\020@\022\013\n\007Skylark\020N\022\t\n" + + "\005Slang\020k\022\014\n\010Solidity\020_\022\n\n\006Svelte\020j\022\t\n\005Sw" + + "ift\020\002\022\007\n\003Tcl\020e\022\010\n\004TOML\020I\022\007\n\003TeX\020R\022\n\n\006Thr" + + "ift\020g\022\016\n\nTypeScript\020\027\022\023\n\017TypeScriptReact" + + "\020^\022\013\n\007Verilog\020h\022\010\n\004VHDL\020i\022\017\n\013VisualBasic" + + "\020?\022\007\n\003Vue\020\031\022\013\n\007Wolfram\0205\022\007\n\003XML\020\037\022\007\n\003XSL" + + "\020 \022\010\n\004YAML\020J\022\007\n\003Zig\020&BN\n\022org.scip_code.s" + + "cipB\tScipProtoP\001Z+github.com/scip-code/s" + + "cip/bindings/go/scip/b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, @@ -325,14 +350,26 @@ public static void registerAllExtensions( com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_scip_Relationship_descriptor, new java.lang.String[] { "Symbol", "IsReference", "IsImplementation", "IsTypeDefinition", "IsDefinition", }); - internal_static_scip_Occurrence_descriptor = + internal_static_scip_SingleLineRange_descriptor = getDescriptor().getMessageType(10); + internal_static_scip_SingleLineRange_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_scip_SingleLineRange_descriptor, + new java.lang.String[] { "Line", "StartCharacter", "EndCharacter", }); + internal_static_scip_MultiLineRange_descriptor = + getDescriptor().getMessageType(11); + internal_static_scip_MultiLineRange_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_scip_MultiLineRange_descriptor, + new java.lang.String[] { "StartLine", "StartCharacter", "EndLine", "EndCharacter", }); + internal_static_scip_Occurrence_descriptor = + getDescriptor().getMessageType(12); internal_static_scip_Occurrence_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_scip_Occurrence_descriptor, - new java.lang.String[] { "Range", "Symbol", "SymbolRoles", "OverrideDocumentation", "SyntaxKind", "Diagnostics", "EnclosingRange", }); + new java.lang.String[] { "Range", "SingleLineRange", "MultiLineRange", "Symbol", "SymbolRoles", "OverrideDocumentation", "SyntaxKind", "Diagnostics", "EnclosingRange", "SingleLineEnclosingRange", "MultiLineEnclosingRange", "TypedRange", "TypedEnclosingRange", }); internal_static_scip_Diagnostic_descriptor = - getDescriptor().getMessageType(11); + getDescriptor().getMessageType(13); internal_static_scip_Diagnostic_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_scip_Diagnostic_descriptor, diff --git a/bindings/java/src/main/java/org/scip_code/scip/SingleLineRange.java b/bindings/java/src/main/java/org/scip_code/scip/SingleLineRange.java new file mode 100644 index 00000000..7aea8ac1 --- /dev/null +++ b/bindings/java/src/main/java/org/scip_code/scip/SingleLineRange.java @@ -0,0 +1,577 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: scip.proto +// Protobuf Java Version: 4.34.1 + +package org.scip_code.scip; + +/** + *
+ * SingleLineRange represents a half-open [start, end) range within a single line.
+ * 
+ * + * Protobuf type {@code scip.SingleLineRange} + */ +@com.google.protobuf.Generated +public final class SingleLineRange extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:scip.SingleLineRange) + SingleLineRangeOrBuilder { +private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 34, + /* patch= */ 1, + /* suffix= */ "", + "SingleLineRange"); + } + // Use SingleLineRange.newBuilder() to construct. + private SingleLineRange(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private SingleLineRange() { + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.scip_code.scip.ScipProto.internal_static_scip_SingleLineRange_descriptor; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return org.scip_code.scip.ScipProto.internal_static_scip_SingleLineRange_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.scip_code.scip.ScipProto.internal_static_scip_SingleLineRange_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.scip_code.scip.SingleLineRange.class, org.scip_code.scip.SingleLineRange.Builder.class); + } + + public static final int LINE_FIELD_NUMBER = 1; + private int line_ = 0; + /** + * int32 line = 1 [json_name = "line"]; + * @return The line. + */ + @java.lang.Override + public int getLine() { + return line_; + } + + public static final int START_CHARACTER_FIELD_NUMBER = 2; + private int startCharacter_ = 0; + /** + * int32 start_character = 2 [json_name = "startCharacter"]; + * @return The startCharacter. + */ + @java.lang.Override + public int getStartCharacter() { + return startCharacter_; + } + + public static final int END_CHARACTER_FIELD_NUMBER = 3; + private int endCharacter_ = 0; + /** + * int32 end_character = 3 [json_name = "endCharacter"]; + * @return The endCharacter. + */ + @java.lang.Override + public int getEndCharacter() { + return endCharacter_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (line_ != 0) { + output.writeInt32(1, line_); + } + if (startCharacter_ != 0) { + output.writeInt32(2, startCharacter_); + } + if (endCharacter_ != 0) { + output.writeInt32(3, endCharacter_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (line_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, line_); + } + if (startCharacter_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, startCharacter_); + } + if (endCharacter_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(3, endCharacter_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.scip_code.scip.SingleLineRange)) { + return super.equals(obj); + } + org.scip_code.scip.SingleLineRange other = (org.scip_code.scip.SingleLineRange) obj; + + if (getLine() + != other.getLine()) return false; + if (getStartCharacter() + != other.getStartCharacter()) return false; + if (getEndCharacter() + != other.getEndCharacter()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + LINE_FIELD_NUMBER; + hash = (53 * hash) + getLine(); + hash = (37 * hash) + START_CHARACTER_FIELD_NUMBER; + hash = (53 * hash) + getStartCharacter(); + hash = (37 * hash) + END_CHARACTER_FIELD_NUMBER; + hash = (53 * hash) + getEndCharacter(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.scip_code.scip.SingleLineRange parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.scip_code.scip.SingleLineRange parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.scip_code.scip.SingleLineRange parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.scip_code.scip.SingleLineRange parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.scip_code.scip.SingleLineRange parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.scip_code.scip.SingleLineRange parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.scip_code.scip.SingleLineRange parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static org.scip_code.scip.SingleLineRange parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static org.scip_code.scip.SingleLineRange parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static org.scip_code.scip.SingleLineRange parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.scip_code.scip.SingleLineRange parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static org.scip_code.scip.SingleLineRange parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.scip_code.scip.SingleLineRange prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+   * SingleLineRange represents a half-open [start, end) range within a single line.
+   * 
+ * + * Protobuf type {@code scip.SingleLineRange} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:scip.SingleLineRange) + org.scip_code.scip.SingleLineRangeOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.scip_code.scip.ScipProto.internal_static_scip_SingleLineRange_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.scip_code.scip.ScipProto.internal_static_scip_SingleLineRange_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.scip_code.scip.SingleLineRange.class, org.scip_code.scip.SingleLineRange.Builder.class); + } + + // Construct using org.scip_code.scip.SingleLineRange.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + line_ = 0; + startCharacter_ = 0; + endCharacter_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.scip_code.scip.ScipProto.internal_static_scip_SingleLineRange_descriptor; + } + + @java.lang.Override + public org.scip_code.scip.SingleLineRange getDefaultInstanceForType() { + return org.scip_code.scip.SingleLineRange.getDefaultInstance(); + } + + @java.lang.Override + public org.scip_code.scip.SingleLineRange build() { + org.scip_code.scip.SingleLineRange result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.scip_code.scip.SingleLineRange buildPartial() { + org.scip_code.scip.SingleLineRange result = new org.scip_code.scip.SingleLineRange(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(org.scip_code.scip.SingleLineRange result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.line_ = line_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.startCharacter_ = startCharacter_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.endCharacter_ = endCharacter_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.scip_code.scip.SingleLineRange) { + return mergeFrom((org.scip_code.scip.SingleLineRange)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.scip_code.scip.SingleLineRange other) { + if (other == org.scip_code.scip.SingleLineRange.getDefaultInstance()) return this; + if (other.getLine() != 0) { + setLine(other.getLine()); + } + if (other.getStartCharacter() != 0) { + setStartCharacter(other.getStartCharacter()); + } + if (other.getEndCharacter() != 0) { + setEndCharacter(other.getEndCharacter()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + line_ = input.readInt32(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: { + startCharacter_ = input.readInt32(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 24: { + endCharacter_ = input.readInt32(); + bitField0_ |= 0x00000004; + break; + } // case 24 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private int line_ ; + /** + * int32 line = 1 [json_name = "line"]; + * @return The line. + */ + @java.lang.Override + public int getLine() { + return line_; + } + /** + * int32 line = 1 [json_name = "line"]; + * @param value The line to set. + * @return This builder for chaining. + */ + public Builder setLine(int value) { + + line_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * int32 line = 1 [json_name = "line"]; + * @return This builder for chaining. + */ + public Builder clearLine() { + bitField0_ = (bitField0_ & ~0x00000001); + line_ = 0; + onChanged(); + return this; + } + + private int startCharacter_ ; + /** + * int32 start_character = 2 [json_name = "startCharacter"]; + * @return The startCharacter. + */ + @java.lang.Override + public int getStartCharacter() { + return startCharacter_; + } + /** + * int32 start_character = 2 [json_name = "startCharacter"]; + * @param value The startCharacter to set. + * @return This builder for chaining. + */ + public Builder setStartCharacter(int value) { + + startCharacter_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * int32 start_character = 2 [json_name = "startCharacter"]; + * @return This builder for chaining. + */ + public Builder clearStartCharacter() { + bitField0_ = (bitField0_ & ~0x00000002); + startCharacter_ = 0; + onChanged(); + return this; + } + + private int endCharacter_ ; + /** + * int32 end_character = 3 [json_name = "endCharacter"]; + * @return The endCharacter. + */ + @java.lang.Override + public int getEndCharacter() { + return endCharacter_; + } + /** + * int32 end_character = 3 [json_name = "endCharacter"]; + * @param value The endCharacter to set. + * @return This builder for chaining. + */ + public Builder setEndCharacter(int value) { + + endCharacter_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * int32 end_character = 3 [json_name = "endCharacter"]; + * @return This builder for chaining. + */ + public Builder clearEndCharacter() { + bitField0_ = (bitField0_ & ~0x00000004); + endCharacter_ = 0; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:scip.SingleLineRange) + } + + // @@protoc_insertion_point(class_scope:scip.SingleLineRange) + private static final org.scip_code.scip.SingleLineRange DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.scip_code.scip.SingleLineRange(); + } + + public static org.scip_code.scip.SingleLineRange getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public SingleLineRange parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.scip_code.scip.SingleLineRange getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + +} + diff --git a/bindings/java/src/main/java/org/scip_code/scip/SingleLineRangeOrBuilder.java b/bindings/java/src/main/java/org/scip_code/scip/SingleLineRangeOrBuilder.java new file mode 100644 index 00000000..6a22039f --- /dev/null +++ b/bindings/java/src/main/java/org/scip_code/scip/SingleLineRangeOrBuilder.java @@ -0,0 +1,30 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: scip.proto +// Protobuf Java Version: 4.34.1 + +package org.scip_code.scip; + +@com.google.protobuf.Generated +public interface SingleLineRangeOrBuilder extends + // @@protoc_insertion_point(interface_extends:scip.SingleLineRange) + com.google.protobuf.MessageOrBuilder { + + /** + * int32 line = 1 [json_name = "line"]; + * @return The line. + */ + int getLine(); + + /** + * int32 start_character = 2 [json_name = "startCharacter"]; + * @return The startCharacter. + */ + int getStartCharacter(); + + /** + * int32 end_character = 3 [json_name = "endCharacter"]; + * @return The endCharacter. + */ + int getEndCharacter(); +} diff --git a/bindings/kotlin/src/main/kotlin/org/scip_code/scip/MultiLineRangeKt.kt b/bindings/kotlin/src/main/kotlin/org/scip_code/scip/MultiLineRangeKt.kt new file mode 100644 index 00000000..aa8d8744 --- /dev/null +++ b/bindings/kotlin/src/main/kotlin/org/scip_code/scip/MultiLineRangeKt.kt @@ -0,0 +1,108 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: scip.proto + +@file:com.google.protobuf.Generated +// Generated files should ignore deprecation warnings +@file:Suppress("DEPRECATION") +package org.scip_code.scip; + +@kotlin.jvm.JvmName("-initializemultiLineRange") +public inline fun multiLineRange(block: org.scip_code.scip.MultiLineRangeKt.Dsl.() -> kotlin.Unit): org.scip_code.scip.MultiLineRange = + org.scip_code.scip.MultiLineRangeKt.Dsl._create(org.scip_code.scip.MultiLineRange.newBuilder()).apply { block() }._build() +/** + * ``` + * MultiLineRange represents a half-open [start, end) range spanning multiple lines. + * ``` + * + * Protobuf type `scip.MultiLineRange` + */ +public object MultiLineRangeKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + public class Dsl private constructor( + private val _builder: org.scip_code.scip.MultiLineRange.Builder + ) { + public companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: org.scip_code.scip.MultiLineRange.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): org.scip_code.scip.MultiLineRange = _builder.build() + + /** + * `int32 start_line = 1 [json_name = "startLine"];` + */ + public var startLine: kotlin.Int + @kotlin.jvm.JvmName("getStartLine") + get() = _builder.startLine + @kotlin.jvm.JvmName("setStartLine") + set(value) { + _builder.startLine = value + } + /** + * `int32 start_line = 1 [json_name = "startLine"];` + */ + public fun clearStartLine() { + _builder.clearStartLine() + } + + /** + * `int32 start_character = 2 [json_name = "startCharacter"];` + */ + public var startCharacter: kotlin.Int + @kotlin.jvm.JvmName("getStartCharacter") + get() = _builder.startCharacter + @kotlin.jvm.JvmName("setStartCharacter") + set(value) { + _builder.startCharacter = value + } + /** + * `int32 start_character = 2 [json_name = "startCharacter"];` + */ + public fun clearStartCharacter() { + _builder.clearStartCharacter() + } + + /** + * `int32 end_line = 3 [json_name = "endLine"];` + */ + public var endLine: kotlin.Int + @kotlin.jvm.JvmName("getEndLine") + get() = _builder.endLine + @kotlin.jvm.JvmName("setEndLine") + set(value) { + _builder.endLine = value + } + /** + * `int32 end_line = 3 [json_name = "endLine"];` + */ + public fun clearEndLine() { + _builder.clearEndLine() + } + + /** + * `int32 end_character = 4 [json_name = "endCharacter"];` + */ + public var endCharacter: kotlin.Int + @kotlin.jvm.JvmName("getEndCharacter") + get() = _builder.endCharacter + @kotlin.jvm.JvmName("setEndCharacter") + set(value) { + _builder.endCharacter = value + } + /** + * `int32 end_character = 4 [json_name = "endCharacter"];` + */ + public fun clearEndCharacter() { + _builder.clearEndCharacter() + } + } +} +@kotlin.jvm.JvmSynthetic +public inline fun org.scip_code.scip.MultiLineRange.copy(block: `org.scip_code.scip`.MultiLineRangeKt.Dsl.() -> kotlin.Unit): org.scip_code.scip.MultiLineRange = + `org.scip_code.scip`.MultiLineRangeKt.Dsl._create(this.toBuilder()).apply { block() }._build() + diff --git a/bindings/kotlin/src/main/kotlin/org/scip_code/scip/OccurrenceKt.kt b/bindings/kotlin/src/main/kotlin/org/scip_code/scip/OccurrenceKt.kt index c8d79b05..3b8f8d98 100644 --- a/bindings/kotlin/src/main/kotlin/org/scip_code/scip/OccurrenceKt.kt +++ b/bindings/kotlin/src/main/kotlin/org/scip_code/scip/OccurrenceKt.kt @@ -45,66 +45,44 @@ public object OccurrenceKt { public class RangeProxy private constructor() : com.google.protobuf.kotlin.DslProxy() /** * ``` - * Half-open [start, end) range of this occurrence. Must be exactly three or four - * elements: + * Deprecated: Use `single_line_range` or `multi_line_range` instead. * + * Half-open [start, end) range. Must be exactly three or four elements: + * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` - * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line - * is inferred to have the same value as the start line. - * - * It is allowed for the range to be empty (i.e. start==end). - * - * Line numbers and characters are always 0-based. Make sure to increment the - * line/character values before displaying them in an editor-like UI because - * editors conventionally use 1-based numbers. - * - * The 'character' value is interpreted based on the PositionEncoding for - * the Document. * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` - * instead. The `repeated int32` encoding is admittedly more embarrassing to - * work with in some programming languages but we hope the performance - * improvements make up for it. + * instead. However, the lack of type safety led to the introduction of + * `single_line_range` and `multi_line_range` as typed alternatives. * ``` * - * `repeated int32 range = 1 [json_name = "range"];` + * `repeated int32 range = 1 [json_name = "range", deprecated = true];` */ - public val range: com.google.protobuf.kotlin.DslList + @kotlin.Deprecated(message = "Field range is deprecated") public val range: com.google.protobuf.kotlin.DslList @kotlin.jvm.JvmSynthetic get() = com.google.protobuf.kotlin.DslList( _builder.rangeList ) /** * ``` - * Half-open [start, end) range of this occurrence. Must be exactly three or four - * elements: + * Deprecated: Use `single_line_range` or `multi_line_range` instead. * + * Half-open [start, end) range. Must be exactly three or four elements: + * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` - * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line - * is inferred to have the same value as the start line. - * - * It is allowed for the range to be empty (i.e. start==end). - * - * Line numbers and characters are always 0-based. Make sure to increment the - * line/character values before displaying them in an editor-like UI because - * editors conventionally use 1-based numbers. - * - * The 'character' value is interpreted based on the PositionEncoding for - * the Document. * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` - * instead. The `repeated int32` encoding is admittedly more embarrassing to - * work with in some programming languages but we hope the performance - * improvements make up for it. + * instead. However, the lack of type safety led to the introduction of + * `single_line_range` and `multi_line_range` as typed alternatives. * ``` * - * `repeated int32 range = 1 [json_name = "range"];` + * `repeated int32 range = 1 [json_name = "range", deprecated = true];` * @param value The range to add. */ @kotlin.jvm.JvmSynthetic @@ -113,32 +91,21 @@ public object OccurrenceKt { _builder.addRange(value) }/** * ``` - * Half-open [start, end) range of this occurrence. Must be exactly three or four - * elements: + * Deprecated: Use `single_line_range` or `multi_line_range` instead. * + * Half-open [start, end) range. Must be exactly three or four elements: + * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` - * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line - * is inferred to have the same value as the start line. - * - * It is allowed for the range to be empty (i.e. start==end). - * - * Line numbers and characters are always 0-based. Make sure to increment the - * line/character values before displaying them in an editor-like UI because - * editors conventionally use 1-based numbers. - * - * The 'character' value is interpreted based on the PositionEncoding for - * the Document. * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` - * instead. The `repeated int32` encoding is admittedly more embarrassing to - * work with in some programming languages but we hope the performance - * improvements make up for it. + * instead. However, the lack of type safety led to the introduction of + * `single_line_range` and `multi_line_range` as typed alternatives. * ``` * - * `repeated int32 range = 1 [json_name = "range"];` + * `repeated int32 range = 1 [json_name = "range", deprecated = true];` * @param value The range to add. */ @kotlin.jvm.JvmSynthetic @@ -148,32 +115,21 @@ public object OccurrenceKt { add(value) }/** * ``` - * Half-open [start, end) range of this occurrence. Must be exactly three or four - * elements: + * Deprecated: Use `single_line_range` or `multi_line_range` instead. * + * Half-open [start, end) range. Must be exactly three or four elements: + * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` - * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line - * is inferred to have the same value as the start line. - * - * It is allowed for the range to be empty (i.e. start==end). - * - * Line numbers and characters are always 0-based. Make sure to increment the - * line/character values before displaying them in an editor-like UI because - * editors conventionally use 1-based numbers. - * - * The 'character' value is interpreted based on the PositionEncoding for - * the Document. * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` - * instead. The `repeated int32` encoding is admittedly more embarrassing to - * work with in some programming languages but we hope the performance - * improvements make up for it. + * instead. However, the lack of type safety led to the introduction of + * `single_line_range` and `multi_line_range` as typed alternatives. * ``` * - * `repeated int32 range = 1 [json_name = "range"];` + * `repeated int32 range = 1 [json_name = "range", deprecated = true];` * @param values The range to add. */ @kotlin.jvm.JvmSynthetic @@ -182,32 +138,21 @@ public object OccurrenceKt { _builder.addAllRange(values) }/** * ``` - * Half-open [start, end) range of this occurrence. Must be exactly three or four - * elements: + * Deprecated: Use `single_line_range` or `multi_line_range` instead. * + * Half-open [start, end) range. Must be exactly three or four elements: + * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` - * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line - * is inferred to have the same value as the start line. - * - * It is allowed for the range to be empty (i.e. start==end). - * - * Line numbers and characters are always 0-based. Make sure to increment the - * line/character values before displaying them in an editor-like UI because - * editors conventionally use 1-based numbers. - * - * The 'character' value is interpreted based on the PositionEncoding for - * the Document. * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` - * instead. The `repeated int32` encoding is admittedly more embarrassing to - * work with in some programming languages but we hope the performance - * improvements make up for it. + * instead. However, the lack of type safety led to the introduction of + * `single_line_range` and `multi_line_range` as typed alternatives. * ``` * - * `repeated int32 range = 1 [json_name = "range"];` + * `repeated int32 range = 1 [json_name = "range", deprecated = true];` * @param values The range to add. */ @kotlin.jvm.JvmSynthetic @@ -217,32 +162,21 @@ public object OccurrenceKt { addAll(values) }/** * ``` - * Half-open [start, end) range of this occurrence. Must be exactly three or four - * elements: + * Deprecated: Use `single_line_range` or `multi_line_range` instead. * + * Half-open [start, end) range. Must be exactly three or four elements: + * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` - * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line - * is inferred to have the same value as the start line. - * - * It is allowed for the range to be empty (i.e. start==end). - * - * Line numbers and characters are always 0-based. Make sure to increment the - * line/character values before displaying them in an editor-like UI because - * editors conventionally use 1-based numbers. - * - * The 'character' value is interpreted based on the PositionEncoding for - * the Document. * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` - * instead. The `repeated int32` encoding is admittedly more embarrassing to - * work with in some programming languages but we hope the performance - * improvements make up for it. + * instead. However, the lack of type safety led to the introduction of + * `single_line_range` and `multi_line_range` as typed alternatives. * ``` * - * `repeated int32 range = 1 [json_name = "range"];` + * `repeated int32 range = 1 [json_name = "range", deprecated = true];` * @param index The index to set the value at. * @param value The range to set. */ @@ -252,38 +186,99 @@ public object OccurrenceKt { _builder.setRange(index, value) }/** * ``` - * Half-open [start, end) range of this occurrence. Must be exactly three or four - * elements: + * Deprecated: Use `single_line_range` or `multi_line_range` instead. * + * Half-open [start, end) range. Must be exactly three or four elements: + * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` - * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line - * is inferred to have the same value as the start line. - * - * It is allowed for the range to be empty (i.e. start==end). - * - * Line numbers and characters are always 0-based. Make sure to increment the - * line/character values before displaying them in an editor-like UI because - * editors conventionally use 1-based numbers. - * - * The 'character' value is interpreted based on the PositionEncoding for - * the Document. * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` - * instead. The `repeated int32` encoding is admittedly more embarrassing to - * work with in some programming languages but we hope the performance - * improvements make up for it. + * instead. However, the lack of type safety led to the introduction of + * `single_line_range` and `multi_line_range` as typed alternatives. * ``` * - * `repeated int32 range = 1 [json_name = "range"];` + * `repeated int32 range = 1 [json_name = "range", deprecated = true];` */ @kotlin.jvm.JvmSynthetic @kotlin.jvm.JvmName("clearRange") public fun com.google.protobuf.kotlin.DslList.clear() { _builder.clearRange() } + /** + * ``` + * Range spanning a single line. + * ``` + * + * `.scip.SingleLineRange single_line_range = 8 [json_name = "singleLineRange"];` + */ + public var singleLineRange: org.scip_code.scip.SingleLineRange + @kotlin.jvm.JvmName("getSingleLineRange") + get() = _builder.singleLineRange + @kotlin.jvm.JvmName("setSingleLineRange") + set(value) { + _builder.singleLineRange = value + } + /** + * ``` + * Range spanning a single line. + * ``` + * + * `.scip.SingleLineRange single_line_range = 8 [json_name = "singleLineRange"];` + */ + public fun clearSingleLineRange() { + _builder.clearSingleLineRange() + } + /** + * ``` + * Range spanning a single line. + * ``` + * + * `.scip.SingleLineRange single_line_range = 8 [json_name = "singleLineRange"];` + * @return Whether the singleLineRange field is set. + */ + public fun hasSingleLineRange(): kotlin.Boolean { + return _builder.hasSingleLineRange() + } + + /** + * ``` + * Range spanning multiple lines. + * ``` + * + * `.scip.MultiLineRange multi_line_range = 9 [json_name = "multiLineRange"];` + */ + public var multiLineRange: org.scip_code.scip.MultiLineRange + @kotlin.jvm.JvmName("getMultiLineRange") + get() = _builder.multiLineRange + @kotlin.jvm.JvmName("setMultiLineRange") + set(value) { + _builder.multiLineRange = value + } + /** + * ``` + * Range spanning multiple lines. + * ``` + * + * `.scip.MultiLineRange multi_line_range = 9 [json_name = "multiLineRange"];` + */ + public fun clearMultiLineRange() { + _builder.clearMultiLineRange() + } + /** + * ``` + * Range spanning multiple lines. + * ``` + * + * `.scip.MultiLineRange multi_line_range = 9 [json_name = "multiLineRange"];` + * @return Whether the multiLineRange field is set. + */ + public fun hasMultiLineRange(): kotlin.Boolean { + return _builder.hasMultiLineRange() + } + /** * ``` * (optional) The symbol that appears at this position. See @@ -624,124 +619,22 @@ public object OccurrenceKt { public class EnclosingRangeProxy private constructor() : com.google.protobuf.kotlin.DslProxy() /** * ``` - * (optional) Using the same encoding as the sibling `range` field, half-open - * source range of the nearest non-trivial enclosing AST node. This range must - * enclose the `range` field. Example applications that make use of the - * enclosing_range field: - * - * - Call hierarchies: to determine what symbols are references from the body - * of a function - * - Symbol outline: to display breadcrumbs from the cursor position to the - * root of the file - * - Expand selection: to select the nearest enclosing AST node. - * - Highlight range: to indicate the AST expression that is associated with a - * hover popover - * - * For definition occurrences, the enclosing range should indicate the - * start/end bounds of the entire definition AST node, including - * documentation. - * ``` - * const n = 3 - * ^ range - * ^^^^^^^^^^^ enclosing_range - * - * /** Parses the string into something */ - * ^ enclosing_range start --------------------------------------| - * function parse(input string): string { | - * ^^^^^ range | - * return input.slice(n) | - * } | - * ^ enclosing_range end <---------------------------------------| - * ``` - * - * Any attributes/decorators/attached macros should also be part of the - * enclosing range. - * - * ```python - * @cache - * ^ enclosing_range start---------------------| - * def factorial(n): | - * return n * factorial(n-1) if n else 1 | - * < enclosing_range end-----------------------| - * + * Deprecated: Use `typed_enclosing_range` instead. * ``` * - * For reference occurrences, the enclosing range should indicate the start/end - * bounds of the parent expression. - * ``` - * const a = a.b - * ^ range - * ^^^ enclosing_range - * const b = a.b(41).f(42).g(43) - * ^ range - * ^^^^^^^^^^^^^ enclosing_range - * ``` - * ``` - * - * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange"];` + * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true];` */ - public val enclosingRange: com.google.protobuf.kotlin.DslList + @kotlin.Deprecated(message = "Field enclosingRange is deprecated") public val enclosingRange: com.google.protobuf.kotlin.DslList @kotlin.jvm.JvmSynthetic get() = com.google.protobuf.kotlin.DslList( _builder.enclosingRangeList ) /** * ``` - * (optional) Using the same encoding as the sibling `range` field, half-open - * source range of the nearest non-trivial enclosing AST node. This range must - * enclose the `range` field. Example applications that make use of the - * enclosing_range field: - * - * - Call hierarchies: to determine what symbols are references from the body - * of a function - * - Symbol outline: to display breadcrumbs from the cursor position to the - * root of the file - * - Expand selection: to select the nearest enclosing AST node. - * - Highlight range: to indicate the AST expression that is associated with a - * hover popover - * - * For definition occurrences, the enclosing range should indicate the - * start/end bounds of the entire definition AST node, including - * documentation. - * ``` - * const n = 3 - * ^ range - * ^^^^^^^^^^^ enclosing_range - * - * /** Parses the string into something */ - * ^ enclosing_range start --------------------------------------| - * function parse(input string): string { | - * ^^^^^ range | - * return input.slice(n) | - * } | - * ^ enclosing_range end <---------------------------------------| - * ``` - * - * Any attributes/decorators/attached macros should also be part of the - * enclosing range. - * - * ```python - * @cache - * ^ enclosing_range start---------------------| - * def factorial(n): | - * return n * factorial(n-1) if n else 1 | - * < enclosing_range end-----------------------| - * + * Deprecated: Use `typed_enclosing_range` instead. * ``` * - * For reference occurrences, the enclosing range should indicate the start/end - * bounds of the parent expression. - * ``` - * const a = a.b - * ^ range - * ^^^ enclosing_range - * const b = a.b(41).f(42).g(43) - * ^ range - * ^^^^^^^^^^^^^ enclosing_range - * ``` - * ``` - * - * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange"];` + * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true];` * @param value The enclosingRange to add. */ @kotlin.jvm.JvmSynthetic @@ -750,61 +643,10 @@ public object OccurrenceKt { _builder.addEnclosingRange(value) }/** * ``` - * (optional) Using the same encoding as the sibling `range` field, half-open - * source range of the nearest non-trivial enclosing AST node. This range must - * enclose the `range` field. Example applications that make use of the - * enclosing_range field: - * - * - Call hierarchies: to determine what symbols are references from the body - * of a function - * - Symbol outline: to display breadcrumbs from the cursor position to the - * root of the file - * - Expand selection: to select the nearest enclosing AST node. - * - Highlight range: to indicate the AST expression that is associated with a - * hover popover - * - * For definition occurrences, the enclosing range should indicate the - * start/end bounds of the entire definition AST node, including - * documentation. + * Deprecated: Use `typed_enclosing_range` instead. * ``` - * const n = 3 - * ^ range - * ^^^^^^^^^^^ enclosing_range * - * /** Parses the string into something */ - * ^ enclosing_range start --------------------------------------| - * function parse(input string): string { | - * ^^^^^ range | - * return input.slice(n) | - * } | - * ^ enclosing_range end <---------------------------------------| - * ``` - * - * Any attributes/decorators/attached macros should also be part of the - * enclosing range. - * - * ```python - * @cache - * ^ enclosing_range start---------------------| - * def factorial(n): | - * return n * factorial(n-1) if n else 1 | - * < enclosing_range end-----------------------| - * - * ``` - * - * For reference occurrences, the enclosing range should indicate the start/end - * bounds of the parent expression. - * ``` - * const a = a.b - * ^ range - * ^^^ enclosing_range - * const b = a.b(41).f(42).g(43) - * ^ range - * ^^^^^^^^^^^^^ enclosing_range - * ``` - * ``` - * - * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange"];` + * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true];` * @param value The enclosingRange to add. */ @kotlin.jvm.JvmSynthetic @@ -814,61 +656,10 @@ public object OccurrenceKt { add(value) }/** * ``` - * (optional) Using the same encoding as the sibling `range` field, half-open - * source range of the nearest non-trivial enclosing AST node. This range must - * enclose the `range` field. Example applications that make use of the - * enclosing_range field: - * - * - Call hierarchies: to determine what symbols are references from the body - * of a function - * - Symbol outline: to display breadcrumbs from the cursor position to the - * root of the file - * - Expand selection: to select the nearest enclosing AST node. - * - Highlight range: to indicate the AST expression that is associated with a - * hover popover - * - * For definition occurrences, the enclosing range should indicate the - * start/end bounds of the entire definition AST node, including - * documentation. - * ``` - * const n = 3 - * ^ range - * ^^^^^^^^^^^ enclosing_range - * - * /** Parses the string into something */ - * ^ enclosing_range start --------------------------------------| - * function parse(input string): string { | - * ^^^^^ range | - * return input.slice(n) | - * } | - * ^ enclosing_range end <---------------------------------------| - * ``` - * - * Any attributes/decorators/attached macros should also be part of the - * enclosing range. - * - * ```python - * @cache - * ^ enclosing_range start---------------------| - * def factorial(n): | - * return n * factorial(n-1) if n else 1 | - * < enclosing_range end-----------------------| - * + * Deprecated: Use `typed_enclosing_range` instead. * ``` * - * For reference occurrences, the enclosing range should indicate the start/end - * bounds of the parent expression. - * ``` - * const a = a.b - * ^ range - * ^^^ enclosing_range - * const b = a.b(41).f(42).g(43) - * ^ range - * ^^^^^^^^^^^^^ enclosing_range - * ``` - * ``` - * - * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange"];` + * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true];` * @param values The enclosingRange to add. */ @kotlin.jvm.JvmSynthetic @@ -877,61 +668,10 @@ public object OccurrenceKt { _builder.addAllEnclosingRange(values) }/** * ``` - * (optional) Using the same encoding as the sibling `range` field, half-open - * source range of the nearest non-trivial enclosing AST node. This range must - * enclose the `range` field. Example applications that make use of the - * enclosing_range field: - * - * - Call hierarchies: to determine what symbols are references from the body - * of a function - * - Symbol outline: to display breadcrumbs from the cursor position to the - * root of the file - * - Expand selection: to select the nearest enclosing AST node. - * - Highlight range: to indicate the AST expression that is associated with a - * hover popover - * - * For definition occurrences, the enclosing range should indicate the - * start/end bounds of the entire definition AST node, including - * documentation. - * ``` - * const n = 3 - * ^ range - * ^^^^^^^^^^^ enclosing_range - * - * /** Parses the string into something */ - * ^ enclosing_range start --------------------------------------| - * function parse(input string): string { | - * ^^^^^ range | - * return input.slice(n) | - * } | - * ^ enclosing_range end <---------------------------------------| - * ``` - * - * Any attributes/decorators/attached macros should also be part of the - * enclosing range. - * - * ```python - * @cache - * ^ enclosing_range start---------------------| - * def factorial(n): | - * return n * factorial(n-1) if n else 1 | - * < enclosing_range end-----------------------| - * - * ``` - * - * For reference occurrences, the enclosing range should indicate the start/end - * bounds of the parent expression. - * ``` - * const a = a.b - * ^ range - * ^^^ enclosing_range - * const b = a.b(41).f(42).g(43) - * ^ range - * ^^^^^^^^^^^^^ enclosing_range - * ``` + * Deprecated: Use `typed_enclosing_range` instead. * ``` * - * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange"];` + * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true];` * @param values The enclosingRange to add. */ @kotlin.jvm.JvmSynthetic @@ -941,61 +681,10 @@ public object OccurrenceKt { addAll(values) }/** * ``` - * (optional) Using the same encoding as the sibling `range` field, half-open - * source range of the nearest non-trivial enclosing AST node. This range must - * enclose the `range` field. Example applications that make use of the - * enclosing_range field: - * - * - Call hierarchies: to determine what symbols are references from the body - * of a function - * - Symbol outline: to display breadcrumbs from the cursor position to the - * root of the file - * - Expand selection: to select the nearest enclosing AST node. - * - Highlight range: to indicate the AST expression that is associated with a - * hover popover - * - * For definition occurrences, the enclosing range should indicate the - * start/end bounds of the entire definition AST node, including - * documentation. - * ``` - * const n = 3 - * ^ range - * ^^^^^^^^^^^ enclosing_range - * - * /** Parses the string into something */ - * ^ enclosing_range start --------------------------------------| - * function parse(input string): string { | - * ^^^^^ range | - * return input.slice(n) | - * } | - * ^ enclosing_range end <---------------------------------------| + * Deprecated: Use `typed_enclosing_range` instead. * ``` * - * Any attributes/decorators/attached macros should also be part of the - * enclosing range. - * - * ```python - * @cache - * ^ enclosing_range start---------------------| - * def factorial(n): | - * return n * factorial(n-1) if n else 1 | - * < enclosing_range end-----------------------| - * - * ``` - * - * For reference occurrences, the enclosing range should indicate the start/end - * bounds of the parent expression. - * ``` - * const a = a.b - * ^ range - * ^^^ enclosing_range - * const b = a.b(41).f(42).g(43) - * ^ range - * ^^^^^^^^^^^^^ enclosing_range - * ``` - * ``` - * - * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange"];` + * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true];` * @param index The index to set the value at. * @param value The enclosingRange to set. */ @@ -1005,69 +694,92 @@ public object OccurrenceKt { _builder.setEnclosingRange(index, value) }/** * ``` - * (optional) Using the same encoding as the sibling `range` field, half-open - * source range of the nearest non-trivial enclosing AST node. This range must - * enclose the `range` field. Example applications that make use of the - * enclosing_range field: - * - * - Call hierarchies: to determine what symbols are references from the body - * of a function - * - Symbol outline: to display breadcrumbs from the cursor position to the - * root of the file - * - Expand selection: to select the nearest enclosing AST node. - * - Highlight range: to indicate the AST expression that is associated with a - * hover popover - * - * For definition occurrences, the enclosing range should indicate the - * start/end bounds of the entire definition AST node, including - * documentation. - * ``` - * const n = 3 - * ^ range - * ^^^^^^^^^^^ enclosing_range - * - * /** Parses the string into something */ - * ^ enclosing_range start --------------------------------------| - * function parse(input string): string { | - * ^^^^^ range | - * return input.slice(n) | - * } | - * ^ enclosing_range end <---------------------------------------| - * ``` - * - * Any attributes/decorators/attached macros should also be part of the - * enclosing range. - * - * ```python - * @cache - * ^ enclosing_range start---------------------| - * def factorial(n): | - * return n * factorial(n-1) if n else 1 | - * < enclosing_range end-----------------------| - * - * ``` - * - * For reference occurrences, the enclosing range should indicate the start/end - * bounds of the parent expression. - * ``` - * const a = a.b - * ^ range - * ^^^ enclosing_range - * const b = a.b(41).f(42).g(43) - * ^ range - * ^^^^^^^^^^^^^ enclosing_range - * ``` + * Deprecated: Use `typed_enclosing_range` instead. * ``` * - * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange"];` + * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true];` */ @kotlin.jvm.JvmSynthetic @kotlin.jvm.JvmName("clearEnclosingRange") public fun com.google.protobuf.kotlin.DslList.clear() { _builder.clearEnclosingRange() - }} + } + /** + * `.scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"];` + */ + public var singleLineEnclosingRange: org.scip_code.scip.SingleLineRange + @kotlin.jvm.JvmName("getSingleLineEnclosingRange") + get() = _builder.singleLineEnclosingRange + @kotlin.jvm.JvmName("setSingleLineEnclosingRange") + set(value) { + _builder.singleLineEnclosingRange = value + } + /** + * `.scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"];` + */ + public fun clearSingleLineEnclosingRange() { + _builder.clearSingleLineEnclosingRange() + } + /** + * `.scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"];` + * @return Whether the singleLineEnclosingRange field is set. + */ + public fun hasSingleLineEnclosingRange(): kotlin.Boolean { + return _builder.hasSingleLineEnclosingRange() + } + + /** + * `.scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"];` + */ + public var multiLineEnclosingRange: org.scip_code.scip.MultiLineRange + @kotlin.jvm.JvmName("getMultiLineEnclosingRange") + get() = _builder.multiLineEnclosingRange + @kotlin.jvm.JvmName("setMultiLineEnclosingRange") + set(value) { + _builder.multiLineEnclosingRange = value + } + /** + * `.scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"];` + */ + public fun clearMultiLineEnclosingRange() { + _builder.clearMultiLineEnclosingRange() + } + /** + * `.scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"];` + * @return Whether the multiLineEnclosingRange field is set. + */ + public fun hasMultiLineEnclosingRange(): kotlin.Boolean { + return _builder.hasMultiLineEnclosingRange() + } + public val typedRangeCase: org.scip_code.scip.Occurrence.TypedRangeCase + @kotlin.jvm.JvmName("getTypedRangeCase") + get() = _builder.getTypedRangeCase() + + public fun clearTypedRange() { + _builder.clearTypedRange() + } + public val typedEnclosingRangeCase: org.scip_code.scip.Occurrence.TypedEnclosingRangeCase + @kotlin.jvm.JvmName("getTypedEnclosingRangeCase") + get() = _builder.getTypedEnclosingRangeCase() + + public fun clearTypedEnclosingRange() { + _builder.clearTypedEnclosingRange() + } + } } @kotlin.jvm.JvmSynthetic public inline fun org.scip_code.scip.Occurrence.copy(block: `org.scip_code.scip`.OccurrenceKt.Dsl.() -> kotlin.Unit): org.scip_code.scip.Occurrence = `org.scip_code.scip`.OccurrenceKt.Dsl._create(this.toBuilder()).apply { block() }._build() +public val org.scip_code.scip.OccurrenceOrBuilder.singleLineRangeOrNull: org.scip_code.scip.SingleLineRange? + get() = if (hasSingleLineRange()) getSingleLineRange() else null + +public val org.scip_code.scip.OccurrenceOrBuilder.multiLineRangeOrNull: org.scip_code.scip.MultiLineRange? + get() = if (hasMultiLineRange()) getMultiLineRange() else null + +public val org.scip_code.scip.OccurrenceOrBuilder.singleLineEnclosingRangeOrNull: org.scip_code.scip.SingleLineRange? + get() = if (hasSingleLineEnclosingRange()) getSingleLineEnclosingRange() else null + +public val org.scip_code.scip.OccurrenceOrBuilder.multiLineEnclosingRangeOrNull: org.scip_code.scip.MultiLineRange? + get() = if (hasMultiLineEnclosingRange()) getMultiLineEnclosingRange() else null + diff --git a/bindings/kotlin/src/main/kotlin/org/scip_code/scip/SingleLineRangeKt.kt b/bindings/kotlin/src/main/kotlin/org/scip_code/scip/SingleLineRangeKt.kt new file mode 100644 index 00000000..15c024cb --- /dev/null +++ b/bindings/kotlin/src/main/kotlin/org/scip_code/scip/SingleLineRangeKt.kt @@ -0,0 +1,91 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: scip.proto + +@file:com.google.protobuf.Generated +// Generated files should ignore deprecation warnings +@file:Suppress("DEPRECATION") +package org.scip_code.scip; + +@kotlin.jvm.JvmName("-initializesingleLineRange") +public inline fun singleLineRange(block: org.scip_code.scip.SingleLineRangeKt.Dsl.() -> kotlin.Unit): org.scip_code.scip.SingleLineRange = + org.scip_code.scip.SingleLineRangeKt.Dsl._create(org.scip_code.scip.SingleLineRange.newBuilder()).apply { block() }._build() +/** + * ``` + * SingleLineRange represents a half-open [start, end) range within a single line. + * ``` + * + * Protobuf type `scip.SingleLineRange` + */ +public object SingleLineRangeKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + public class Dsl private constructor( + private val _builder: org.scip_code.scip.SingleLineRange.Builder + ) { + public companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: org.scip_code.scip.SingleLineRange.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): org.scip_code.scip.SingleLineRange = _builder.build() + + /** + * `int32 line = 1 [json_name = "line"];` + */ + public var line: kotlin.Int + @kotlin.jvm.JvmName("getLine") + get() = _builder.line + @kotlin.jvm.JvmName("setLine") + set(value) { + _builder.line = value + } + /** + * `int32 line = 1 [json_name = "line"];` + */ + public fun clearLine() { + _builder.clearLine() + } + + /** + * `int32 start_character = 2 [json_name = "startCharacter"];` + */ + public var startCharacter: kotlin.Int + @kotlin.jvm.JvmName("getStartCharacter") + get() = _builder.startCharacter + @kotlin.jvm.JvmName("setStartCharacter") + set(value) { + _builder.startCharacter = value + } + /** + * `int32 start_character = 2 [json_name = "startCharacter"];` + */ + public fun clearStartCharacter() { + _builder.clearStartCharacter() + } + + /** + * `int32 end_character = 3 [json_name = "endCharacter"];` + */ + public var endCharacter: kotlin.Int + @kotlin.jvm.JvmName("getEndCharacter") + get() = _builder.endCharacter + @kotlin.jvm.JvmName("setEndCharacter") + set(value) { + _builder.endCharacter = value + } + /** + * `int32 end_character = 3 [json_name = "endCharacter"];` + */ + public fun clearEndCharacter() { + _builder.clearEndCharacter() + } + } +} +@kotlin.jvm.JvmSynthetic +public inline fun org.scip_code.scip.SingleLineRange.copy(block: `org.scip_code.scip`.SingleLineRangeKt.Dsl.() -> kotlin.Unit): org.scip_code.scip.SingleLineRange = + `org.scip_code.scip`.SingleLineRangeKt.Dsl._create(this.toBuilder()).apply { block() }._build() + diff --git a/bindings/rust/src/generated/scip.rs b/bindings/rust/src/generated/scip.rs index 9d72525f..dc5bca91 100644 --- a/bindings/rust/src/generated/scip.rs +++ b/bindings/rust/src/generated/scip.rs @@ -2697,6 +2697,342 @@ impl ::protobuf::reflect::ProtobufValue for Relationship { type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage; } +/// SingleLineRange represents a half-open [start, end) range within a single line. +// @@protoc_insertion_point(message:scip.SingleLineRange) +#[derive(PartialEq,Clone,Default,Debug)] +pub struct SingleLineRange { + // message fields + // @@protoc_insertion_point(field:scip.SingleLineRange.line) + pub line: i32, + // @@protoc_insertion_point(field:scip.SingleLineRange.start_character) + pub start_character: i32, + // @@protoc_insertion_point(field:scip.SingleLineRange.end_character) + pub end_character: i32, + // special fields + // @@protoc_insertion_point(special_field:scip.SingleLineRange.special_fields) + pub special_fields: ::protobuf::SpecialFields, +} + +impl<'a> ::std::default::Default for &'a SingleLineRange { + fn default() -> &'a SingleLineRange { + ::default_instance() + } +} + +impl SingleLineRange { + pub fn new() -> SingleLineRange { + ::std::default::Default::default() + } + + fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData { + let mut fields = ::std::vec::Vec::with_capacity(3); + let mut oneofs = ::std::vec::Vec::with_capacity(0); + fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>( + "line", + |m: &SingleLineRange| { &m.line }, + |m: &mut SingleLineRange| { &mut m.line }, + )); + fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>( + "start_character", + |m: &SingleLineRange| { &m.start_character }, + |m: &mut SingleLineRange| { &mut m.start_character }, + )); + fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>( + "end_character", + |m: &SingleLineRange| { &m.end_character }, + |m: &mut SingleLineRange| { &mut m.end_character }, + )); + ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::( + "SingleLineRange", + fields, + oneofs, + ) + } +} + +impl ::protobuf::Message for SingleLineRange { + const NAME: &'static str = "SingleLineRange"; + + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> { + while let Some(tag) = is.read_raw_tag_or_eof()? { + match tag { + 8 => { + self.line = is.read_int32()?; + }, + 16 => { + self.start_character = is.read_int32()?; + }, + 24 => { + self.end_character = is.read_int32()?; + }, + tag => { + ::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u64 { + let mut my_size = 0; + if self.line != 0 { + my_size += ::protobuf::rt::int32_size(1, self.line); + } + if self.start_character != 0 { + my_size += ::protobuf::rt::int32_size(2, self.start_character); + } + if self.end_character != 0 { + my_size += ::protobuf::rt::int32_size(3, self.end_character); + } + my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields()); + self.special_fields.cached_size().set(my_size as u32); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> { + if self.line != 0 { + os.write_int32(1, self.line)?; + } + if self.start_character != 0 { + os.write_int32(2, self.start_character)?; + } + if self.end_character != 0 { + os.write_int32(3, self.end_character)?; + } + os.write_unknown_fields(self.special_fields.unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn special_fields(&self) -> &::protobuf::SpecialFields { + &self.special_fields + } + + fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields { + &mut self.special_fields + } + + fn new() -> SingleLineRange { + SingleLineRange::new() + } + + fn clear(&mut self) { + self.line = 0; + self.start_character = 0; + self.end_character = 0; + self.special_fields.clear(); + } + + fn default_instance() -> &'static SingleLineRange { + static instance: SingleLineRange = SingleLineRange { + line: 0, + start_character: 0, + end_character: 0, + special_fields: ::protobuf::SpecialFields::new(), + }; + &instance + } +} + +impl ::protobuf::MessageFull for SingleLineRange { + fn descriptor() -> ::protobuf::reflect::MessageDescriptor { + static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new(); + descriptor.get(|| file_descriptor().message_by_package_relative_name("SingleLineRange").unwrap()).clone() + } +} + +impl ::std::fmt::Display for SingleLineRange { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + ::protobuf::text_format::fmt(self, f) + } +} + +impl ::protobuf::reflect::ProtobufValue for SingleLineRange { + type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage; +} + +/// MultiLineRange represents a half-open [start, end) range spanning multiple lines. +// @@protoc_insertion_point(message:scip.MultiLineRange) +#[derive(PartialEq,Clone,Default,Debug)] +pub struct MultiLineRange { + // message fields + // @@protoc_insertion_point(field:scip.MultiLineRange.start_line) + pub start_line: i32, + // @@protoc_insertion_point(field:scip.MultiLineRange.start_character) + pub start_character: i32, + // @@protoc_insertion_point(field:scip.MultiLineRange.end_line) + pub end_line: i32, + // @@protoc_insertion_point(field:scip.MultiLineRange.end_character) + pub end_character: i32, + // special fields + // @@protoc_insertion_point(special_field:scip.MultiLineRange.special_fields) + pub special_fields: ::protobuf::SpecialFields, +} + +impl<'a> ::std::default::Default for &'a MultiLineRange { + fn default() -> &'a MultiLineRange { + ::default_instance() + } +} + +impl MultiLineRange { + pub fn new() -> MultiLineRange { + ::std::default::Default::default() + } + + fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData { + let mut fields = ::std::vec::Vec::with_capacity(4); + let mut oneofs = ::std::vec::Vec::with_capacity(0); + fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>( + "start_line", + |m: &MultiLineRange| { &m.start_line }, + |m: &mut MultiLineRange| { &mut m.start_line }, + )); + fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>( + "start_character", + |m: &MultiLineRange| { &m.start_character }, + |m: &mut MultiLineRange| { &mut m.start_character }, + )); + fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>( + "end_line", + |m: &MultiLineRange| { &m.end_line }, + |m: &mut MultiLineRange| { &mut m.end_line }, + )); + fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>( + "end_character", + |m: &MultiLineRange| { &m.end_character }, + |m: &mut MultiLineRange| { &mut m.end_character }, + )); + ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::( + "MultiLineRange", + fields, + oneofs, + ) + } +} + +impl ::protobuf::Message for MultiLineRange { + const NAME: &'static str = "MultiLineRange"; + + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> { + while let Some(tag) = is.read_raw_tag_or_eof()? { + match tag { + 8 => { + self.start_line = is.read_int32()?; + }, + 16 => { + self.start_character = is.read_int32()?; + }, + 24 => { + self.end_line = is.read_int32()?; + }, + 32 => { + self.end_character = is.read_int32()?; + }, + tag => { + ::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u64 { + let mut my_size = 0; + if self.start_line != 0 { + my_size += ::protobuf::rt::int32_size(1, self.start_line); + } + if self.start_character != 0 { + my_size += ::protobuf::rt::int32_size(2, self.start_character); + } + if self.end_line != 0 { + my_size += ::protobuf::rt::int32_size(3, self.end_line); + } + if self.end_character != 0 { + my_size += ::protobuf::rt::int32_size(4, self.end_character); + } + my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields()); + self.special_fields.cached_size().set(my_size as u32); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> { + if self.start_line != 0 { + os.write_int32(1, self.start_line)?; + } + if self.start_character != 0 { + os.write_int32(2, self.start_character)?; + } + if self.end_line != 0 { + os.write_int32(3, self.end_line)?; + } + if self.end_character != 0 { + os.write_int32(4, self.end_character)?; + } + os.write_unknown_fields(self.special_fields.unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn special_fields(&self) -> &::protobuf::SpecialFields { + &self.special_fields + } + + fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields { + &mut self.special_fields + } + + fn new() -> MultiLineRange { + MultiLineRange::new() + } + + fn clear(&mut self) { + self.start_line = 0; + self.start_character = 0; + self.end_line = 0; + self.end_character = 0; + self.special_fields.clear(); + } + + fn default_instance() -> &'static MultiLineRange { + static instance: MultiLineRange = MultiLineRange { + start_line: 0, + start_character: 0, + end_line: 0, + end_character: 0, + special_fields: ::protobuf::SpecialFields::new(), + }; + &instance + } +} + +impl ::protobuf::MessageFull for MultiLineRange { + fn descriptor() -> ::protobuf::reflect::MessageDescriptor { + static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new(); + descriptor.get(|| file_descriptor().message_by_package_relative_name("MultiLineRange").unwrap()).clone() + } +} + +impl ::std::fmt::Display for MultiLineRange { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + ::protobuf::text_format::fmt(self, f) + } +} + +impl ::protobuf::reflect::ProtobufValue for MultiLineRange { + type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage; +} + /// Occurrence associates a source position with a symbol and/or highlighting /// information. /// @@ -2706,29 +3042,18 @@ impl ::protobuf::reflect::ProtobufValue for Relationship { #[derive(PartialEq,Clone,Default,Debug)] pub struct Occurrence { // message fields - /// Half-open [start, end) range of this occurrence. Must be exactly three or four - /// elements: + /// Deprecated: Use `single_line_range` or `multi_line_range` instead. /// + /// Half-open [start, end) range. Must be exactly three or four elements: + /// - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) /// - Four elements: `[startLine, startCharacter, endLine, endCharacter]` - /// - Three elements: `[startLine, startCharacter, endCharacter]`. The end line - /// is inferred to have the same value as the start line. - /// - /// It is allowed for the range to be empty (i.e. start==end). - /// - /// Line numbers and characters are always 0-based. Make sure to increment the - /// line/character values before displaying them in an editor-like UI because - /// editors conventionally use 1-based numbers. - /// - /// The 'character' value is interpreted based on the PositionEncoding for - /// the Document. /// /// Historical note: the original draft of this schema had a `Range` message /// type with `start` and `end` fields of type `Position`, mirroring LSP. /// Benchmarks revealed that this encoding was inefficient and that we could /// reduce the total payload size of an index by 50% by using `repeated int32` - /// instead. The `repeated int32` encoding is admittedly more embarrassing to - /// work with in some programming languages but we hope the performance - /// improvements make up for it. + /// instead. However, the lack of type safety led to the introduction of + /// `single_line_range` and `multi_line_range` as typed alternatives. // @@protoc_insertion_point(field:scip.Occurrence.range) pub range: ::std::vec::Vec, /// (optional) The symbol that appears at this position. See @@ -2755,8 +3080,12 @@ pub struct Occurrence { /// (optional) Diagnostics that have been reported for this specific range. // @@protoc_insertion_point(field:scip.Occurrence.diagnostics) pub diagnostics: ::std::vec::Vec, + /// Deprecated: Use `typed_enclosing_range` instead. // @@protoc_insertion_point(field:scip.Occurrence.enclosing_range) pub enclosing_range: ::std::vec::Vec, + // message oneof groups + pub typed_range: ::std::option::Option, + pub typed_enclosing_range: ::std::option::Option, // special fields // @@protoc_insertion_point(special_field:scip.Occurrence.special_fields) pub special_fields: ::protobuf::SpecialFields, @@ -2773,14 +3102,224 @@ impl Occurrence { ::std::default::Default::default() } + // .scip.SingleLineRange single_line_range = 8; + + pub fn single_line_range(&self) -> &SingleLineRange { + match self.typed_range { + ::std::option::Option::Some(occurrence::Typed_range::SingleLineRange(ref v)) => v, + _ => ::default_instance(), + } + } + + pub fn clear_single_line_range(&mut self) { + self.typed_range = ::std::option::Option::None; + } + + pub fn has_single_line_range(&self) -> bool { + match self.typed_range { + ::std::option::Option::Some(occurrence::Typed_range::SingleLineRange(..)) => true, + _ => false, + } + } + + // Param is passed by value, moved + pub fn set_single_line_range(&mut self, v: SingleLineRange) { + self.typed_range = ::std::option::Option::Some(occurrence::Typed_range::SingleLineRange(v)) + } + + // Mutable pointer to the field. + pub fn mut_single_line_range(&mut self) -> &mut SingleLineRange { + if let ::std::option::Option::Some(occurrence::Typed_range::SingleLineRange(_)) = self.typed_range { + } else { + self.typed_range = ::std::option::Option::Some(occurrence::Typed_range::SingleLineRange(SingleLineRange::new())); + } + match self.typed_range { + ::std::option::Option::Some(occurrence::Typed_range::SingleLineRange(ref mut v)) => v, + _ => panic!(), + } + } + + // Take field + pub fn take_single_line_range(&mut self) -> SingleLineRange { + if self.has_single_line_range() { + match self.typed_range.take() { + ::std::option::Option::Some(occurrence::Typed_range::SingleLineRange(v)) => v, + _ => panic!(), + } + } else { + SingleLineRange::new() + } + } + + // .scip.MultiLineRange multi_line_range = 9; + + pub fn multi_line_range(&self) -> &MultiLineRange { + match self.typed_range { + ::std::option::Option::Some(occurrence::Typed_range::MultiLineRange(ref v)) => v, + _ => ::default_instance(), + } + } + + pub fn clear_multi_line_range(&mut self) { + self.typed_range = ::std::option::Option::None; + } + + pub fn has_multi_line_range(&self) -> bool { + match self.typed_range { + ::std::option::Option::Some(occurrence::Typed_range::MultiLineRange(..)) => true, + _ => false, + } + } + + // Param is passed by value, moved + pub fn set_multi_line_range(&mut self, v: MultiLineRange) { + self.typed_range = ::std::option::Option::Some(occurrence::Typed_range::MultiLineRange(v)) + } + + // Mutable pointer to the field. + pub fn mut_multi_line_range(&mut self) -> &mut MultiLineRange { + if let ::std::option::Option::Some(occurrence::Typed_range::MultiLineRange(_)) = self.typed_range { + } else { + self.typed_range = ::std::option::Option::Some(occurrence::Typed_range::MultiLineRange(MultiLineRange::new())); + } + match self.typed_range { + ::std::option::Option::Some(occurrence::Typed_range::MultiLineRange(ref mut v)) => v, + _ => panic!(), + } + } + + // Take field + pub fn take_multi_line_range(&mut self) -> MultiLineRange { + if self.has_multi_line_range() { + match self.typed_range.take() { + ::std::option::Option::Some(occurrence::Typed_range::MultiLineRange(v)) => v, + _ => panic!(), + } + } else { + MultiLineRange::new() + } + } + + // .scip.SingleLineRange single_line_enclosing_range = 10; + + pub fn single_line_enclosing_range(&self) -> &SingleLineRange { + match self.typed_enclosing_range { + ::std::option::Option::Some(occurrence::Typed_enclosing_range::SingleLineEnclosingRange(ref v)) => v, + _ => ::default_instance(), + } + } + + pub fn clear_single_line_enclosing_range(&mut self) { + self.typed_enclosing_range = ::std::option::Option::None; + } + + pub fn has_single_line_enclosing_range(&self) -> bool { + match self.typed_enclosing_range { + ::std::option::Option::Some(occurrence::Typed_enclosing_range::SingleLineEnclosingRange(..)) => true, + _ => false, + } + } + + // Param is passed by value, moved + pub fn set_single_line_enclosing_range(&mut self, v: SingleLineRange) { + self.typed_enclosing_range = ::std::option::Option::Some(occurrence::Typed_enclosing_range::SingleLineEnclosingRange(v)) + } + + // Mutable pointer to the field. + pub fn mut_single_line_enclosing_range(&mut self) -> &mut SingleLineRange { + if let ::std::option::Option::Some(occurrence::Typed_enclosing_range::SingleLineEnclosingRange(_)) = self.typed_enclosing_range { + } else { + self.typed_enclosing_range = ::std::option::Option::Some(occurrence::Typed_enclosing_range::SingleLineEnclosingRange(SingleLineRange::new())); + } + match self.typed_enclosing_range { + ::std::option::Option::Some(occurrence::Typed_enclosing_range::SingleLineEnclosingRange(ref mut v)) => v, + _ => panic!(), + } + } + + // Take field + pub fn take_single_line_enclosing_range(&mut self) -> SingleLineRange { + if self.has_single_line_enclosing_range() { + match self.typed_enclosing_range.take() { + ::std::option::Option::Some(occurrence::Typed_enclosing_range::SingleLineEnclosingRange(v)) => v, + _ => panic!(), + } + } else { + SingleLineRange::new() + } + } + + // .scip.MultiLineRange multi_line_enclosing_range = 11; + + pub fn multi_line_enclosing_range(&self) -> &MultiLineRange { + match self.typed_enclosing_range { + ::std::option::Option::Some(occurrence::Typed_enclosing_range::MultiLineEnclosingRange(ref v)) => v, + _ => ::default_instance(), + } + } + + pub fn clear_multi_line_enclosing_range(&mut self) { + self.typed_enclosing_range = ::std::option::Option::None; + } + + pub fn has_multi_line_enclosing_range(&self) -> bool { + match self.typed_enclosing_range { + ::std::option::Option::Some(occurrence::Typed_enclosing_range::MultiLineEnclosingRange(..)) => true, + _ => false, + } + } + + // Param is passed by value, moved + pub fn set_multi_line_enclosing_range(&mut self, v: MultiLineRange) { + self.typed_enclosing_range = ::std::option::Option::Some(occurrence::Typed_enclosing_range::MultiLineEnclosingRange(v)) + } + + // Mutable pointer to the field. + pub fn mut_multi_line_enclosing_range(&mut self) -> &mut MultiLineRange { + if let ::std::option::Option::Some(occurrence::Typed_enclosing_range::MultiLineEnclosingRange(_)) = self.typed_enclosing_range { + } else { + self.typed_enclosing_range = ::std::option::Option::Some(occurrence::Typed_enclosing_range::MultiLineEnclosingRange(MultiLineRange::new())); + } + match self.typed_enclosing_range { + ::std::option::Option::Some(occurrence::Typed_enclosing_range::MultiLineEnclosingRange(ref mut v)) => v, + _ => panic!(), + } + } + + // Take field + pub fn take_multi_line_enclosing_range(&mut self) -> MultiLineRange { + if self.has_multi_line_enclosing_range() { + match self.typed_enclosing_range.take() { + ::std::option::Option::Some(occurrence::Typed_enclosing_range::MultiLineEnclosingRange(v)) => v, + _ => panic!(), + } + } else { + MultiLineRange::new() + } + } + fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData { - let mut fields = ::std::vec::Vec::with_capacity(7); - let mut oneofs = ::std::vec::Vec::with_capacity(0); + let mut fields = ::std::vec::Vec::with_capacity(11); + let mut oneofs = ::std::vec::Vec::with_capacity(2); fields.push(::protobuf::reflect::rt::v2::make_vec_simpler_accessor::<_, _>( "range", |m: &Occurrence| { &m.range }, |m: &mut Occurrence| { &mut m.range }, )); + fields.push(::protobuf::reflect::rt::v2::make_oneof_message_has_get_mut_set_accessor::<_, SingleLineRange>( + "single_line_range", + Occurrence::has_single_line_range, + Occurrence::single_line_range, + Occurrence::mut_single_line_range, + Occurrence::set_single_line_range, + )); + fields.push(::protobuf::reflect::rt::v2::make_oneof_message_has_get_mut_set_accessor::<_, MultiLineRange>( + "multi_line_range", + Occurrence::has_multi_line_range, + Occurrence::multi_line_range, + Occurrence::mut_multi_line_range, + Occurrence::set_multi_line_range, + )); fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>( "symbol", |m: &Occurrence| { &m.symbol }, @@ -2811,6 +3350,22 @@ impl Occurrence { |m: &Occurrence| { &m.enclosing_range }, |m: &mut Occurrence| { &mut m.enclosing_range }, )); + fields.push(::protobuf::reflect::rt::v2::make_oneof_message_has_get_mut_set_accessor::<_, SingleLineRange>( + "single_line_enclosing_range", + Occurrence::has_single_line_enclosing_range, + Occurrence::single_line_enclosing_range, + Occurrence::mut_single_line_enclosing_range, + Occurrence::set_single_line_enclosing_range, + )); + fields.push(::protobuf::reflect::rt::v2::make_oneof_message_has_get_mut_set_accessor::<_, MultiLineRange>( + "multi_line_enclosing_range", + Occurrence::has_multi_line_enclosing_range, + Occurrence::multi_line_enclosing_range, + Occurrence::mut_multi_line_enclosing_range, + Occurrence::set_multi_line_enclosing_range, + )); + oneofs.push(occurrence::Typed_range::generated_oneof_descriptor_data()); + oneofs.push(occurrence::Typed_enclosing_range::generated_oneof_descriptor_data()); ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::( "Occurrence", fields, @@ -2835,6 +3390,12 @@ impl ::protobuf::Message for Occurrence { 8 => { self.range.push(is.read_int32()?); }, + 66 => { + self.typed_range = ::std::option::Option::Some(occurrence::Typed_range::SingleLineRange(is.read_message()?)); + }, + 74 => { + self.typed_range = ::std::option::Option::Some(occurrence::Typed_range::MultiLineRange(is.read_message()?)); + }, 18 => { self.symbol = is.read_string()?; }, @@ -2856,6 +3417,12 @@ impl ::protobuf::Message for Occurrence { 56 => { self.enclosing_range.push(is.read_int32()?); }, + 82 => { + self.typed_enclosing_range = ::std::option::Option::Some(occurrence::Typed_enclosing_range::SingleLineEnclosingRange(is.read_message()?)); + }, + 90 => { + self.typed_enclosing_range = ::std::option::Option::Some(occurrence::Typed_enclosing_range::MultiLineEnclosingRange(is.read_message()?)); + }, tag => { ::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?; }, @@ -2886,6 +3453,30 @@ impl ::protobuf::Message for Occurrence { my_size += 1 + ::protobuf::rt::compute_raw_varint64_size(len) + len; }; my_size += ::protobuf::rt::vec_packed_int32_size(7, &self.enclosing_range); + if let ::std::option::Option::Some(ref v) = self.typed_range { + match v { + &occurrence::Typed_range::SingleLineRange(ref v) => { + let len = v.compute_size(); + my_size += 1 + ::protobuf::rt::compute_raw_varint64_size(len) + len; + }, + &occurrence::Typed_range::MultiLineRange(ref v) => { + let len = v.compute_size(); + my_size += 1 + ::protobuf::rt::compute_raw_varint64_size(len) + len; + }, + }; + } + if let ::std::option::Option::Some(ref v) = self.typed_enclosing_range { + match v { + &occurrence::Typed_enclosing_range::SingleLineEnclosingRange(ref v) => { + let len = v.compute_size(); + my_size += 1 + ::protobuf::rt::compute_raw_varint64_size(len) + len; + }, + &occurrence::Typed_enclosing_range::MultiLineEnclosingRange(ref v) => { + let len = v.compute_size(); + my_size += 1 + ::protobuf::rt::compute_raw_varint64_size(len) + len; + }, + }; + } my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields()); self.special_fields.cached_size().set(my_size as u32); my_size @@ -2909,6 +3500,26 @@ impl ::protobuf::Message for Occurrence { ::protobuf::rt::write_message_field_with_cached_size(6, v, os)?; }; os.write_repeated_packed_int32(7, &self.enclosing_range)?; + if let ::std::option::Option::Some(ref v) = self.typed_range { + match v { + &occurrence::Typed_range::SingleLineRange(ref v) => { + ::protobuf::rt::write_message_field_with_cached_size(8, v, os)?; + }, + &occurrence::Typed_range::MultiLineRange(ref v) => { + ::protobuf::rt::write_message_field_with_cached_size(9, v, os)?; + }, + }; + } + if let ::std::option::Option::Some(ref v) = self.typed_enclosing_range { + match v { + &occurrence::Typed_enclosing_range::SingleLineEnclosingRange(ref v) => { + ::protobuf::rt::write_message_field_with_cached_size(10, v, os)?; + }, + &occurrence::Typed_enclosing_range::MultiLineEnclosingRange(ref v) => { + ::protobuf::rt::write_message_field_with_cached_size(11, v, os)?; + }, + }; + } os.write_unknown_fields(self.special_fields.unknown_fields())?; ::std::result::Result::Ok(()) } @@ -2927,12 +3538,16 @@ impl ::protobuf::Message for Occurrence { fn clear(&mut self) { self.range.clear(); + self.typed_range = ::std::option::Option::None; + self.typed_range = ::std::option::Option::None; self.symbol.clear(); self.symbol_roles = 0; self.override_documentation.clear(); self.syntax_kind = ::protobuf::EnumOrUnknown::new(SyntaxKind::UnspecifiedSyntaxKind); self.diagnostics.clear(); self.enclosing_range.clear(); + self.typed_enclosing_range = ::std::option::Option::None; + self.typed_enclosing_range = ::std::option::Option::None; self.special_fields.clear(); } @@ -2945,6 +3560,8 @@ impl ::protobuf::Message for Occurrence { syntax_kind: ::protobuf::EnumOrUnknown::from_i32(0), diagnostics: ::std::vec::Vec::new(), enclosing_range: ::std::vec::Vec::new(), + typed_range: ::std::option::Option::None, + typed_enclosing_range: ::std::option::Option::None, special_fields: ::protobuf::SpecialFields::new(), }; &instance @@ -2968,6 +3585,62 @@ impl ::protobuf::reflect::ProtobufValue for Occurrence { type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage; } +/// Nested message and enums of message `Occurrence` +pub mod occurrence { + + #[derive(Clone,PartialEq,Debug)] + #[non_exhaustive] + // @@protoc_insertion_point(oneof:scip.Occurrence.typed_range) + pub enum Typed_range { + // @@protoc_insertion_point(oneof_field:scip.Occurrence.single_line_range) + SingleLineRange(super::SingleLineRange), + // @@protoc_insertion_point(oneof_field:scip.Occurrence.multi_line_range) + MultiLineRange(super::MultiLineRange), + } + + impl ::protobuf::Oneof for Typed_range { + } + + impl ::protobuf::OneofFull for Typed_range { + fn descriptor() -> ::protobuf::reflect::OneofDescriptor { + static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::OneofDescriptor> = ::protobuf::rt::Lazy::new(); + descriptor.get(|| ::descriptor().oneof_by_name("typed_range").unwrap()).clone() + } + } + + impl Typed_range { + pub(in super) fn generated_oneof_descriptor_data() -> ::protobuf::reflect::GeneratedOneofDescriptorData { + ::protobuf::reflect::GeneratedOneofDescriptorData::new::("typed_range") + } + } + + #[derive(Clone,PartialEq,Debug)] + #[non_exhaustive] + // @@protoc_insertion_point(oneof:scip.Occurrence.typed_enclosing_range) + pub enum Typed_enclosing_range { + // @@protoc_insertion_point(oneof_field:scip.Occurrence.single_line_enclosing_range) + SingleLineEnclosingRange(super::SingleLineRange), + // @@protoc_insertion_point(oneof_field:scip.Occurrence.multi_line_enclosing_range) + MultiLineEnclosingRange(super::MultiLineRange), + } + + impl ::protobuf::Oneof for Typed_enclosing_range { + } + + impl ::protobuf::OneofFull for Typed_enclosing_range { + fn descriptor() -> ::protobuf::reflect::OneofDescriptor { + static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::OneofDescriptor> = ::protobuf::rt::Lazy::new(); + descriptor.get(|| ::descriptor().oneof_by_name("typed_enclosing_range").unwrap()).clone() + } + } + + impl Typed_enclosing_range { + pub(in super) fn generated_oneof_descriptor_data() -> ::protobuf::reflect::GeneratedOneofDescriptorData { + ::protobuf::reflect::GeneratedOneofDescriptorData::new::("typed_enclosing_range") + } + } +} + /// Represents a diagnostic, such as a compiler error or warning, which should be /// reported for a document. // @@protoc_insertion_point(message:scip.Diagnostic) @@ -4751,291 +5424,305 @@ static file_descriptor_proto_data: &'static [u8] = b"\ \x20\x01(\x08R\x0bisReference\x12+\n\x11is_implementation\x18\x03\x20\ \x01(\x08R\x10isImplementation\x12,\n\x12is_type_definition\x18\x04\x20\ \x01(\x08R\x10isTypeDefinition\x12#\n\ris_definition\x18\x05\x20\x01(\ - \x08R\x0cisDefinition\"\xa4\x02\n\nOccurrence\x12\x14\n\x05range\x18\x01\ - \x20\x03(\x05R\x05range\x12\x16\n\x06symbol\x18\x02\x20\x01(\tR\x06symbo\ - l\x12!\n\x0csymbol_roles\x18\x03\x20\x01(\x05R\x0bsymbolRoles\x125\n\x16\ - override_documentation\x18\x04\x20\x03(\tR\x15overrideDocumentation\x121\ - \n\x0bsyntax_kind\x18\x05\x20\x01(\x0e2\x10.scip.SyntaxKindR\nsyntaxKind\ - \x122\n\x0bdiagnostics\x18\x06\x20\x03(\x0b2\x10.scip.DiagnosticR\x0bdia\ - gnostics\x12'\n\x0fenclosing_range\x18\x07\x20\x03(\x05R\x0eenclosingRan\ - ge\"\xa7\x01\n\nDiagnostic\x12*\n\x08severity\x18\x01\x20\x01(\x0e2\x0e.\ - scip.SeverityR\x08severity\x12\x12\n\x04code\x18\x02\x20\x01(\tR\x04code\ - \x12\x18\n\x07message\x18\x03\x20\x01(\tR\x07message\x12\x16\n\x06source\ - \x18\x04\x20\x01(\tR\x06source\x12'\n\x04tags\x18\x05\x20\x03(\x0e2\x13.\ - scip.DiagnosticTagR\x04tags*1\n\x0fProtocolVersion\x12\x1e\n\x1aUnspecif\ - iedProtocolVersion\x10\0*@\n\x0cTextEncoding\x12\x1b\n\x17UnspecifiedTex\ - tEncoding\x10\0\x12\x08\n\x04UTF8\x10\x01\x12\t\n\x05UTF16\x10\x02*\xa4\ - \x01\n\x10PositionEncoding\x12\x1f\n\x1bUnspecifiedPositionEncoding\x10\ - \0\x12#\n\x1fUTF8CodeUnitOffsetFromLineStart\x10\x01\x12$\n\x20UTF16Code\ - UnitOffsetFromLineStart\x10\x02\x12$\n\x20UTF32CodeUnitOffsetFromLineSta\ - rt\x10\x03*\x94\x01\n\nSymbolRole\x12\x19\n\x15UnspecifiedSymbolRole\x10\ - \0\x12\x0e\n\nDefinition\x10\x01\x12\n\n\x06Import\x10\x02\x12\x0f\n\x0b\ - WriteAccess\x10\x04\x12\x0e\n\nReadAccess\x10\x08\x12\r\n\tGenerated\x10\ - \x10\x12\x08\n\x04Test\x10\x20\x12\x15\n\x11ForwardDefinition\x10@*\xea\ - \x06\n\nSyntaxKind\x12\x19\n\x15UnspecifiedSyntaxKind\x10\0\x12\x0b\n\ - \x07Comment\x10\x01\x12\x18\n\x14PunctuationDelimiter\x10\x02\x12\x16\n\ - \x12PunctuationBracket\x10\x03\x12\x0b\n\x07Keyword\x10\x04\x12\x19\n\ - \x11IdentifierKeyword\x10\x04\x1a\x02\x08\x01\x12\x16\n\x12IdentifierOpe\ - rator\x10\x05\x12\x0e\n\nIdentifier\x10\x06\x12\x15\n\x11IdentifierBuilt\ - in\x10\x07\x12\x12\n\x0eIdentifierNull\x10\x08\x12\x16\n\x12IdentifierCo\ - nstant\x10\t\x12\x1b\n\x17IdentifierMutableGlobal\x10\n\x12\x17\n\x13Ide\ - ntifierParameter\x10\x0b\x12\x13\n\x0fIdentifierLocal\x10\x0c\x12\x16\n\ - \x12IdentifierShadowed\x10\r\x12\x17\n\x13IdentifierNamespace\x10\x0e\ - \x12\x18\n\x10IdentifierModule\x10\x0e\x1a\x02\x08\x01\x12\x16\n\x12Iden\ - tifierFunction\x10\x0f\x12\x20\n\x1cIdentifierFunctionDefinition\x10\x10\ - \x12\x13\n\x0fIdentifierMacro\x10\x11\x12\x1d\n\x19IdentifierMacroDefini\ - tion\x10\x12\x12\x12\n\x0eIdentifierType\x10\x13\x12\x19\n\x15Identifier\ - BuiltinType\x10\x14\x12\x17\n\x13IdentifierAttribute\x10\x15\x12\x0f\n\ - \x0bRegexEscape\x10\x16\x12\x11\n\rRegexRepeated\x10\x17\x12\x11\n\rRege\ - xWildcard\x10\x18\x12\x12\n\x0eRegexDelimiter\x10\x19\x12\r\n\tRegexJoin\ - \x10\x1a\x12\x11\n\rStringLiteral\x10\x1b\x12\x17\n\x13StringLiteralEsca\ - pe\x10\x1c\x12\x18\n\x14StringLiteralSpecial\x10\x1d\x12\x14\n\x10String\ - LiteralKey\x10\x1e\x12\x14\n\x10CharacterLiteral\x10\x1f\x12\x12\n\x0eNu\ - mericLiteral\x10\x20\x12\x12\n\x0eBooleanLiteral\x10!\x12\x07\n\x03Tag\ - \x10\"\x12\x10\n\x0cTagAttribute\x10#\x12\x10\n\x0cTagDelimiter\x10$\x1a\ - \x02\x10\x01*V\n\x08Severity\x12\x17\n\x13UnspecifiedSeverity\x10\0\x12\ - \t\n\x05Error\x10\x01\x12\x0b\n\x07Warning\x10\x02\x12\x0f\n\x0bInformat\ - ion\x10\x03\x12\x08\n\x04Hint\x10\x04*N\n\rDiagnosticTag\x12\x1c\n\x18Un\ - specifiedDiagnosticTag\x10\0\x12\x0f\n\x0bUnnecessary\x10\x01\x12\x0e\n\ - \nDeprecated\x10\x02*\x9b\n\n\x08Language\x12\x17\n\x13UnspecifiedLangua\ - ge\x10\0\x12\x08\n\x04ABAP\x10<\x12\x08\n\x04Apex\x10`\x12\x07\n\x03APL\ - \x101\x12\x07\n\x03Ada\x10'\x12\x08\n\x04Agda\x10-\x12\x0c\n\x08AsciiDoc\ - \x10V\x12\x0c\n\x08Assembly\x10:\x12\x07\n\x03Awk\x10B\x12\x07\n\x03Bat\ - \x10D\x12\n\n\x06BibTeX\x10Q\x12\x05\n\x01C\x10\"\x12\t\n\x05COBOL\x10;\ - \x12\x07\n\x03CPP\x10#\x12\x07\n\x03CSS\x10\x1a\x12\n\n\x06CSharp\x10\ - \x01\x12\x0b\n\x07Clojure\x10\x08\x12\x10\n\x0cCoffeescript\x10\x15\x12\ - \x0e\n\nCommonLisp\x10\t\x12\x07\n\x03Coq\x10/\x12\x08\n\x04CUDA\x10a\ - \x12\x08\n\x04Dart\x10\x03\x12\n\n\x06Delphi\x109\x12\x08\n\x04Diff\x10X\ - \x12\x0e\n\nDockerfile\x10P\x12\n\n\x06Dyalog\x102\x12\n\n\x06Elixir\x10\ - \x11\x12\n\n\x06Erlang\x10\x12\x12\n\n\x06FSharp\x10*\x12\x08\n\x04Fish\ - \x10A\x12\x08\n\x04Flow\x10\x18\x12\x0b\n\x07Fortran\x108\x12\x0e\n\nGit\ - _Commit\x10[\x12\x0e\n\nGit_Config\x10Y\x12\x0e\n\nGit_Rebase\x10\\\x12\ - \x06\n\x02Go\x10!\x12\x0b\n\x07GraphQL\x10b\x12\n\n\x06Groovy\x10\x07\ - \x12\x08\n\x04HTML\x10\x1e\x12\x08\n\x04Hack\x10\x14\x12\x0e\n\nHandleba\ - rs\x10Z\x12\x0b\n\x07Haskell\x10,\x12\t\n\x05Idris\x10.\x12\x07\n\x03Ini\ - \x10H\x12\x05\n\x01J\x103\x12\x08\n\x04JSON\x10K\x12\x08\n\x04Java\x10\ - \x06\x12\x0e\n\nJavaScript\x10\x16\x12\x13\n\x0fJavaScriptReact\x10]\x12\ - \x0b\n\x07Jsonnet\x10L\x12\t\n\x05Julia\x107\x12\x0c\n\x08Justfile\x10m\ - \x12\n\n\x06Kotlin\x10\x04\x12\t\n\x05LaTeX\x10S\x12\x08\n\x04Lean\x100\ - \x12\x08\n\x04Less\x10\x1b\x12\x07\n\x03Lua\x10\x0c\x12\x08\n\x04Luau\ - \x10l\x12\x0c\n\x08Makefile\x10O\x12\x0c\n\x08Markdown\x10T\x12\n\n\x06M\ - atlab\x104\x12\n\n\x06Nickel\x10n\x12\x07\n\x03Nix\x10M\x12\t\n\x05OCaml\ - \x10)\x12\x0f\n\x0bObjective_C\x10$\x12\x11\n\rObjective_CPP\x10%\x12\n\ - \n\x06Pascal\x10c\x12\x07\n\x03PHP\x10\x13\x12\t\n\x05PLSQL\x10F\x12\x08\ - \n\x04Perl\x10\r\x12\x0e\n\nPowerShell\x10C\x12\n\n\x06Prolog\x10G\x12\ - \x0c\n\x08Protobuf\x10d\x12\n\n\x06Python\x10\x0f\x12\x05\n\x01R\x106\ - \x12\n\n\x06Racket\x10\x0b\x12\x08\n\x04Raku\x10\x0e\x12\t\n\x05Razor\ - \x10>\x12\t\n\x05Repro\x10f\x12\x08\n\x04ReST\x10U\x12\x08\n\x04Ruby\x10\ - \x10\x12\x08\n\x04Rust\x10(\x12\x07\n\x03SAS\x10=\x12\x08\n\x04SCSS\x10\ - \x1d\x12\x07\n\x03SML\x10+\x12\x07\n\x03SQL\x10E\x12\x08\n\x04Sass\x10\ - \x1c\x12\t\n\x05Scala\x10\x05\x12\n\n\x06Scheme\x10\n\x12\x0f\n\x0bShell\ - Script\x10@\x12\x0b\n\x07Skylark\x10N\x12\t\n\x05Slang\x10k\x12\x0c\n\ - \x08Solidity\x10_\x12\n\n\x06Svelte\x10j\x12\t\n\x05Swift\x10\x02\x12\ - \x07\n\x03Tcl\x10e\x12\x08\n\x04TOML\x10I\x12\x07\n\x03TeX\x10R\x12\n\n\ - \x06Thrift\x10g\x12\x0e\n\nTypeScript\x10\x17\x12\x13\n\x0fTypeScriptRea\ - ct\x10^\x12\x0b\n\x07Verilog\x10h\x12\x08\n\x04VHDL\x10i\x12\x0f\n\x0bVi\ - sualBasic\x10?\x12\x07\n\x03Vue\x10\x19\x12\x0b\n\x07Wolfram\x105\x12\ - \x07\n\x03XML\x10\x1f\x12\x07\n\x03XSL\x10\x20\x12\x08\n\x04YAML\x10J\ - \x12\x07\n\x03Zig\x10&BN\n\x12org.scip_code.scipB\tScipProtoP\x01Z+githu\ - b.com/scip-code/scip/bindings/go/scip/J\x9e\xbf\x02\n\x07\x12\x05\n\0\ - \x83\x07\x01\n\x82\x04\n\x01\x0c\x12\x03\n\0\x122\xf7\x03\x20An\x20index\ - \x20contains\x20one\x20or\x20more\x20pieces\x20of\x20information\x20abou\ - t\x20a\x20given\x20piece\x20of\n\x20source\x20code\x20or\x20software\x20\ - artifact.\x20Complementary\x20information\x20can\x20be\x20merged\n\x20to\ - gether\x20from\x20multiple\x20sources\x20to\x20provide\x20a\x20unified\ - \x20code\x20intelligence\n\x20experience.\n\n\x20Programs\x20producing\ - \x20a\x20file\x20of\x20this\x20format\x20is\x20an\x20\"indexer\"\x20and\ - \x20may\x20operate\n\x20somewhere\x20on\x20the\x20spectrum\x20between\ - \x20precision,\x20such\x20as\x20indexes\x20produced\x20by\n\x20compiler-\ - backed\x20indexers,\x20and\x20heurstics,\x20such\x20as\x20indexes\x20pro\ - duced\x20by\x20local\n\x20syntax-directed\x20analysis\x20for\x20scope\ - \x20rules.\n\n\x08\n\x01\x02\x12\x03\x0c\0\r\n\x08\n\x01\x08\x12\x03\x0e\ - \0B\n\t\n\x02\x08\x0b\x12\x03\x0e\0B\n\x08\n\x01\x08\x12\x03\x0f\0\"\n\t\ - \n\x02\x08\n\x12\x03\x0f\0\"\n\x08\n\x01\x08\x12\x03\x10\0*\n\t\n\x02\ - \x08\x08\x12\x03\x10\0*\n\x08\n\x01\x08\x12\x03\x11\0+\n\t\n\x02\x08\x01\ - \x12\x03\x11\0+\n\xd0\x03\n\x02\x04\0\x12\x04\x19\0&\x01\x1a\xc3\x03\x20\ - Index\x20represents\x20a\x20complete\x20SCIP\x20index\x20for\x20a\x20wor\ - kspace\x20this\x20is\x20rooted\x20at\x20a\n\x20single\x20directory.\x20A\ - n\x20Index\x20message\x20payload\x20can\x20have\x20a\x20large\x20memory\ - \x20footprint\n\x20and\x20it's\x20therefore\x20recommended\x20to\x20emit\ - \x20and\x20consume\x20an\x20Index\x20payload\x20one\x20field\n\x20value\ - \x20at\x20a\x20time.\x20To\x20permit\x20streaming\x20consumption\x20of\ - \x20an\x20Index\x20payload,\x20the\n\x20`metadata`\x20field\x20must\x20a\ - ppear\x20at\x20the\x20start\x20of\x20the\x20stream\x20and\x20must\x20onl\ - y\x20appear\n\x20once\x20in\x20the\x20stream.\x20Other\x20field\x20value\ - s\x20may\x20appear\x20in\x20any\x20order.\n\n\n\n\x03\x04\0\x01\x12\x03\ - \x19\x08\r\n\x0c\n\x05\x04\0\x02\0\x06\x12\x03\x1b\x02\n\n)\n\x04\x04\0\ - \x02\0\x12\x03\x1b\x02\x18\x1a\x1c\x20Metadata\x20about\x20this\x20index\ - .\n\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03\x1b\x0b\x13\n\x0c\n\x05\x04\0\ - \x02\0\x03\x12\x03\x1b\x16\x17\n\x0c\n\x05\x04\0\x02\x01\x04\x12\x03\x1d\ - \x02\n\n3\n\x04\x04\0\x02\x01\x12\x03\x1d\x02\"\x1a&\x20Documents\x20tha\ - t\x20belong\x20to\x20this\x20index.\n\n\x0c\n\x05\x04\0\x02\x01\x06\x12\ - \x03\x1d\x0b\x13\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03\x1d\x14\x1d\n\x0c\ - \n\x05\x04\0\x02\x01\x03\x12\x03\x1d\x20!\n\x0c\n\x05\x04\0\x02\x02\x04\ - \x12\x03#\x02\n\n\xf6\x03\n\x04\x04\0\x02\x02\x12\x03#\x022\x1a\xe9\x02\ - \x20(optional)\x20Symbols\x20that\x20are\x20referenced\x20from\x20this\ - \x20index\x20but\x20are\x20defined\x20in\n\x20an\x20external\x20package\ - \x20(a\x20separate\x20`Index`\x20message).\x20Leave\x20this\x20field\x20\ - empty\n\x20if\x20you\x20assume\x20the\x20external\x20package\x20will\x20\ - get\x20indexed\x20separately.\x20If\x20the\n\x20external\x20package\x20w\ - on't\x20get\x20indexed\x20for\x20some\x20reason\x20then\x20you\x20can\ - \x20use\x20this\n\x20field\x20to\x20provide\x20hover\x20documentation\ - \x20for\x20those\x20external\x20symbols.\n\"}\x20IMPORTANT:\x20When\x20a\ - dding\x20a\x20new\x20field\x20to\x20`Index`\x20here,\x20add\x20a\x20matc\ - hing\n\x20function\x20in\x20`IndexVisitor`\x20and\x20update\x20`ParseStr\ - eaming`.\n\n\x0c\n\x05\x04\0\x02\x02\x06\x12\x03#\x0b\x1c\n\x0c\n\x05\ - \x04\0\x02\x02\x01\x12\x03#\x1d-\n\x0c\n\x05\x04\0\x02\x02\x03\x12\x03#0\ - 1\n\n\n\x02\x04\x01\x12\x04(\05\x01\n\n\n\x03\x04\x01\x01\x12\x03(\x08\ - \x10\n\x0c\n\x05\x04\x01\x02\0\x06\x12\x03*\x02\x11\nN\n\x04\x04\x01\x02\ - \0\x12\x03*\x02\x1e\x1aA\x20Which\x20version\x20of\x20this\x20protocol\ - \x20was\x20used\x20to\x20generate\x20this\x20index?\n\n\x0c\n\x05\x04\ - \x01\x02\0\x01\x12\x03*\x12\x19\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03*\ - \x1c\x1d\n\x0c\n\x05\x04\x01\x02\x01\x06\x12\x03,\x02\n\nC\n\x04\x04\x01\ - \x02\x01\x12\x03,\x02\x19\x1a6\x20Information\x20about\x20the\x20tool\ - \x20that\x20produced\x20this\x20index.\n\n\x0c\n\x05\x04\x01\x02\x01\x01\ - \x12\x03,\x0b\x14\n\x0c\n\x05\x04\x01\x02\x01\x03\x12\x03,\x17\x18\n\x0c\ - \n\x05\x04\x01\x02\x02\x05\x12\x030\x02\x08\n\xa2\x01\n\x04\x04\x01\x02\ - \x02\x12\x030\x02\x1a\x1a\x94\x01\x20URI-encoded\x20absolute\x20path\x20\ - to\x20the\x20root\x20directory\x20of\x20this\x20index.\x20All\n\x20docum\ - ents\x20in\x20this\x20index\x20must\x20appear\x20in\x20a\x20subdirectory\ - \x20of\x20this\x20root\n\x20directory.\n\n\x0c\n\x05\x04\x01\x02\x02\x01\ - \x12\x030\t\x15\n\x0c\n\x05\x04\x01\x02\x02\x03\x12\x030\x18\x19\n\x0c\n\ - \x05\x04\x01\x02\x03\x06\x12\x034\x02\x0e\n\xe0\x01\n\x04\x04\x01\x02\ - \x03\x12\x034\x02*\x1a\xd2\x01\x20Text\x20encoding\x20of\x20the\x20sourc\ - e\x20files\x20on\x20disk\x20that\x20are\x20referenced\x20from\n\x20`Docu\ - ment.relative_path`.\x20This\x20value\x20is\x20unrelated\x20to\x20the\ - \x20`Document.text`\n\x20field,\x20which\x20is\x20a\x20Protobuf\x20strin\ - g\x20and\x20hence\x20must\x20be\x20UTF-8\x20encoded.\n\n\x0c\n\x05\x04\ - \x01\x02\x03\x01\x12\x034\x0f%\n\x0c\n\x05\x04\x01\x02\x03\x03\x12\x034(\ - )\n\n\n\x02\x05\0\x12\x047\09\x01\n\n\n\x03\x05\0\x01\x12\x037\x05\x14\n\ - \x0c\n\x05\x05\0\x02\0\x01\x12\x038\x02\x1c\n\x0b\n\x04\x05\0\x02\0\x12\ - \x038\x02!\n\x0c\n\x05\x05\0\x02\0\x02\x12\x038\x1f\x20\n\n\n\x02\x05\ - \x01\x12\x04;\0?\x01\n\n\n\x03\x05\x01\x01\x12\x03;\x05\x11\n\x0c\n\x05\ - \x05\x01\x02\0\x01\x12\x03<\x02\x19\n\x0b\n\x04\x05\x01\x02\0\x12\x03<\ - \x02\x1e\n\x0c\n\x05\x05\x01\x02\0\x02\x12\x03<\x1c\x1d\n\x0c\n\x05\x05\ - \x01\x02\x01\x01\x12\x03=\x02\x06\n\x0b\n\x04\x05\x01\x02\x01\x12\x03=\ - \x02\x0b\n\x0c\n\x05\x05\x01\x02\x01\x02\x12\x03=\t\n\n\x0c\n\x05\x05\ - \x01\x02\x02\x01\x12\x03>\x02\x07\n\x0b\n\x04\x05\x01\x02\x02\x12\x03>\ - \x02\x0c\n\x0c\n\x05\x05\x01\x02\x02\x02\x12\x03>\n\x0b\n\n\n\x02\x04\ - \x02\x12\x04A\0H\x01\n\n\n\x03\x04\x02\x01\x12\x03A\x08\x10\n\x0c\n\x05\ - \x04\x02\x02\0\x05\x12\x03C\x02\x08\n<\n\x04\x04\x02\x02\0\x12\x03C\x02\ - \x12\x1a/\x20Name\x20of\x20the\x20indexer\x20that\x20produced\x20this\ - \x20index.\n\n\x0c\n\x05\x04\x02\x02\0\x01\x12\x03C\t\r\n\x0c\n\x05\x04\ - \x02\x02\0\x03\x12\x03C\x10\x11\n\x0c\n\x05\x04\x02\x02\x01\x05\x12\x03E\ - \x02\x08\n?\n\x04\x04\x02\x02\x01\x12\x03E\x02\x15\x1a2\x20Version\x20of\ - \x20the\x20indexer\x20that\x20produced\x20this\x20index.\n\n\x0c\n\x05\ - \x04\x02\x02\x01\x01\x12\x03E\t\x10\n\x0c\n\x05\x04\x02\x02\x01\x03\x12\ - \x03E\x13\x14\n\x0c\n\x05\x04\x02\x02\x02\x04\x12\x03G\x02\n\nL\n\x04\ - \x04\x02\x02\x02\x12\x03G\x02\x20\x1a?\x20Command-line\x20arguments\x20t\ - hat\x20were\x20used\x20to\x20invoke\x20this\x20indexer.\n\n\x0c\n\x05\ - \x04\x02\x02\x02\x05\x12\x03G\x0b\x11\n\x0c\n\x05\x04\x02\x02\x02\x01\ - \x12\x03G\x12\x1b\n\x0c\n\x05\x04\x02\x02\x02\x03\x12\x03G\x1e\x1f\nH\n\ - \x02\x04\x03\x12\x04K\0v\x01\x1a<\x20Document\x20defines\x20the\x20metad\ - ata\x20about\x20a\x20source\x20file\x20on\x20disk.\n\n\n\n\x03\x04\x03\ - \x01\x12\x03K\x08\x10\n\x0c\n\x05\x04\x03\x02\0\x05\x12\x03P\x02\x08\n\ - \xa5\x02\n\x04\x04\x03\x02\0\x12\x03P\x02\x16\x1a\x97\x02\x20The\x20stri\ - ng\x20ID\x20for\x20the\x20programming\x20language\x20this\x20file\x20is\ - \x20written\x20in.\n\x20The\x20`Language`\x20enum\x20contains\x20the\x20\ - names\x20of\x20most\x20common\x20programming\x20languages.\n\x20This\x20\ - field\x20is\x20typed\x20as\x20a\x20string\x20to\x20permit\x20any\x20prog\ - ramming\x20language,\x20including\n\x20ones\x20that\x20are\x20not\x20spe\ - cified\x20by\x20the\x20`Language`\x20enum.\n\n\x0c\n\x05\x04\x03\x02\0\ - \x01\x12\x03P\t\x11\n\x0c\n\x05\x04\x03\x02\0\x03\x12\x03P\x14\x15\n\x0c\ - \n\x05\x04\x03\x02\x01\x05\x12\x03Z\x02\x08\n\xb5\x03\n\x04\x04\x03\x02\ - \x01\x12\x03Z\x02\x1b\x1a\xa7\x03\x20(Required)\x20Unique\x20path\x20to\ - \x20the\x20text\x20document.\n\n\x201.\x20The\x20path\x20must\x20be\x20r\ - elative\x20to\x20the\x20directory\x20supplied\x20in\x20the\x20associated\ - \n\x20\x20\x20\x20`Metadata.project_root`.\n\x202.\x20The\x20path\x20mus\ - t\x20not\x20begin\x20with\x20a\x20leading\x20'/'.\n\x203.\x20The\x20path\ - \x20must\x20point\x20to\x20a\x20regular\x20file,\x20not\x20a\x20symbolic\ - \x20link.\n\x204.\x20The\x20path\x20must\x20use\x20'/'\x20as\x20the\x20s\ - eparator,\x20including\x20on\x20Windows.\n\x205.\x20The\x20path\x20must\ - \x20be\x20canonical;\x20it\x20cannot\x20include\x20empty\x20components\ - \x20('//'),\n\x20\x20\x20\x20or\x20'.'\x20or\x20'..'.\n\n\x0c\n\x05\x04\ - \x03\x02\x01\x01\x12\x03Z\t\x16\n\x0c\n\x05\x04\x03\x02\x01\x03\x12\x03Z\ - \x19\x1a\n\x0c\n\x05\x04\x03\x02\x02\x04\x12\x03\\\x02\n\n4\n\x04\x04\ - \x03\x02\x02\x12\x03\\\x02&\x1a'\x20Occurrences\x20that\x20appear\x20in\ - \x20this\x20file.\n\n\x0c\n\x05\x04\x03\x02\x02\x06\x12\x03\\\x0b\x15\n\ - \x0c\n\x05\x04\x03\x02\x02\x01\x12\x03\\\x16!\n\x0c\n\x05\x04\x03\x02\ - \x02\x03\x12\x03\\$%\n\x0c\n\x05\x04\x03\x02\x03\x04\x12\x03b\x02\n\n\ - \xea\x01\n\x04\x04\x03\x02\x03\x12\x03b\x02)\x1a\xdc\x01\x20Symbols\x20t\ - hat\x20are\x20\"defined\"\x20within\x20this\x20document.\n\n\x20This\x20\ - should\x20include\x20symbols\x20which\x20technically\x20do\x20not\x20hav\ - e\x20any\x20definition,\n\x20but\x20have\x20a\x20reference\x20and\x20are\ - \x20defined\x20by\x20some\x20other\x20symbol\x20(see\n\x20Relationship.i\ - s_definition).\n\n\x0c\n\x05\x04\x03\x02\x03\x06\x12\x03b\x0b\x1c\n\x0c\ - \n\x05\x04\x03\x02\x03\x01\x12\x03b\x1d$\n\x0c\n\x05\x04\x03\x02\x03\x03\ - \x12\x03b'(\n\x0c\n\x05\x04\x03\x02\x04\x05\x12\x03i\x02\x08\n\x80\x03\n\ - \x04\x04\x03\x02\x04\x12\x03i\x02\x12\x1a\xf2\x02\x20(optional)\x20Text\ - \x20contents\x20of\x20this\x20document.\x20Indexers\x20are\x20not\x20exp\ - ected\x20to\n\x20include\x20the\x20text\x20by\x20default.\x20It's\x20pre\ - ferable\x20that\x20clients\x20read\x20the\x20text\n\x20contents\x20from\ - \x20the\x20file\x20system\x20by\x20resolving\x20the\x20absolute\x20path\ - \x20from\x20joining\n\x20`Index.metadata.project_root`\x20and\x20`Docume\ - nt.relative_path`.\x20This\x20field\n\x20can\x20be\x20useful\x20for\x20t\ - esting\x20or\x20when\x20working\x20with\x20virtual/in-memory\x20document\ - s.\n\n\x0c\n\x05\x04\x03\x02\x04\x01\x12\x03i\t\r\n\x0c\n\x05\x04\x03\ - \x02\x04\x03\x12\x03i\x10\x11\n\x0c\n\x05\x04\x03\x02\x05\x06\x12\x03u\ - \x02\x12\n\xe7\x03\n\x04\x04\x03\x02\x05\x12\x03u\x02)\x1a\xd9\x03\x20Sp\ - ecifies\x20the\x20encoding\x20used\x20for\x20source\x20ranges\x20in\x20t\ - his\x20Document.\n\n\x20Usually,\x20this\x20will\x20match\x20the\x20type\ - \x20used\x20to\x20index\x20the\x20string\x20type\n\x20in\x20the\x20index\ - er's\x20implementation\x20language\x20in\x20O(1)\x20time.\n\x20-\x20For\ - \x20an\x20indexer\x20implemented\x20in\x20JVM/.NET\x20language\x20or\x20\ - JavaScript/TypeScript,\n\x20\x20\x20use\x20UTF16CodeUnitOffsetFromLineSt\ - art.\n\x20-\x20For\x20an\x20indexer\x20implemented\x20in\x20Python,\n\ - \x20\x20\x20use\x20UTF32CodeUnitOffsetFromLineStart.\n\x20-\x20For\x20an\ - \x20indexer\x20implemented\x20in\x20Go,\x20Rust\x20or\x20C++,\n\x20\x20\ - \x20use\x20UTF8ByteOffsetFromLineStart.\n\n\x0c\n\x05\x04\x03\x02\x05\ - \x01\x12\x03u\x13$\n\x0c\n\x05\x04\x03\x02\x05\x03\x12\x03u'(\nQ\n\x02\ - \x05\x02\x12\x05y\0\x91\x01\x01\x1aD\x20Encoding\x20used\x20to\x20interp\ - ret\x20the\x20'character'\x20value\x20in\x20source\x20ranges.\n\n\n\n\ - \x03\x05\x02\x01\x12\x03y\x05\x15\n\x0c\n\x05\x05\x02\x02\0\x01\x12\x03|\ - \x02\x1d\n\x93\x01\n\x04\x05\x02\x02\0\x12\x03|\x02\"\x1a\x85\x01\x20Def\ - ault\x20value.\x20This\x20value\x20should\x20not\x20be\x20used\x20by\x20\ - new\x20SCIP\x20indexers\n\x20so\x20that\x20a\x20consumer\x20can\x20proce\ - ss\x20the\x20SCIP\x20index\x20without\x20ambiguity.\n\n\x0c\n\x05\x05\ - \x02\x02\0\x02\x12\x03|\x20!\n\r\n\x05\x05\x02\x02\x01\x01\x12\x04\x83\ - \x01\x02!\n\xf7\x01\n\x04\x05\x02\x02\x01\x12\x04\x83\x01\x02&\x1a\xe8\ - \x01\x20The\x20'character'\x20value\x20is\x20interpreted\x20as\x20an\x20\ - offset\x20in\x20terms\n\x20of\x20UTF-8\x20code\x20units\x20(i.e.\x20byte\ - s).\n\n\x20Example:\x20For\x20the\x20string\x20\"\xf0\x9f\x9a\x80\x20Woo\ - \"\x20in\x20UTF-8,\x20the\x20bytes\x20are\n\x20[240,\x20159,\x20154,\x20\ - 128,\x2032,\x2087,\x20111,\x20111],\x20so\x20the\x20offset\x20for\x20'W'\ - \n\x20would\x20be\x205.\n\n\r\n\x05\x05\x02\x02\x01\x02\x12\x04\x83\x01$\ - %\n\r\n\x05\x05\x02\x02\x02\x01\x12\x04\x8a\x01\x02\"\n\x82\x02\n\x04\ - \x05\x02\x02\x02\x12\x04\x8a\x01\x02'\x1a\xf3\x01\x20The\x20'character'\ - \x20value\x20is\x20interpreted\x20as\x20an\x20offset\x20in\x20terms\n\ - \x20of\x20UTF-16\x20code\x20units\x20(each\x20is\x202\x20bytes).\n\n\x20\ - Example:\x20For\x20the\x20string\x20\"\xf0\x9f\x9a\x80\x20Woo\",\x20the\ - \x20UTF-16\x20code\x20units\x20are\n\x20['\\ud83d',\x20'\\ude80',\x20'\ - \x20',\x20'W',\x20'o',\x20'o'],\x20so\x20the\x20offset\x20for\x20'W'\n\ - \x20would\x20be\x203.\n\n\r\n\x05\x05\x02\x02\x02\x02\x12\x04\x8a\x01%&\ - \n\r\n\x05\x05\x02\x02\x03\x01\x12\x04\x90\x01\x02\"\n\xf5\x01\n\x04\x05\ - \x02\x02\x03\x12\x04\x90\x01\x02'\x1a\xe6\x01\x20The\x20'character'\x20v\ - alue\x20is\x20interpreted\x20as\x20an\x20offset\x20in\x20terms\n\x20of\ - \x20UTF-32\x20code\x20units\x20(each\x20is\x204\x20bytes).\n\n\x20Exampl\ - e:\x20For\x20the\x20string\x20\"\xf0\x9f\x9a\x80\x20Woo\",\x20the\x20UTF\ - -32\x20code\x20units\x20are\n\x20['\xf0\x9f\x9a\x80',\x20'\x20',\x20'W',\ - \x20'o',\x20'o'],\x20so\x20the\x20offset\x20for\x20'W'\x20would\x20be\ - \x202.\n\n\r\n\x05\x05\x02\x02\x03\x02\x12\x04\x90\x01%&\n\xcc\x12\n\x02\ - \x04\x04\x12\x06\xbd\x01\0\xc1\x01\x01\x1a\xbd\x12\x20Symbol\x20is\x20si\ - milar\x20to\x20a\x20URI,\x20it\x20identifies\x20a\x20class,\x20method,\ - \x20or\x20a\x20local\n\x20variable.\x20`SymbolInformation`\x20contains\ - \x20rich\x20metadata\x20about\x20symbols\x20such\x20as\n\x20the\x20docst\ - ring.\n\n\x20Symbol\x20has\x20a\x20standardized\x20string\x20representat\ - ion,\x20which\x20can\x20be\x20used\n\x20interchangeably\x20with\x20`Symb\ - ol`.\x20The\x20syntax\x20for\x20Symbol\x20is\x20the\x20following:\n\x20`\ - ``\n\x20#\x20()+\x20stands\x20for\x20one\x20or\x20more\x20repetitions\ - \x20of\x20\n\x20#\x20()?\x20stands\x20for\x20zero\x20or\x20one\x20\ - occurrence\x20of\x20\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\ - \x20\x20\x20\x20\x20\x20\x20::=\x20\x20'\x20'\x20\x20'\ - \x20'\x20()+\x20|\x20'local\x20'\x20\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20::=\x20\x20'\x20'\x20\x20'\x20'\x20\n\x20\x20\ - \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20::=\x20any\x20UT\ - F-8,\x20escape\x20spaces\x20with\x20double\x20space.\x20Must\x20not\x20b\ - e\x20empty\x20nor\x20start\x20with\x20'local'\n\x20\x20\x20\x20\ + \x08R\x0cisDefinition\"s\n\x0fSingleLineRange\x12\x12\n\x04line\x18\x01\ + \x20\x01(\x05R\x04line\x12'\n\x0fstart_character\x18\x02\x20\x01(\x05R\ + \x0estartCharacter\x12#\n\rend_character\x18\x03\x20\x01(\x05R\x0cendCha\ + racter\"\x98\x01\n\x0eMultiLineRange\x12\x1d\n\nstart_line\x18\x01\x20\ + \x01(\x05R\tstartLine\x12'\n\x0fstart_character\x18\x02\x20\x01(\x05R\ + \x0estartCharacter\x12\x19\n\x08end_line\x18\x03\x20\x01(\x05R\x07endLin\ + e\x12#\n\rend_character\x18\x04\x20\x01(\x05R\x0cendCharacter\"\x88\x05\ + \n\nOccurrence\x12\x18\n\x05range\x18\x01\x20\x03(\x05R\x05rangeB\x02\ + \x18\x01\x12C\n\x11single_line_range\x18\x08\x20\x01(\x0b2\x15.scip.Sing\ + leLineRangeH\0R\x0fsingleLineRange\x12@\n\x10multi_line_range\x18\t\x20\ + \x01(\x0b2\x14.scip.MultiLineRangeH\0R\x0emultiLineRange\x12\x16\n\x06sy\ + mbol\x18\x02\x20\x01(\tR\x06symbol\x12!\n\x0csymbol_roles\x18\x03\x20\ + \x01(\x05R\x0bsymbolRoles\x125\n\x16override_documentation\x18\x04\x20\ + \x03(\tR\x15overrideDocumentation\x121\n\x0bsyntax_kind\x18\x05\x20\x01(\ + \x0e2\x10.scip.SyntaxKindR\nsyntaxKind\x122\n\x0bdiagnostics\x18\x06\x20\ + \x03(\x0b2\x10.scip.DiagnosticR\x0bdiagnostics\x12+\n\x0fenclosing_range\ + \x18\x07\x20\x03(\x05R\x0eenclosingRangeB\x02\x18\x01\x12V\n\x1bsingle_l\ + ine_enclosing_range\x18\n\x20\x01(\x0b2\x15.scip.SingleLineRangeH\x01R\ + \x18singleLineEnclosingRange\x12S\n\x1amulti_line_enclosing_range\x18\ + \x0b\x20\x01(\x0b2\x14.scip.MultiLineRangeH\x01R\x17multiLineEnclosingRa\ + ngeB\r\n\x0btyped_rangeB\x17\n\x15typed_enclosing_range\"\xa7\x01\n\nDia\ + gnostic\x12*\n\x08severity\x18\x01\x20\x01(\x0e2\x0e.scip.SeverityR\x08s\ + everity\x12\x12\n\x04code\x18\x02\x20\x01(\tR\x04code\x12\x18\n\x07messa\ + ge\x18\x03\x20\x01(\tR\x07message\x12\x16\n\x06source\x18\x04\x20\x01(\t\ + R\x06source\x12'\n\x04tags\x18\x05\x20\x03(\x0e2\x13.scip.DiagnosticTagR\ + \x04tags*1\n\x0fProtocolVersion\x12\x1e\n\x1aUnspecifiedProtocolVersion\ + \x10\0*@\n\x0cTextEncoding\x12\x1b\n\x17UnspecifiedTextEncoding\x10\0\ + \x12\x08\n\x04UTF8\x10\x01\x12\t\n\x05UTF16\x10\x02*\xa4\x01\n\x10Positi\ + onEncoding\x12\x1f\n\x1bUnspecifiedPositionEncoding\x10\0\x12#\n\x1fUTF8\ + CodeUnitOffsetFromLineStart\x10\x01\x12$\n\x20UTF16CodeUnitOffsetFromLin\ + eStart\x10\x02\x12$\n\x20UTF32CodeUnitOffsetFromLineStart\x10\x03*\x94\ + \x01\n\nSymbolRole\x12\x19\n\x15UnspecifiedSymbolRole\x10\0\x12\x0e\n\nD\ + efinition\x10\x01\x12\n\n\x06Import\x10\x02\x12\x0f\n\x0bWriteAccess\x10\ + \x04\x12\x0e\n\nReadAccess\x10\x08\x12\r\n\tGenerated\x10\x10\x12\x08\n\ + \x04Test\x10\x20\x12\x15\n\x11ForwardDefinition\x10@*\xea\x06\n\nSyntaxK\ + ind\x12\x19\n\x15UnspecifiedSyntaxKind\x10\0\x12\x0b\n\x07Comment\x10\ + \x01\x12\x18\n\x14PunctuationDelimiter\x10\x02\x12\x16\n\x12PunctuationB\ + racket\x10\x03\x12\x0b\n\x07Keyword\x10\x04\x12\x19\n\x11IdentifierKeywo\ + rd\x10\x04\x1a\x02\x08\x01\x12\x16\n\x12IdentifierOperator\x10\x05\x12\ + \x0e\n\nIdentifier\x10\x06\x12\x15\n\x11IdentifierBuiltin\x10\x07\x12\ + \x12\n\x0eIdentifierNull\x10\x08\x12\x16\n\x12IdentifierConstant\x10\t\ + \x12\x1b\n\x17IdentifierMutableGlobal\x10\n\x12\x17\n\x13IdentifierParam\ + eter\x10\x0b\x12\x13\n\x0fIdentifierLocal\x10\x0c\x12\x16\n\x12Identifie\ + rShadowed\x10\r\x12\x17\n\x13IdentifierNamespace\x10\x0e\x12\x18\n\x10Id\ + entifierModule\x10\x0e\x1a\x02\x08\x01\x12\x16\n\x12IdentifierFunction\ + \x10\x0f\x12\x20\n\x1cIdentifierFunctionDefinition\x10\x10\x12\x13\n\x0f\ + IdentifierMacro\x10\x11\x12\x1d\n\x19IdentifierMacroDefinition\x10\x12\ + \x12\x12\n\x0eIdentifierType\x10\x13\x12\x19\n\x15IdentifierBuiltinType\ + \x10\x14\x12\x17\n\x13IdentifierAttribute\x10\x15\x12\x0f\n\x0bRegexEsca\ + pe\x10\x16\x12\x11\n\rRegexRepeated\x10\x17\x12\x11\n\rRegexWildcard\x10\ + \x18\x12\x12\n\x0eRegexDelimiter\x10\x19\x12\r\n\tRegexJoin\x10\x1a\x12\ + \x11\n\rStringLiteral\x10\x1b\x12\x17\n\x13StringLiteralEscape\x10\x1c\ + \x12\x18\n\x14StringLiteralSpecial\x10\x1d\x12\x14\n\x10StringLiteralKey\ + \x10\x1e\x12\x14\n\x10CharacterLiteral\x10\x1f\x12\x12\n\x0eNumericLiter\ + al\x10\x20\x12\x12\n\x0eBooleanLiteral\x10!\x12\x07\n\x03Tag\x10\"\x12\ + \x10\n\x0cTagAttribute\x10#\x12\x10\n\x0cTagDelimiter\x10$\x1a\x02\x10\ + \x01*V\n\x08Severity\x12\x17\n\x13UnspecifiedSeverity\x10\0\x12\t\n\x05E\ + rror\x10\x01\x12\x0b\n\x07Warning\x10\x02\x12\x0f\n\x0bInformation\x10\ + \x03\x12\x08\n\x04Hint\x10\x04*N\n\rDiagnosticTag\x12\x1c\n\x18Unspecifi\ + edDiagnosticTag\x10\0\x12\x0f\n\x0bUnnecessary\x10\x01\x12\x0e\n\nDeprec\ + ated\x10\x02*\x9b\n\n\x08Language\x12\x17\n\x13UnspecifiedLanguage\x10\0\ + \x12\x08\n\x04ABAP\x10<\x12\x08\n\x04Apex\x10`\x12\x07\n\x03APL\x101\x12\ + \x07\n\x03Ada\x10'\x12\x08\n\x04Agda\x10-\x12\x0c\n\x08AsciiDoc\x10V\x12\ + \x0c\n\x08Assembly\x10:\x12\x07\n\x03Awk\x10B\x12\x07\n\x03Bat\x10D\x12\ + \n\n\x06BibTeX\x10Q\x12\x05\n\x01C\x10\"\x12\t\n\x05COBOL\x10;\x12\x07\n\ + \x03CPP\x10#\x12\x07\n\x03CSS\x10\x1a\x12\n\n\x06CSharp\x10\x01\x12\x0b\ + \n\x07Clojure\x10\x08\x12\x10\n\x0cCoffeescript\x10\x15\x12\x0e\n\nCommo\ + nLisp\x10\t\x12\x07\n\x03Coq\x10/\x12\x08\n\x04CUDA\x10a\x12\x08\n\x04Da\ + rt\x10\x03\x12\n\n\x06Delphi\x109\x12\x08\n\x04Diff\x10X\x12\x0e\n\nDock\ + erfile\x10P\x12\n\n\x06Dyalog\x102\x12\n\n\x06Elixir\x10\x11\x12\n\n\x06\ + Erlang\x10\x12\x12\n\n\x06FSharp\x10*\x12\x08\n\x04Fish\x10A\x12\x08\n\ + \x04Flow\x10\x18\x12\x0b\n\x07Fortran\x108\x12\x0e\n\nGit_Commit\x10[\ + \x12\x0e\n\nGit_Config\x10Y\x12\x0e\n\nGit_Rebase\x10\\\x12\x06\n\x02Go\ + \x10!\x12\x0b\n\x07GraphQL\x10b\x12\n\n\x06Groovy\x10\x07\x12\x08\n\x04H\ + TML\x10\x1e\x12\x08\n\x04Hack\x10\x14\x12\x0e\n\nHandlebars\x10Z\x12\x0b\ + \n\x07Haskell\x10,\x12\t\n\x05Idris\x10.\x12\x07\n\x03Ini\x10H\x12\x05\n\ + \x01J\x103\x12\x08\n\x04JSON\x10K\x12\x08\n\x04Java\x10\x06\x12\x0e\n\nJ\ + avaScript\x10\x16\x12\x13\n\x0fJavaScriptReact\x10]\x12\x0b\n\x07Jsonnet\ + \x10L\x12\t\n\x05Julia\x107\x12\x0c\n\x08Justfile\x10m\x12\n\n\x06Kotlin\ + \x10\x04\x12\t\n\x05LaTeX\x10S\x12\x08\n\x04Lean\x100\x12\x08\n\x04Less\ + \x10\x1b\x12\x07\n\x03Lua\x10\x0c\x12\x08\n\x04Luau\x10l\x12\x0c\n\x08Ma\ + kefile\x10O\x12\x0c\n\x08Markdown\x10T\x12\n\n\x06Matlab\x104\x12\n\n\ + \x06Nickel\x10n\x12\x07\n\x03Nix\x10M\x12\t\n\x05OCaml\x10)\x12\x0f\n\ + \x0bObjective_C\x10$\x12\x11\n\rObjective_CPP\x10%\x12\n\n\x06Pascal\x10\ + c\x12\x07\n\x03PHP\x10\x13\x12\t\n\x05PLSQL\x10F\x12\x08\n\x04Perl\x10\r\ + \x12\x0e\n\nPowerShell\x10C\x12\n\n\x06Prolog\x10G\x12\x0c\n\x08Protobuf\ + \x10d\x12\n\n\x06Python\x10\x0f\x12\x05\n\x01R\x106\x12\n\n\x06Racket\ + \x10\x0b\x12\x08\n\x04Raku\x10\x0e\x12\t\n\x05Razor\x10>\x12\t\n\x05Repr\ + o\x10f\x12\x08\n\x04ReST\x10U\x12\x08\n\x04Ruby\x10\x10\x12\x08\n\x04Rus\ + t\x10(\x12\x07\n\x03SAS\x10=\x12\x08\n\x04SCSS\x10\x1d\x12\x07\n\x03SML\ + \x10+\x12\x07\n\x03SQL\x10E\x12\x08\n\x04Sass\x10\x1c\x12\t\n\x05Scala\ + \x10\x05\x12\n\n\x06Scheme\x10\n\x12\x0f\n\x0bShellScript\x10@\x12\x0b\n\ + \x07Skylark\x10N\x12\t\n\x05Slang\x10k\x12\x0c\n\x08Solidity\x10_\x12\n\ + \n\x06Svelte\x10j\x12\t\n\x05Swift\x10\x02\x12\x07\n\x03Tcl\x10e\x12\x08\ + \n\x04TOML\x10I\x12\x07\n\x03TeX\x10R\x12\n\n\x06Thrift\x10g\x12\x0e\n\n\ + TypeScript\x10\x17\x12\x13\n\x0fTypeScriptReact\x10^\x12\x0b\n\x07Verilo\ + g\x10h\x12\x08\n\x04VHDL\x10i\x12\x0f\n\x0bVisualBasic\x10?\x12\x07\n\ + \x03Vue\x10\x19\x12\x0b\n\x07Wolfram\x105\x12\x07\n\x03XML\x10\x1f\x12\ + \x07\n\x03XSL\x10\x20\x12\x08\n\x04YAML\x10J\x12\x07\n\x03Zig\x10&BN\n\ + \x12org.scip_code.scipB\tScipProtoP\x01Z+github.com/scip-code/scip/bindi\ + ngs/go/scip/J\xa7\xc7\x02\n\x07\x12\x05\n\0\x9c\x07\x01\n\x82\x04\n\x01\ + \x0c\x12\x03\n\0\x122\xf7\x03\x20An\x20index\x20contains\x20one\x20or\ + \x20more\x20pieces\x20of\x20information\x20about\x20a\x20given\x20piece\ + \x20of\n\x20source\x20code\x20or\x20software\x20artifact.\x20Complementa\ + ry\x20information\x20can\x20be\x20merged\n\x20together\x20from\x20multip\ + le\x20sources\x20to\x20provide\x20a\x20unified\x20code\x20intelligence\n\ + \x20experience.\n\n\x20Programs\x20producing\x20a\x20file\x20of\x20this\ + \x20format\x20is\x20an\x20\"indexer\"\x20and\x20may\x20operate\n\x20some\ + where\x20on\x20the\x20spectrum\x20between\x20precision,\x20such\x20as\ + \x20indexes\x20produced\x20by\n\x20compiler-backed\x20indexers,\x20and\ + \x20heurstics,\x20such\x20as\x20indexes\x20produced\x20by\x20local\n\x20\ + syntax-directed\x20analysis\x20for\x20scope\x20rules.\n\n\x08\n\x01\x02\ + \x12\x03\x0c\0\r\n\x08\n\x01\x08\x12\x03\x0e\0B\n\t\n\x02\x08\x0b\x12\ + \x03\x0e\0B\n\x08\n\x01\x08\x12\x03\x0f\0\"\n\t\n\x02\x08\n\x12\x03\x0f\ + \0\"\n\x08\n\x01\x08\x12\x03\x10\0*\n\t\n\x02\x08\x08\x12\x03\x10\0*\n\ + \x08\n\x01\x08\x12\x03\x11\0+\n\t\n\x02\x08\x01\x12\x03\x11\0+\n\xd0\x03\ + \n\x02\x04\0\x12\x04\x19\0&\x01\x1a\xc3\x03\x20Index\x20represents\x20a\ + \x20complete\x20SCIP\x20index\x20for\x20a\x20workspace\x20this\x20is\x20\ + rooted\x20at\x20a\n\x20single\x20directory.\x20An\x20Index\x20message\ + \x20payload\x20can\x20have\x20a\x20large\x20memory\x20footprint\n\x20and\ + \x20it's\x20therefore\x20recommended\x20to\x20emit\x20and\x20consume\x20\ + an\x20Index\x20payload\x20one\x20field\n\x20value\x20at\x20a\x20time.\ + \x20To\x20permit\x20streaming\x20consumption\x20of\x20an\x20Index\x20pay\ + load,\x20the\n\x20`metadata`\x20field\x20must\x20appear\x20at\x20the\x20\ + start\x20of\x20the\x20stream\x20and\x20must\x20only\x20appear\n\x20once\ + \x20in\x20the\x20stream.\x20Other\x20field\x20values\x20may\x20appear\ + \x20in\x20any\x20order.\n\n\n\n\x03\x04\0\x01\x12\x03\x19\x08\r\n\x0c\n\ + \x05\x04\0\x02\0\x06\x12\x03\x1b\x02\n\n)\n\x04\x04\0\x02\0\x12\x03\x1b\ + \x02\x18\x1a\x1c\x20Metadata\x20about\x20this\x20index.\n\n\x0c\n\x05\ + \x04\0\x02\0\x01\x12\x03\x1b\x0b\x13\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\ + \x1b\x16\x17\n\x0c\n\x05\x04\0\x02\x01\x04\x12\x03\x1d\x02\n\n3\n\x04\ + \x04\0\x02\x01\x12\x03\x1d\x02\"\x1a&\x20Documents\x20that\x20belong\x20\ + to\x20this\x20index.\n\n\x0c\n\x05\x04\0\x02\x01\x06\x12\x03\x1d\x0b\x13\ + \n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03\x1d\x14\x1d\n\x0c\n\x05\x04\0\x02\ + \x01\x03\x12\x03\x1d\x20!\n\x0c\n\x05\x04\0\x02\x02\x04\x12\x03#\x02\n\n\ + \xf6\x03\n\x04\x04\0\x02\x02\x12\x03#\x022\x1a\xe9\x02\x20(optional)\x20\ + Symbols\x20that\x20are\x20referenced\x20from\x20this\x20index\x20but\x20\ + are\x20defined\x20in\n\x20an\x20external\x20package\x20(a\x20separate\ + \x20`Index`\x20message).\x20Leave\x20this\x20field\x20empty\n\x20if\x20y\ + ou\x20assume\x20the\x20external\x20package\x20will\x20get\x20indexed\x20\ + separately.\x20If\x20the\n\x20external\x20package\x20won't\x20get\x20ind\ + exed\x20for\x20some\x20reason\x20then\x20you\x20can\x20use\x20this\n\x20\ + field\x20to\x20provide\x20hover\x20documentation\x20for\x20those\x20exte\ + rnal\x20symbols.\n\"}\x20IMPORTANT:\x20When\x20adding\x20a\x20new\x20fie\ + ld\x20to\x20`Index`\x20here,\x20add\x20a\x20matching\n\x20function\x20in\ + \x20`IndexVisitor`\x20and\x20update\x20`ParseStreaming`.\n\n\x0c\n\x05\ + \x04\0\x02\x02\x06\x12\x03#\x0b\x1c\n\x0c\n\x05\x04\0\x02\x02\x01\x12\ + \x03#\x1d-\n\x0c\n\x05\x04\0\x02\x02\x03\x12\x03#01\n\n\n\x02\x04\x01\ + \x12\x04(\05\x01\n\n\n\x03\x04\x01\x01\x12\x03(\x08\x10\n\x0c\n\x05\x04\ + \x01\x02\0\x06\x12\x03*\x02\x11\nN\n\x04\x04\x01\x02\0\x12\x03*\x02\x1e\ + \x1aA\x20Which\x20version\x20of\x20this\x20protocol\x20was\x20used\x20to\ + \x20generate\x20this\x20index?\n\n\x0c\n\x05\x04\x01\x02\0\x01\x12\x03*\ + \x12\x19\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03*\x1c\x1d\n\x0c\n\x05\x04\ + \x01\x02\x01\x06\x12\x03,\x02\n\nC\n\x04\x04\x01\x02\x01\x12\x03,\x02\ + \x19\x1a6\x20Information\x20about\x20the\x20tool\x20that\x20produced\x20\ + this\x20index.\n\n\x0c\n\x05\x04\x01\x02\x01\x01\x12\x03,\x0b\x14\n\x0c\ + \n\x05\x04\x01\x02\x01\x03\x12\x03,\x17\x18\n\x0c\n\x05\x04\x01\x02\x02\ + \x05\x12\x030\x02\x08\n\xa2\x01\n\x04\x04\x01\x02\x02\x12\x030\x02\x1a\ + \x1a\x94\x01\x20URI-encoded\x20absolute\x20path\x20to\x20the\x20root\x20\ + directory\x20of\x20this\x20index.\x20All\n\x20documents\x20in\x20this\ + \x20index\x20must\x20appear\x20in\x20a\x20subdirectory\x20of\x20this\x20\ + root\n\x20directory.\n\n\x0c\n\x05\x04\x01\x02\x02\x01\x12\x030\t\x15\n\ + \x0c\n\x05\x04\x01\x02\x02\x03\x12\x030\x18\x19\n\x0c\n\x05\x04\x01\x02\ + \x03\x06\x12\x034\x02\x0e\n\xe0\x01\n\x04\x04\x01\x02\x03\x12\x034\x02*\ + \x1a\xd2\x01\x20Text\x20encoding\x20of\x20the\x20source\x20files\x20on\ + \x20disk\x20that\x20are\x20referenced\x20from\n\x20`Document.relative_pa\ + th`.\x20This\x20value\x20is\x20unrelated\x20to\x20the\x20`Document.text`\ + \n\x20field,\x20which\x20is\x20a\x20Protobuf\x20string\x20and\x20hence\ + \x20must\x20be\x20UTF-8\x20encoded.\n\n\x0c\n\x05\x04\x01\x02\x03\x01\ + \x12\x034\x0f%\n\x0c\n\x05\x04\x01\x02\x03\x03\x12\x034()\n\n\n\x02\x05\ + \0\x12\x047\09\x01\n\n\n\x03\x05\0\x01\x12\x037\x05\x14\n\x0c\n\x05\x05\ + \0\x02\0\x01\x12\x038\x02\x1c\n\x0b\n\x04\x05\0\x02\0\x12\x038\x02!\n\ + \x0c\n\x05\x05\0\x02\0\x02\x12\x038\x1f\x20\n\n\n\x02\x05\x01\x12\x04;\0\ + ?\x01\n\n\n\x03\x05\x01\x01\x12\x03;\x05\x11\n\x0c\n\x05\x05\x01\x02\0\ + \x01\x12\x03<\x02\x19\n\x0b\n\x04\x05\x01\x02\0\x12\x03<\x02\x1e\n\x0c\n\ + \x05\x05\x01\x02\0\x02\x12\x03<\x1c\x1d\n\x0c\n\x05\x05\x01\x02\x01\x01\ + \x12\x03=\x02\x06\n\x0b\n\x04\x05\x01\x02\x01\x12\x03=\x02\x0b\n\x0c\n\ + \x05\x05\x01\x02\x01\x02\x12\x03=\t\n\n\x0c\n\x05\x05\x01\x02\x02\x01\ + \x12\x03>\x02\x07\n\x0b\n\x04\x05\x01\x02\x02\x12\x03>\x02\x0c\n\x0c\n\ + \x05\x05\x01\x02\x02\x02\x12\x03>\n\x0b\n\n\n\x02\x04\x02\x12\x04A\0H\ + \x01\n\n\n\x03\x04\x02\x01\x12\x03A\x08\x10\n\x0c\n\x05\x04\x02\x02\0\ + \x05\x12\x03C\x02\x08\n<\n\x04\x04\x02\x02\0\x12\x03C\x02\x12\x1a/\x20Na\ + me\x20of\x20the\x20indexer\x20that\x20produced\x20this\x20index.\n\n\x0c\ + \n\x05\x04\x02\x02\0\x01\x12\x03C\t\r\n\x0c\n\x05\x04\x02\x02\0\x03\x12\ + \x03C\x10\x11\n\x0c\n\x05\x04\x02\x02\x01\x05\x12\x03E\x02\x08\n?\n\x04\ + \x04\x02\x02\x01\x12\x03E\x02\x15\x1a2\x20Version\x20of\x20the\x20indexe\ + r\x20that\x20produced\x20this\x20index.\n\n\x0c\n\x05\x04\x02\x02\x01\ + \x01\x12\x03E\t\x10\n\x0c\n\x05\x04\x02\x02\x01\x03\x12\x03E\x13\x14\n\ + \x0c\n\x05\x04\x02\x02\x02\x04\x12\x03G\x02\n\nL\n\x04\x04\x02\x02\x02\ + \x12\x03G\x02\x20\x1a?\x20Command-line\x20arguments\x20that\x20were\x20u\ + sed\x20to\x20invoke\x20this\x20indexer.\n\n\x0c\n\x05\x04\x02\x02\x02\ + \x05\x12\x03G\x0b\x11\n\x0c\n\x05\x04\x02\x02\x02\x01\x12\x03G\x12\x1b\n\ + \x0c\n\x05\x04\x02\x02\x02\x03\x12\x03G\x1e\x1f\nH\n\x02\x04\x03\x12\x04\ + K\0v\x01\x1a<\x20Document\x20defines\x20the\x20metadata\x20about\x20a\ + \x20source\x20file\x20on\x20disk.\n\n\n\n\x03\x04\x03\x01\x12\x03K\x08\ + \x10\n\x0c\n\x05\x04\x03\x02\0\x05\x12\x03P\x02\x08\n\xa5\x02\n\x04\x04\ + \x03\x02\0\x12\x03P\x02\x16\x1a\x97\x02\x20The\x20string\x20ID\x20for\ + \x20the\x20programming\x20language\x20this\x20file\x20is\x20written\x20i\ + n.\n\x20The\x20`Language`\x20enum\x20contains\x20the\x20names\x20of\x20m\ + ost\x20common\x20programming\x20languages.\n\x20This\x20field\x20is\x20t\ + yped\x20as\x20a\x20string\x20to\x20permit\x20any\x20programming\x20langu\ + age,\x20including\n\x20ones\x20that\x20are\x20not\x20specified\x20by\x20\ + the\x20`Language`\x20enum.\n\n\x0c\n\x05\x04\x03\x02\0\x01\x12\x03P\t\ + \x11\n\x0c\n\x05\x04\x03\x02\0\x03\x12\x03P\x14\x15\n\x0c\n\x05\x04\x03\ + \x02\x01\x05\x12\x03Z\x02\x08\n\xb5\x03\n\x04\x04\x03\x02\x01\x12\x03Z\ + \x02\x1b\x1a\xa7\x03\x20(Required)\x20Unique\x20path\x20to\x20the\x20tex\ + t\x20document.\n\n\x201.\x20The\x20path\x20must\x20be\x20relative\x20to\ + \x20the\x20directory\x20supplied\x20in\x20the\x20associated\n\x20\x20\ + \x20\x20`Metadata.project_root`.\n\x202.\x20The\x20path\x20must\x20not\ + \x20begin\x20with\x20a\x20leading\x20'/'.\n\x203.\x20The\x20path\x20must\ + \x20point\x20to\x20a\x20regular\x20file,\x20not\x20a\x20symbolic\x20link\ + .\n\x204.\x20The\x20path\x20must\x20use\x20'/'\x20as\x20the\x20separator\ + ,\x20including\x20on\x20Windows.\n\x205.\x20The\x20path\x20must\x20be\ + \x20canonical;\x20it\x20cannot\x20include\x20empty\x20components\x20('//\ + '),\n\x20\x20\x20\x20or\x20'.'\x20or\x20'..'.\n\n\x0c\n\x05\x04\x03\x02\ + \x01\x01\x12\x03Z\t\x16\n\x0c\n\x05\x04\x03\x02\x01\x03\x12\x03Z\x19\x1a\ + \n\x0c\n\x05\x04\x03\x02\x02\x04\x12\x03\\\x02\n\n4\n\x04\x04\x03\x02\ + \x02\x12\x03\\\x02&\x1a'\x20Occurrences\x20that\x20appear\x20in\x20this\ + \x20file.\n\n\x0c\n\x05\x04\x03\x02\x02\x06\x12\x03\\\x0b\x15\n\x0c\n\ + \x05\x04\x03\x02\x02\x01\x12\x03\\\x16!\n\x0c\n\x05\x04\x03\x02\x02\x03\ + \x12\x03\\$%\n\x0c\n\x05\x04\x03\x02\x03\x04\x12\x03b\x02\n\n\xea\x01\n\ + \x04\x04\x03\x02\x03\x12\x03b\x02)\x1a\xdc\x01\x20Symbols\x20that\x20are\ + \x20\"defined\"\x20within\x20this\x20document.\n\n\x20This\x20should\x20\ + include\x20symbols\x20which\x20technically\x20do\x20not\x20have\x20any\ + \x20definition,\n\x20but\x20have\x20a\x20reference\x20and\x20are\x20defi\ + ned\x20by\x20some\x20other\x20symbol\x20(see\n\x20Relationship.is_defini\ + tion).\n\n\x0c\n\x05\x04\x03\x02\x03\x06\x12\x03b\x0b\x1c\n\x0c\n\x05\ + \x04\x03\x02\x03\x01\x12\x03b\x1d$\n\x0c\n\x05\x04\x03\x02\x03\x03\x12\ + \x03b'(\n\x0c\n\x05\x04\x03\x02\x04\x05\x12\x03i\x02\x08\n\x80\x03\n\x04\ + \x04\x03\x02\x04\x12\x03i\x02\x12\x1a\xf2\x02\x20(optional)\x20Text\x20c\ + ontents\x20of\x20this\x20document.\x20Indexers\x20are\x20not\x20expected\ + \x20to\n\x20include\x20the\x20text\x20by\x20default.\x20It's\x20preferab\ + le\x20that\x20clients\x20read\x20the\x20text\n\x20contents\x20from\x20th\ + e\x20file\x20system\x20by\x20resolving\x20the\x20absolute\x20path\x20fro\ + m\x20joining\n\x20`Index.metadata.project_root`\x20and\x20`Document.rela\ + tive_path`.\x20This\x20field\n\x20can\x20be\x20useful\x20for\x20testing\ + \x20or\x20when\x20working\x20with\x20virtual/in-memory\x20documents.\n\n\ + \x0c\n\x05\x04\x03\x02\x04\x01\x12\x03i\t\r\n\x0c\n\x05\x04\x03\x02\x04\ + \x03\x12\x03i\x10\x11\n\x0c\n\x05\x04\x03\x02\x05\x06\x12\x03u\x02\x12\n\ + \xe7\x03\n\x04\x04\x03\x02\x05\x12\x03u\x02)\x1a\xd9\x03\x20Specifies\ + \x20the\x20encoding\x20used\x20for\x20source\x20ranges\x20in\x20this\x20\ + Document.\n\n\x20Usually,\x20this\x20will\x20match\x20the\x20type\x20use\ + d\x20to\x20index\x20the\x20string\x20type\n\x20in\x20the\x20indexer's\ + \x20implementation\x20language\x20in\x20O(1)\x20time.\n\x20-\x20For\x20a\ + n\x20indexer\x20implemented\x20in\x20JVM/.NET\x20language\x20or\x20JavaS\ + cript/TypeScript,\n\x20\x20\x20use\x20UTF16CodeUnitOffsetFromLineStart.\ + \n\x20-\x20For\x20an\x20indexer\x20implemented\x20in\x20Python,\n\x20\ + \x20\x20use\x20UTF32CodeUnitOffsetFromLineStart.\n\x20-\x20For\x20an\x20\ + indexer\x20implemented\x20in\x20Go,\x20Rust\x20or\x20C++,\n\x20\x20\x20u\ + se\x20UTF8ByteOffsetFromLineStart.\n\n\x0c\n\x05\x04\x03\x02\x05\x01\x12\ + \x03u\x13$\n\x0c\n\x05\x04\x03\x02\x05\x03\x12\x03u'(\nQ\n\x02\x05\x02\ + \x12\x05y\0\x91\x01\x01\x1aD\x20Encoding\x20used\x20to\x20interpret\x20t\ + he\x20'character'\x20value\x20in\x20source\x20ranges.\n\n\n\n\x03\x05\ + \x02\x01\x12\x03y\x05\x15\n\x0c\n\x05\x05\x02\x02\0\x01\x12\x03|\x02\x1d\ + \n\x93\x01\n\x04\x05\x02\x02\0\x12\x03|\x02\"\x1a\x85\x01\x20Default\x20\ + value.\x20This\x20value\x20should\x20not\x20be\x20used\x20by\x20new\x20S\ + CIP\x20indexers\n\x20so\x20that\x20a\x20consumer\x20can\x20process\x20th\ + e\x20SCIP\x20index\x20without\x20ambiguity.\n\n\x0c\n\x05\x05\x02\x02\0\ + \x02\x12\x03|\x20!\n\r\n\x05\x05\x02\x02\x01\x01\x12\x04\x83\x01\x02!\n\ + \xf7\x01\n\x04\x05\x02\x02\x01\x12\x04\x83\x01\x02&\x1a\xe8\x01\x20The\ + \x20'character'\x20value\x20is\x20interpreted\x20as\x20an\x20offset\x20i\ + n\x20terms\n\x20of\x20UTF-8\x20code\x20units\x20(i.e.\x20bytes).\n\n\x20\ + Example:\x20For\x20the\x20string\x20\"\xf0\x9f\x9a\x80\x20Woo\"\x20in\ + \x20UTF-8,\x20the\x20bytes\x20are\n\x20[240,\x20159,\x20154,\x20128,\x20\ + 32,\x2087,\x20111,\x20111],\x20so\x20the\x20offset\x20for\x20'W'\n\x20wo\ + uld\x20be\x205.\n\n\r\n\x05\x05\x02\x02\x01\x02\x12\x04\x83\x01$%\n\r\n\ + \x05\x05\x02\x02\x02\x01\x12\x04\x8a\x01\x02\"\n\x82\x02\n\x04\x05\x02\ + \x02\x02\x12\x04\x8a\x01\x02'\x1a\xf3\x01\x20The\x20'character'\x20value\ + \x20is\x20interpreted\x20as\x20an\x20offset\x20in\x20terms\n\x20of\x20UT\ + F-16\x20code\x20units\x20(each\x20is\x202\x20bytes).\n\n\x20Example:\x20\ + For\x20the\x20string\x20\"\xf0\x9f\x9a\x80\x20Woo\",\x20the\x20UTF-16\ + \x20code\x20units\x20are\n\x20['\\ud83d',\x20'\\ude80',\x20'\x20',\x20'W\ + ',\x20'o',\x20'o'],\x20so\x20the\x20offset\x20for\x20'W'\n\x20would\x20b\ + e\x203.\n\n\r\n\x05\x05\x02\x02\x02\x02\x12\x04\x8a\x01%&\n\r\n\x05\x05\ + \x02\x02\x03\x01\x12\x04\x90\x01\x02\"\n\xf5\x01\n\x04\x05\x02\x02\x03\ + \x12\x04\x90\x01\x02'\x1a\xe6\x01\x20The\x20'character'\x20value\x20is\ + \x20interpreted\x20as\x20an\x20offset\x20in\x20terms\n\x20of\x20UTF-32\ + \x20code\x20units\x20(each\x20is\x204\x20bytes).\n\n\x20Example:\x20For\ + \x20the\x20string\x20\"\xf0\x9f\x9a\x80\x20Woo\",\x20the\x20UTF-32\x20co\ + de\x20units\x20are\n\x20['\xf0\x9f\x9a\x80',\x20'\x20',\x20'W',\x20'o',\ + \x20'o'],\x20so\x20the\x20offset\x20for\x20'W'\x20would\x20be\x202.\n\n\ + \r\n\x05\x05\x02\x02\x03\x02\x12\x04\x90\x01%&\n\xcc\x12\n\x02\x04\x04\ + \x12\x06\xbd\x01\0\xc1\x01\x01\x1a\xbd\x12\x20Symbol\x20is\x20similar\ + \x20to\x20a\x20URI,\x20it\x20identifies\x20a\x20class,\x20method,\x20or\ + \x20a\x20local\n\x20variable.\x20`SymbolInformation`\x20contains\x20rich\ + \x20metadata\x20about\x20symbols\x20such\x20as\n\x20the\x20docstring.\n\ + \n\x20Symbol\x20has\x20a\x20standardized\x20string\x20representation,\ + \x20which\x20can\x20be\x20used\n\x20interchangeably\x20with\x20`Symbol`.\ + \x20The\x20syntax\x20for\x20Symbol\x20is\x20the\x20following:\n\x20```\n\ + \x20#\x20()+\x20stands\x20for\x20one\x20or\x20more\x20repetitions\x20\ + of\x20\n\x20#\x20()?\x20stands\x20for\x20zero\x20or\x20one\x20occu\ + rrence\x20of\x20\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ + \x20\x20\x20\x20\x20\x20::=\x20\x20'\x20'\x20\x20'\x20'\ + \x20()+\x20|\x20'local\x20'\x20\n\x20\x20\ + \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20::=\x20\x20\ + '\x20'\x20\x20'\x20'\x20\n\x20\x20\x20\ + \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20::=\x20any\x20UTF-8,\ + \x20escape\x20spaces\x20with\x20double\x20space.\x20Must\x20not\x20be\ + \x20empty\x20nor\x20start\x20with\x20'local'\n\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20::=\x20any\x20UTF-8,\x20esca\ pe\x20spaces\x20with\x20double\x20space.\x20Use\x20the\x20placeholder\ \x20'.'\x20to\x20indicate\x20an\x20empty\x20value\n\x20\ @@ -5765,84 +6452,125 @@ static file_descriptor_proto_data: &'static [u8] = b"\ name\x20in\x20XML-like\x20tags\n\n\r\n\x05\x05\x04\x02%\x02\x12\x04\xfd\ \x04\x11\x13\n\r\n\x05\x05\x04\x02&\x01\x12\x04\xff\x04\x02\x0e\n,\n\x04\ \x05\x04\x02&\x12\x04\xff\x04\x02\x14\x1a\x1e\x20Delimiters\x20for\x20XM\ - L-like\x20tags\n\n\r\n\x05\x05\x04\x02&\x02\x12\x04\xff\x04\x11\x13\n\ - \xf9\x01\n\x02\x04\n\x12\x06\x87\x05\0\xe8\x05\x01\x1a\xea\x01\x20Occurr\ - ence\x20associates\x20a\x20source\x20position\x20with\x20a\x20symbol\x20\ - and/or\x20highlighting\n\x20information.\n\n\x20If\x20possible,\x20index\ - ers\x20should\x20try\x20to\x20bundle\x20logically\x20related\x20informat\ - ion\n\x20across\x20occurrences\x20into\x20a\x20single\x20occurrence\x20t\ - o\x20reduce\x20payload\x20sizes.\n\n\x0b\n\x03\x04\n\x01\x12\x04\x87\x05\ - \x08\x12\n\r\n\x05\x04\n\x02\0\x04\x12\x04\x9f\x05\x02\n\n\xe8\x08\n\x04\ - \x04\n\x02\0\x12\x04\x9f\x05\x02\x1b\x1a\xd9\x08\x20Half-open\x20[start,\ - \x20end)\x20range\x20of\x20this\x20occurrence.\x20Must\x20be\x20exactly\ - \x20three\x20or\x20four\n\x20elements:\n\n\x20-\x20Four\x20elements:\x20\ - `[startLine,\x20startCharacter,\x20endLine,\x20endCharacter]`\n\x20-\x20\ - Three\x20elements:\x20`[startLine,\x20startCharacter,\x20endCharacter]`.\ - \x20The\x20end\x20line\n\x20\x20\x20is\x20inferred\x20to\x20have\x20the\ - \x20same\x20value\x20as\x20the\x20start\x20line.\n\n\x20It\x20is\x20allo\ - wed\x20for\x20the\x20range\x20to\x20be\x20empty\x20(i.e.\x20start==end).\ - \n\n\x20Line\x20numbers\x20and\x20characters\x20are\x20always\x200-based\ - .\x20Make\x20sure\x20to\x20increment\x20the\n\x20line/character\x20value\ - s\x20before\x20displaying\x20them\x20in\x20an\x20editor-like\x20UI\x20be\ - cause\n\x20editors\x20conventionally\x20use\x201-based\x20numbers.\n\n\ - \x20The\x20'character'\x20value\x20is\x20interpreted\x20based\x20on\x20t\ - he\x20PositionEncoding\x20for\n\x20the\x20Document.\n\n\x20Historical\ + L-like\x20tags\n\n\r\n\x05\x05\x04\x02&\x02\x12\x04\xff\x04\x11\x13\n_\n\ + \x02\x04\n\x12\x06\x83\x05\0\x87\x05\x01\x1aQ\x20SingleLineRange\x20repr\ + esents\x20a\x20half-open\x20[start,\x20end)\x20range\x20within\x20a\x20s\ + ingle\x20line.\n\n\x0b\n\x03\x04\n\x01\x12\x04\x83\x05\x08\x17\n\r\n\x05\ + \x04\n\x02\0\x05\x12\x04\x84\x05\x02\x07\n\x0c\n\x04\x04\n\x02\0\x12\x04\ + \x84\x05\x02\x11\n\r\n\x05\x04\n\x02\0\x01\x12\x04\x84\x05\x08\x0c\n\r\n\ + \x05\x04\n\x02\0\x03\x12\x04\x84\x05\x0f\x10\n\r\n\x05\x04\n\x02\x01\x05\ + \x12\x04\x85\x05\x02\x07\n\x0c\n\x04\x04\n\x02\x01\x12\x04\x85\x05\x02\ + \x1c\n\r\n\x05\x04\n\x02\x01\x01\x12\x04\x85\x05\x08\x17\n\r\n\x05\x04\n\ + \x02\x01\x03\x12\x04\x85\x05\x1a\x1b\n\r\n\x05\x04\n\x02\x02\x05\x12\x04\ + \x86\x05\x02\x07\n\x0c\n\x04\x04\n\x02\x02\x12\x04\x86\x05\x02\x1a\n\r\n\ + \x05\x04\n\x02\x02\x01\x12\x04\x86\x05\x08\x15\n\r\n\x05\x04\n\x02\x02\ + \x03\x12\x04\x86\x05\x18\x19\na\n\x02\x04\x0b\x12\x06\x8a\x05\0\x8f\x05\ + \x01\x1aS\x20MultiLineRange\x20represents\x20a\x20half-open\x20[start,\ + \x20end)\x20range\x20spanning\x20multiple\x20lines.\n\n\x0b\n\x03\x04\ + \x0b\x01\x12\x04\x8a\x05\x08\x16\n\r\n\x05\x04\x0b\x02\0\x05\x12\x04\x8b\ + \x05\x02\x07\n\x0c\n\x04\x04\x0b\x02\0\x12\x04\x8b\x05\x02\x17\n\r\n\x05\ + \x04\x0b\x02\0\x01\x12\x04\x8b\x05\x08\x12\n\r\n\x05\x04\x0b\x02\0\x03\ + \x12\x04\x8b\x05\x15\x16\n\r\n\x05\x04\x0b\x02\x01\x05\x12\x04\x8c\x05\ + \x02\x07\n\x0c\n\x04\x04\x0b\x02\x01\x12\x04\x8c\x05\x02\x1c\n\r\n\x05\ + \x04\x0b\x02\x01\x01\x12\x04\x8c\x05\x08\x17\n\r\n\x05\x04\x0b\x02\x01\ + \x03\x12\x04\x8c\x05\x1a\x1b\n\r\n\x05\x04\x0b\x02\x02\x05\x12\x04\x8d\ + \x05\x02\x07\n\x0c\n\x04\x04\x0b\x02\x02\x12\x04\x8d\x05\x02\x15\n\r\n\ + \x05\x04\x0b\x02\x02\x01\x12\x04\x8d\x05\x08\x10\n\r\n\x05\x04\x0b\x02\ + \x02\x03\x12\x04\x8d\x05\x13\x14\n\r\n\x05\x04\x0b\x02\x03\x05\x12\x04\ + \x8e\x05\x02\x07\n\x0c\n\x04\x04\x0b\x02\x03\x12\x04\x8e\x05\x02\x1a\n\r\ + \n\x05\x04\x0b\x02\x03\x01\x12\x04\x8e\x05\x08\x15\n\r\n\x05\x04\x0b\x02\ + \x03\x03\x12\x04\x8e\x05\x18\x19\n\xf9\x01\n\x02\x04\x0c\x12\x06\x96\x05\ + \0\x81\x06\x01\x1a\xea\x01\x20Occurrence\x20associates\x20a\x20source\ + \x20position\x20with\x20a\x20symbol\x20and/or\x20highlighting\n\x20infor\ + mation.\n\n\x20If\x20possible,\x20indexers\x20should\x20try\x20to\x20bun\ + dle\x20logically\x20related\x20information\n\x20across\x20occurrences\ + \x20into\x20a\x20single\x20occurrence\x20to\x20reduce\x20payload\x20size\ + s.\n\n\x0b\n\x03\x04\x0c\x01\x12\x04\x96\x05\x08\x12\n\r\n\x05\x04\x0c\ + \x02\0\x04\x12\x04\xa3\x05\x02\n\n\xe0\x05\n\x04\x04\x0c\x02\0\x12\x04\ + \xa3\x05\x02/\x1a\xd1\x05\x20Deprecated:\x20Use\x20`single_line_range`\ + \x20or\x20`multi_line_range`\x20instead.\n\n\x20Half-open\x20[start,\x20\ + end)\x20range.\x20Must\x20be\x20exactly\x20three\x20or\x20four\x20elemen\ + ts:\n\x20-\x20Three\x20elements:\x20`[startLine,\x20startCharacter,\x20e\ + ndCharacter]`\x20(single-line)\n\x20-\x20Four\x20elements:\x20`[startLin\ + e,\x20startCharacter,\x20endLine,\x20endCharacter]`\n\n\x20Historical\ \x20note:\x20the\x20original\x20draft\x20of\x20this\x20schema\x20had\x20\ a\x20`Range`\x20message\n\x20type\x20with\x20`start`\x20and\x20`end`\x20\ fields\x20of\x20type\x20`Position`,\x20mirroring\x20LSP.\n\x20Benchmarks\ \x20revealed\x20that\x20this\x20encoding\x20was\x20inefficient\x20and\ \x20that\x20we\x20could\n\x20reduce\x20the\x20total\x20payload\x20size\ \x20of\x20an\x20index\x20by\x2050%\x20by\x20using\x20`repeated\x20int32`\ - \n\x20instead.\x20The\x20`repeated\x20int32`\x20encoding\x20is\x20admitt\ - edly\x20more\x20embarrassing\x20to\n\x20work\x20with\x20in\x20some\x20pr\ - ogramming\x20languages\x20but\x20we\x20hope\x20the\x20performance\n\x20i\ - mprovements\x20make\x20up\x20for\x20it.\n\n\r\n\x05\x04\n\x02\0\x05\x12\ - \x04\x9f\x05\x0b\x10\n\r\n\x05\x04\n\x02\0\x01\x12\x04\x9f\x05\x11\x16\n\ - \r\n\x05\x04\n\x02\0\x03\x12\x04\x9f\x05\x19\x1a\n\r\n\x05\x04\n\x02\x01\ - \x05\x12\x04\xa2\x05\x02\x08\n\x8a\x01\n\x04\x04\n\x02\x01\x12\x04\xa2\ - \x05\x02\x14\x1a|\x20(optional)\x20The\x20symbol\x20that\x20appears\x20a\ - t\x20this\x20position.\x20See\n\x20`SymbolInformation.symbol`\x20for\x20\ - how\x20to\x20format\x20symbols\x20as\x20strings.\n\n\r\n\x05\x04\n\x02\ - \x01\x01\x12\x04\xa2\x05\t\x0f\n\r\n\x05\x04\n\x02\x01\x03\x12\x04\xa2\ - \x05\x12\x13\n\r\n\x05\x04\n\x02\x02\x05\x12\x04\xa5\x05\x02\x07\n\x97\ - \x01\n\x04\x04\n\x02\x02\x12\x04\xa5\x05\x02\x19\x1a\x88\x01\x20(optiona\ - l)\x20Bitset\x20containing\x20`SymbolRole`s\x20in\x20this\x20occurrence.\ - \n\x20See\x20`SymbolRole`'s\x20documentation\x20for\x20how\x20to\x20read\ - \x20and\x20write\x20this\x20field.\n\n\r\n\x05\x04\n\x02\x02\x01\x12\x04\ - \xa5\x05\x08\x14\n\r\n\x05\x04\n\x02\x02\x03\x12\x04\xa5\x05\x17\x18\n\r\ - \n\x05\x04\n\x02\x03\x04\x12\x04\xae\x05\x02\n\n\xf1\x03\n\x04\x04\n\x02\ - \x03\x12\x04\xae\x05\x02-\x1a\xe2\x03\x20(optional)\x20CommonMark-format\ - ted\x20documentation\x20for\x20this\x20specific\x20range.\x20If\n\x20emp\ - ty,\x20the\x20`Symbol.documentation`\x20field\x20is\x20used\x20instead.\ - \x20One\x20example\n\x20where\x20this\x20field\x20might\x20be\x20useful\ - \x20is\x20when\x20the\x20symbol\x20represents\x20a\x20generic\n\x20funct\ - ion\x20(with\x20abstract\x20type\x20parameters\x20such\x20as\x20`List\ - `)\x20and\x20at\x20this\n\x20occurrence\x20we\x20know\x20the\x20exact\ - \x20values\x20(such\x20as\x20`List`).\n\n\x20This\x20field\x20ca\ - n\x20also\x20be\x20used\x20for\x20dynamically\x20or\x20gradually\x20type\ - d\x20languages,\n\x20which\x20commonly\x20allow\x20for\x20type-changing\ - \x20assignment.\n\n\r\n\x05\x04\n\x02\x03\x05\x12\x04\xae\x05\x0b\x11\n\ - \r\n\x05\x04\n\x02\x03\x01\x12\x04\xae\x05\x12(\n\r\n\x05\x04\n\x02\x03\ - \x03\x12\x04\xae\x05+,\n\r\n\x05\x04\n\x02\x04\x06\x12\x04\xb0\x05\x02\ - \x0c\nX\n\x04\x04\n\x02\x04\x12\x04\xb0\x05\x02\x1d\x1aJ\x20(optional)\ - \x20What\x20syntax\x20highlighting\x20class\x20should\x20be\x20used\x20f\ - or\x20this\x20range?\n\n\r\n\x05\x04\n\x02\x04\x01\x12\x04\xb0\x05\r\x18\ - \n\r\n\x05\x04\n\x02\x04\x03\x12\x04\xb0\x05\x1b\x1c\n\r\n\x05\x04\n\x02\ - \x05\x04\x12\x04\xb2\x05\x02\n\nW\n\x04\x04\n\x02\x05\x12\x04\xb2\x05\ - \x02&\x1aI\x20(optional)\x20Diagnostics\x20that\x20have\x20been\x20repor\ - ted\x20for\x20this\x20specific\x20range.\n\n\r\n\x05\x04\n\x02\x05\x06\ - \x12\x04\xb2\x05\x0b\x15\n\r\n\x05\x04\n\x02\x05\x01\x12\x04\xb2\x05\x16\ - !\n\r\n\x05\x04\n\x02\x05\x03\x12\x04\xb2\x05$%\n\r\n\x05\x04\n\x02\x06\ - \x04\x12\x04\xe7\x05\x02\n\n\xb7\x0e\n\x04\x04\n\x02\x06\x12\x04\xe7\x05\ - \x02%\x1a\xa8\x0e\x20(optional)\x20Using\x20the\x20same\x20encoding\x20a\ - s\x20the\x20sibling\x20`range`\x20field,\x20half-open\n\x20source\x20ran\ - ge\x20of\x20the\x20nearest\x20non-trivial\x20enclosing\x20AST\x20node.\ - \x20This\x20range\x20must\n\x20enclose\x20the\x20`range`\x20field.\x20Ex\ - ample\x20applications\x20that\x20make\x20use\x20of\x20the\n\x20enclosing\ - _range\x20field:\n\n\x20-\x20Call\x20hierarchies:\x20to\x20determine\x20\ - what\x20symbols\x20are\x20references\x20from\x20the\x20body\n\x20\x20\ - \x20of\x20a\x20function\n\x20-\x20Symbol\x20outline:\x20to\x20display\ - \x20breadcrumbs\x20from\x20the\x20cursor\x20position\x20to\x20the\n\x20\ + \n\x20instead.\x20However,\x20the\x20lack\x20of\x20type\x20safety\x20led\ + \x20to\x20the\x20introduction\x20of\n\x20`single_line_range`\x20and\x20`\ + multi_line_range`\x20as\x20typed\x20alternatives.\n\n\r\n\x05\x04\x0c\ + \x02\0\x05\x12\x04\xa3\x05\x0b\x10\n\r\n\x05\x04\x0c\x02\0\x01\x12\x04\ + \xa3\x05\x11\x16\n\r\n\x05\x04\x0c\x02\0\x03\x12\x04\xa3\x05\x19\x1a\n\r\ + \n\x05\x04\x0c\x02\0\x08\x12\x04\xa3\x05\x1b.\n\x0e\n\x06\x04\x0c\x02\0\ + \x08\x03\x12\x04\xa3\x05\x1c-\n\xa4\x03\n\x04\x04\x0c\x08\0\x12\x06\xaf\ + \x05\x02\xb4\x05\x03\x1a\x93\x03\x20Half-open\x20[start,\x20end)\x20sour\ + ce\x20range\x20of\x20this\x20occurrence.\n\n\x20It\x20is\x20allowed\x20f\ + or\x20the\x20range\x20to\x20be\x20empty\x20(i.e.\x20start==end).\n\n\x20\ + Line\x20numbers\x20and\x20characters\x20are\x20always\x200-based.\x20Mak\ + e\x20sure\x20to\x20increment\x20the\n\x20line/character\x20values\x20bef\ + ore\x20displaying\x20them\x20in\x20an\x20editor-like\x20UI\x20because\n\ + \x20editors\x20conventionally\x20use\x201-based\x20numbers.\n\n\x20The\ + \x20'character'\x20value\x20is\x20interpreted\x20based\x20on\x20the\x20P\ + ositionEncoding\x20for\n\x20the\x20Document.\n\n\r\n\x05\x04\x0c\x08\0\ + \x01\x12\x04\xaf\x05\x08\x13\n\r\n\x05\x04\x0c\x02\x01\x06\x12\x04\xb1\ + \x05\x04\x13\n-\n\x04\x04\x0c\x02\x01\x12\x04\xb1\x05\x04*\x1a\x1f\x20Ra\ + nge\x20spanning\x20a\x20single\x20line.\n\n\r\n\x05\x04\x0c\x02\x01\x01\ + \x12\x04\xb1\x05\x14%\n\r\n\x05\x04\x0c\x02\x01\x03\x12\x04\xb1\x05()\n\ + \r\n\x05\x04\x0c\x02\x02\x06\x12\x04\xb3\x05\x04\x12\n.\n\x04\x04\x0c\ + \x02\x02\x12\x04\xb3\x05\x04(\x1a\x20\x20Range\x20spanning\x20multiple\ + \x20lines.\n\n\r\n\x05\x04\x0c\x02\x02\x01\x12\x04\xb3\x05\x13#\n\r\n\ + \x05\x04\x0c\x02\x02\x03\x12\x04\xb3\x05&'\n\r\n\x05\x04\x0c\x02\x03\x05\ + \x12\x04\xb7\x05\x02\x08\n\x8a\x01\n\x04\x04\x0c\x02\x03\x12\x04\xb7\x05\ + \x02\x14\x1a|\x20(optional)\x20The\x20symbol\x20that\x20appears\x20at\ + \x20this\x20position.\x20See\n\x20`SymbolInformation.symbol`\x20for\x20h\ + ow\x20to\x20format\x20symbols\x20as\x20strings.\n\n\r\n\x05\x04\x0c\x02\ + \x03\x01\x12\x04\xb7\x05\t\x0f\n\r\n\x05\x04\x0c\x02\x03\x03\x12\x04\xb7\ + \x05\x12\x13\n\r\n\x05\x04\x0c\x02\x04\x05\x12\x04\xba\x05\x02\x07\n\x97\ + \x01\n\x04\x04\x0c\x02\x04\x12\x04\xba\x05\x02\x19\x1a\x88\x01\x20(optio\ + nal)\x20Bitset\x20containing\x20`SymbolRole`s\x20in\x20this\x20occurrenc\ + e.\n\x20See\x20`SymbolRole`'s\x20documentation\x20for\x20how\x20to\x20re\ + ad\x20and\x20write\x20this\x20field.\n\n\r\n\x05\x04\x0c\x02\x04\x01\x12\ + \x04\xba\x05\x08\x14\n\r\n\x05\x04\x0c\x02\x04\x03\x12\x04\xba\x05\x17\ + \x18\n\r\n\x05\x04\x0c\x02\x05\x04\x12\x04\xc3\x05\x02\n\n\xf1\x03\n\x04\ + \x04\x0c\x02\x05\x12\x04\xc3\x05\x02-\x1a\xe2\x03\x20(optional)\x20Commo\ + nMark-formatted\x20documentation\x20for\x20this\x20specific\x20range.\ + \x20If\n\x20empty,\x20the\x20`Symbol.documentation`\x20field\x20is\x20us\ + ed\x20instead.\x20One\x20example\n\x20where\x20this\x20field\x20might\ + \x20be\x20useful\x20is\x20when\x20the\x20symbol\x20represents\x20a\x20ge\ + neric\n\x20function\x20(with\x20abstract\x20type\x20parameters\x20such\ + \x20as\x20`List`)\x20and\x20at\x20this\n\x20occurrence\x20we\x20know\ + \x20the\x20exact\x20values\x20(such\x20as\x20`List`).\n\n\x20Thi\ + s\x20field\x20can\x20also\x20be\x20used\x20for\x20dynamically\x20or\x20g\ + radually\x20typed\x20languages,\n\x20which\x20commonly\x20allow\x20for\ + \x20type-changing\x20assignment.\n\n\r\n\x05\x04\x0c\x02\x05\x05\x12\x04\ + \xc3\x05\x0b\x11\n\r\n\x05\x04\x0c\x02\x05\x01\x12\x04\xc3\x05\x12(\n\r\ + \n\x05\x04\x0c\x02\x05\x03\x12\x04\xc3\x05+,\n\r\n\x05\x04\x0c\x02\x06\ + \x06\x12\x04\xc5\x05\x02\x0c\nX\n\x04\x04\x0c\x02\x06\x12\x04\xc5\x05\ + \x02\x1d\x1aJ\x20(optional)\x20What\x20syntax\x20highlighting\x20class\ + \x20should\x20be\x20used\x20for\x20this\x20range?\n\n\r\n\x05\x04\x0c\ + \x02\x06\x01\x12\x04\xc5\x05\r\x18\n\r\n\x05\x04\x0c\x02\x06\x03\x12\x04\ + \xc5\x05\x1b\x1c\n\r\n\x05\x04\x0c\x02\x07\x04\x12\x04\xc7\x05\x02\n\nW\ + \n\x04\x04\x0c\x02\x07\x12\x04\xc7\x05\x02&\x1aI\x20(optional)\x20Diagno\ + stics\x20that\x20have\x20been\x20reported\x20for\x20this\x20specific\x20\ + range.\n\n\r\n\x05\x04\x0c\x02\x07\x06\x12\x04\xc7\x05\x0b\x15\n\r\n\x05\ + \x04\x0c\x02\x07\x01\x12\x04\xc7\x05\x16!\n\r\n\x05\x04\x0c\x02\x07\x03\ + \x12\x04\xc7\x05$%\n\r\n\x05\x04\x0c\x02\x08\x04\x12\x04\xc9\x05\x02\n\n\ + @\n\x04\x04\x0c\x02\x08\x12\x04\xc9\x05\x029\x1a2\x20Deprecated:\x20Use\ + \x20`typed_enclosing_range`\x20instead.\n\n\r\n\x05\x04\x0c\x02\x08\x05\ + \x12\x04\xc9\x05\x0b\x10\n\r\n\x05\x04\x0c\x02\x08\x01\x12\x04\xc9\x05\ + \x11\x20\n\r\n\x05\x04\x0c\x02\x08\x03\x12\x04\xc9\x05#$\n\r\n\x05\x04\ + \x0c\x02\x08\x08\x12\x04\xc9\x05%8\n\x0e\n\x06\x04\x0c\x02\x08\x08\x03\ + \x12\x04\xc9\x05&7\n\xd9\r\n\x04\x04\x0c\x08\x01\x12\x06\xfd\x05\x02\x80\ + \x06\x03\x1a\xc8\r\x20(optional)\x20Half-open\x20source\x20range\x20of\ + \x20the\x20nearest\x20non-trivial\x20enclosing\x20AST\n\x20node.\x20This\ + \x20range\x20must\x20enclose\x20the\x20occurrence\x20range.\x20Example\ + \x20applications:\n\n\x20-\x20Call\x20hierarchies:\x20to\x20determine\ + \x20what\x20symbols\x20are\x20referenced\x20from\x20the\x20body\n\x20\ + \x20\x20of\x20a\x20function\n\x20-\x20Symbol\x20outline:\x20to\x20displa\ + y\x20breadcrumbs\x20from\x20the\x20cursor\x20position\x20to\x20the\n\x20\ \x20\x20root\x20of\x20the\x20file\n\x20-\x20Expand\x20selection:\x20to\ \x20select\x20the\x20nearest\x20enclosing\x20AST\x20node.\n\x20-\x20High\ light\x20range:\x20to\x20indicate\x20the\x20AST\x20expression\x20that\ @@ -5881,303 +6609,307 @@ static file_descriptor_proto_data: &'static [u8] = b"\ \x20b\x20=\x20a.b(41).f(42).g(43)\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20^\x20range\n\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20^^^^^^^^^^^^^\x20enclosing_range\n\x20```\n\n\r\ - \n\x05\x04\n\x02\x06\x05\x12\x04\xe7\x05\x0b\x10\n\r\n\x05\x04\n\x02\x06\ - \x01\x12\x04\xe7\x05\x11\x20\n\r\n\x05\x04\n\x02\x06\x03\x12\x04\xe7\x05\ - #$\nw\n\x02\x04\x0b\x12\x06\xec\x05\0\xf7\x05\x01\x1ai\x20Represents\x20\ - a\x20diagnostic,\x20such\x20as\x20a\x20compiler\x20error\x20or\x20warnin\ - g,\x20which\x20should\x20be\n\x20reported\x20for\x20a\x20document.\n\n\ - \x0b\n\x03\x04\x0b\x01\x12\x04\xec\x05\x08\x12\n\r\n\x05\x04\x0b\x02\0\ - \x06\x12\x04\xee\x05\x02\n\nW\n\x04\x04\x0b\x02\0\x12\x04\xee\x05\x02\ - \x18\x1aI\x20Should\x20this\x20diagnostic\x20be\x20reported\x20as\x20an\ - \x20error,\x20warning,\x20info,\x20or\x20hint?\n\n\r\n\x05\x04\x0b\x02\0\ - \x01\x12\x04\xee\x05\x0b\x13\n\r\n\x05\x04\x0b\x02\0\x03\x12\x04\xee\x05\ - \x16\x17\n\r\n\x05\x04\x0b\x02\x01\x05\x12\x04\xf0\x05\x02\x08\n]\n\x04\ - \x04\x0b\x02\x01\x12\x04\xf0\x05\x02\x12\x1aO\x20(optional)\x20Code\x20o\ - f\x20this\x20diagnostic,\x20which\x20might\x20appear\x20in\x20the\x20use\ - r\x20interface.\n\n\r\n\x05\x04\x0b\x02\x01\x01\x12\x04\xf0\x05\t\r\n\r\ - \n\x05\x04\x0b\x02\x01\x03\x12\x04\xf0\x05\x10\x11\n\r\n\x05\x04\x0b\x02\ - \x02\x05\x12\x04\xf2\x05\x02\x08\n+\n\x04\x04\x0b\x02\x02\x12\x04\xf2\ - \x05\x02\x15\x1a\x1d\x20Message\x20of\x20this\x20diagnostic.\n\n\r\n\x05\ - \x04\x0b\x02\x02\x01\x12\x04\xf2\x05\t\x10\n\r\n\x05\x04\x0b\x02\x02\x03\ - \x12\x04\xf2\x05\x13\x14\n\r\n\x05\x04\x0b\x02\x03\x05\x12\x04\xf5\x05\ - \x02\x08\n~\n\x04\x04\x0b\x02\x03\x12\x04\xf5\x05\x02\x14\x1ap\x20(optio\ - nal)\x20Human-readable\x20string\x20describing\x20the\x20source\x20of\ - \x20this\x20diagnostic,\x20e.g.\n\x20'typescript'\x20or\x20'super\x20lin\ - t'.\n\n\r\n\x05\x04\x0b\x02\x03\x01\x12\x04\xf5\x05\t\x0f\n\r\n\x05\x04\ - \x0b\x02\x03\x03\x12\x04\xf5\x05\x12\x13\n\r\n\x05\x04\x0b\x02\x04\x04\ - \x12\x04\xf6\x05\x02\n\n\x0c\n\x04\x04\x0b\x02\x04\x12\x04\xf6\x05\x02\"\ - \n\r\n\x05\x04\x0b\x02\x04\x06\x12\x04\xf6\x05\x0b\x18\n\r\n\x05\x04\x0b\ - \x02\x04\x01\x12\x04\xf6\x05\x19\x1d\n\r\n\x05\x04\x0b\x02\x04\x03\x12\ - \x04\xf6\x05\x20!\n\x0c\n\x02\x05\x05\x12\x06\xf9\x05\0\xff\x05\x01\n\ - \x0b\n\x03\x05\x05\x01\x12\x04\xf9\x05\x05\r\n\r\n\x05\x05\x05\x02\0\x01\ - \x12\x04\xfa\x05\x02\x15\n\x0c\n\x04\x05\x05\x02\0\x12\x04\xfa\x05\x02\ - \x1a\n\r\n\x05\x05\x05\x02\0\x02\x12\x04\xfa\x05\x18\x19\n\r\n\x05\x05\ - \x05\x02\x01\x01\x12\x04\xfb\x05\x02\x07\n\x0c\n\x04\x05\x05\x02\x01\x12\ - \x04\xfb\x05\x02\x0c\n\r\n\x05\x05\x05\x02\x01\x02\x12\x04\xfb\x05\n\x0b\ - \n\r\n\x05\x05\x05\x02\x02\x01\x12\x04\xfc\x05\x02\t\n\x0c\n\x04\x05\x05\ - \x02\x02\x12\x04\xfc\x05\x02\x0e\n\r\n\x05\x05\x05\x02\x02\x02\x12\x04\ - \xfc\x05\x0c\r\n\r\n\x05\x05\x05\x02\x03\x01\x12\x04\xfd\x05\x02\r\n\x0c\ - \n\x04\x05\x05\x02\x03\x12\x04\xfd\x05\x02\x12\n\r\n\x05\x05\x05\x02\x03\ - \x02\x12\x04\xfd\x05\x10\x11\n\r\n\x05\x05\x05\x02\x04\x01\x12\x04\xfe\ - \x05\x02\x06\n\x0c\n\x04\x05\x05\x02\x04\x12\x04\xfe\x05\x02\x0b\n\r\n\ - \x05\x05\x05\x02\x04\x02\x12\x04\xfe\x05\t\n\n\x0c\n\x02\x05\x06\x12\x06\ - \x81\x06\0\x85\x06\x01\n\x0b\n\x03\x05\x06\x01\x12\x04\x81\x06\x05\x12\n\ - \r\n\x05\x05\x06\x02\0\x01\x12\x04\x82\x06\x02\x1a\n\x0c\n\x04\x05\x06\ - \x02\0\x12\x04\x82\x06\x02\x1f\n\r\n\x05\x05\x06\x02\0\x02\x12\x04\x82\ - \x06\x1d\x1e\n\r\n\x05\x05\x06\x02\x01\x01\x12\x04\x83\x06\x02\r\n\x0c\n\ - \x04\x05\x06\x02\x01\x12\x04\x83\x06\x02\x12\n\r\n\x05\x05\x06\x02\x01\ - \x02\x12\x04\x83\x06\x10\x11\n\r\n\x05\x05\x06\x02\x02\x01\x12\x04\x84\ - \x06\x02\x0c\n\x0c\n\x04\x05\x06\x02\x02\x12\x04\x84\x06\x02\x11\n\r\n\ - \x05\x05\x06\x02\x02\x02\x12\x04\x84\x06\x0f\x10\n\xd0\x03\n\x02\x05\x07\ - \x12\x06\x8d\x06\0\x83\x07\x01\x1a\xc1\x03\x20Language\x20standardises\ - \x20names\x20of\x20common\x20programming\x20languages\x20that\x20can\x20\ - be\x20used\n\x20for\x20the\x20`Document.language`\x20field.\x20The\x20pr\ - imary\x20purpose\x20of\x20this\x20enum\x20is\x20to\n\x20prevent\x20a\x20\ - situation\x20where\x20we\x20have\x20a\x20single\x20programming\x20langua\ - ge\x20ends\x20up\x20with\n\x20multiple\x20string\x20representations.\x20\ - For\x20example,\x20the\x20C++\x20language\x20uses\x20the\x20name\n\x20\"\ - CPP\"\x20in\x20this\x20enum\x20and\x20other\x20names\x20such\x20as\x20\"\ - cpp\"\x20are\x20incompatible.\n\x20Feel\x20free\x20to\x20send\x20a\x20pu\ - ll-request\x20to\x20add\x20missing\x20programming\x20languages.\n\n\x0b\ - \n\x03\x05\x07\x01\x12\x04\x8d\x06\x05\r\n\r\n\x05\x05\x07\x02\0\x01\x12\ - \x04\x8e\x06\x02\x15\n\x0c\n\x04\x05\x07\x02\0\x12\x04\x8e\x06\x02\x1a\n\ - \r\n\x05\x05\x07\x02\0\x02\x12\x04\x8e\x06\x18\x19\n\r\n\x05\x05\x07\x02\ - \x01\x01\x12\x04\x8f\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\x01\x12\x04\x8f\ - \x06\x02\x0c\n\r\n\x05\x05\x07\x02\x01\x02\x12\x04\x8f\x06\t\x0b\n\r\n\ - \x05\x05\x07\x02\x02\x01\x12\x04\x90\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\ - \x02\x12\x04\x90\x06\x02\x0c\n\r\n\x05\x05\x07\x02\x02\x02\x12\x04\x90\ - \x06\t\x0b\n\r\n\x05\x05\x07\x02\x03\x01\x12\x04\x91\x06\x02\x05\n\x0c\n\ - \x04\x05\x07\x02\x03\x12\x04\x91\x06\x02\x0b\n\r\n\x05\x05\x07\x02\x03\ - \x02\x12\x04\x91\x06\x08\n\n\r\n\x05\x05\x07\x02\x04\x01\x12\x04\x92\x06\ - \x02\x05\n\x0c\n\x04\x05\x07\x02\x04\x12\x04\x92\x06\x02\x0b\n\r\n\x05\ - \x05\x07\x02\x04\x02\x12\x04\x92\x06\x08\n\n\r\n\x05\x05\x07\x02\x05\x01\ - \x12\x04\x93\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\x05\x12\x04\x93\x06\x02\ - \x0c\n\r\n\x05\x05\x07\x02\x05\x02\x12\x04\x93\x06\t\x0b\n\r\n\x05\x05\ - \x07\x02\x06\x01\x12\x04\x94\x06\x02\n\n\x0c\n\x04\x05\x07\x02\x06\x12\ - \x04\x94\x06\x02\x10\n\r\n\x05\x05\x07\x02\x06\x02\x12\x04\x94\x06\r\x0f\ - \n\r\n\x05\x05\x07\x02\x07\x01\x12\x04\x95\x06\x02\n\n\x0c\n\x04\x05\x07\ - \x02\x07\x12\x04\x95\x06\x02\x10\n\r\n\x05\x05\x07\x02\x07\x02\x12\x04\ - \x95\x06\r\x0f\n\r\n\x05\x05\x07\x02\x08\x01\x12\x04\x96\x06\x02\x05\n\ - \x0c\n\x04\x05\x07\x02\x08\x12\x04\x96\x06\x02\x0b\n\r\n\x05\x05\x07\x02\ - \x08\x02\x12\x04\x96\x06\x08\n\n\r\n\x05\x05\x07\x02\t\x01\x12\x04\x97\ - \x06\x02\x05\n\x0c\n\x04\x05\x07\x02\t\x12\x04\x97\x06\x02\x0b\n\r\n\x05\ - \x05\x07\x02\t\x02\x12\x04\x97\x06\x08\n\n\r\n\x05\x05\x07\x02\n\x01\x12\ - \x04\x98\x06\x02\x08\n\x0c\n\x04\x05\x07\x02\n\x12\x04\x98\x06\x02\x0e\n\ - \r\n\x05\x05\x07\x02\n\x02\x12\x04\x98\x06\x0b\r\n\r\n\x05\x05\x07\x02\ - \x0b\x01\x12\x04\x99\x06\x02\x03\n\x0c\n\x04\x05\x07\x02\x0b\x12\x04\x99\ - \x06\x02\t\n\r\n\x05\x05\x07\x02\x0b\x02\x12\x04\x99\x06\x06\x08\n\r\n\ - \x05\x05\x07\x02\x0c\x01\x12\x04\x9a\x06\x02\x07\n\x0c\n\x04\x05\x07\x02\ - \x0c\x12\x04\x9a\x06\x02\r\n\r\n\x05\x05\x07\x02\x0c\x02\x12\x04\x9a\x06\ - \n\x0c\n\r\n\x05\x05\x07\x02\r\x01\x12\x04\x9b\x06\x02\x05\nG\n\x04\x05\ - \x07\x02\r\x12\x04\x9b\x06\x02\x0b\"9\x20C++\x20(the\x20name\x20\"CPP\"\ + \n\x05\x04\x0c\x08\x01\x01\x12\x04\xfd\x05\x08\x1d\n\r\n\x05\x04\x0c\x02\ + \t\x06\x12\x04\xfe\x05\x04\x13\n\x0c\n\x04\x04\x0c\x02\t\x12\x04\xfe\x05\ + \x045\n\r\n\x05\x04\x0c\x02\t\x01\x12\x04\xfe\x05\x14/\n\r\n\x05\x04\x0c\ + \x02\t\x03\x12\x04\xfe\x0524\n\r\n\x05\x04\x0c\x02\n\x06\x12\x04\xff\x05\ + \x04\x12\n\x0c\n\x04\x04\x0c\x02\n\x12\x04\xff\x05\x043\n\r\n\x05\x04\ + \x0c\x02\n\x01\x12\x04\xff\x05\x13-\n\r\n\x05\x04\x0c\x02\n\x03\x12\x04\ + \xff\x0502\nw\n\x02\x04\r\x12\x06\x85\x06\0\x90\x06\x01\x1ai\x20Represen\ + ts\x20a\x20diagnostic,\x20such\x20as\x20a\x20compiler\x20error\x20or\x20\ + warning,\x20which\x20should\x20be\n\x20reported\x20for\x20a\x20document.\ + \n\n\x0b\n\x03\x04\r\x01\x12\x04\x85\x06\x08\x12\n\r\n\x05\x04\r\x02\0\ + \x06\x12\x04\x87\x06\x02\n\nW\n\x04\x04\r\x02\0\x12\x04\x87\x06\x02\x18\ + \x1aI\x20Should\x20this\x20diagnostic\x20be\x20reported\x20as\x20an\x20e\ + rror,\x20warning,\x20info,\x20or\x20hint?\n\n\r\n\x05\x04\r\x02\0\x01\ + \x12\x04\x87\x06\x0b\x13\n\r\n\x05\x04\r\x02\0\x03\x12\x04\x87\x06\x16\ + \x17\n\r\n\x05\x04\r\x02\x01\x05\x12\x04\x89\x06\x02\x08\n]\n\x04\x04\r\ + \x02\x01\x12\x04\x89\x06\x02\x12\x1aO\x20(optional)\x20Code\x20of\x20thi\ + s\x20diagnostic,\x20which\x20might\x20appear\x20in\x20the\x20user\x20int\ + erface.\n\n\r\n\x05\x04\r\x02\x01\x01\x12\x04\x89\x06\t\r\n\r\n\x05\x04\ + \r\x02\x01\x03\x12\x04\x89\x06\x10\x11\n\r\n\x05\x04\r\x02\x02\x05\x12\ + \x04\x8b\x06\x02\x08\n+\n\x04\x04\r\x02\x02\x12\x04\x8b\x06\x02\x15\x1a\ + \x1d\x20Message\x20of\x20this\x20diagnostic.\n\n\r\n\x05\x04\r\x02\x02\ + \x01\x12\x04\x8b\x06\t\x10\n\r\n\x05\x04\r\x02\x02\x03\x12\x04\x8b\x06\ + \x13\x14\n\r\n\x05\x04\r\x02\x03\x05\x12\x04\x8e\x06\x02\x08\n~\n\x04\ + \x04\r\x02\x03\x12\x04\x8e\x06\x02\x14\x1ap\x20(optional)\x20Human-reada\ + ble\x20string\x20describing\x20the\x20source\x20of\x20this\x20diagnostic\ + ,\x20e.g.\n\x20'typescript'\x20or\x20'super\x20lint'.\n\n\r\n\x05\x04\r\ + \x02\x03\x01\x12\x04\x8e\x06\t\x0f\n\r\n\x05\x04\r\x02\x03\x03\x12\x04\ + \x8e\x06\x12\x13\n\r\n\x05\x04\r\x02\x04\x04\x12\x04\x8f\x06\x02\n\n\x0c\ + \n\x04\x04\r\x02\x04\x12\x04\x8f\x06\x02\"\n\r\n\x05\x04\r\x02\x04\x06\ + \x12\x04\x8f\x06\x0b\x18\n\r\n\x05\x04\r\x02\x04\x01\x12\x04\x8f\x06\x19\ + \x1d\n\r\n\x05\x04\r\x02\x04\x03\x12\x04\x8f\x06\x20!\n\x0c\n\x02\x05\ + \x05\x12\x06\x92\x06\0\x98\x06\x01\n\x0b\n\x03\x05\x05\x01\x12\x04\x92\ + \x06\x05\r\n\r\n\x05\x05\x05\x02\0\x01\x12\x04\x93\x06\x02\x15\n\x0c\n\ + \x04\x05\x05\x02\0\x12\x04\x93\x06\x02\x1a\n\r\n\x05\x05\x05\x02\0\x02\ + \x12\x04\x93\x06\x18\x19\n\r\n\x05\x05\x05\x02\x01\x01\x12\x04\x94\x06\ + \x02\x07\n\x0c\n\x04\x05\x05\x02\x01\x12\x04\x94\x06\x02\x0c\n\r\n\x05\ + \x05\x05\x02\x01\x02\x12\x04\x94\x06\n\x0b\n\r\n\x05\x05\x05\x02\x02\x01\ + \x12\x04\x95\x06\x02\t\n\x0c\n\x04\x05\x05\x02\x02\x12\x04\x95\x06\x02\ + \x0e\n\r\n\x05\x05\x05\x02\x02\x02\x12\x04\x95\x06\x0c\r\n\r\n\x05\x05\ + \x05\x02\x03\x01\x12\x04\x96\x06\x02\r\n\x0c\n\x04\x05\x05\x02\x03\x12\ + \x04\x96\x06\x02\x12\n\r\n\x05\x05\x05\x02\x03\x02\x12\x04\x96\x06\x10\ + \x11\n\r\n\x05\x05\x05\x02\x04\x01\x12\x04\x97\x06\x02\x06\n\x0c\n\x04\ + \x05\x05\x02\x04\x12\x04\x97\x06\x02\x0b\n\r\n\x05\x05\x05\x02\x04\x02\ + \x12\x04\x97\x06\t\n\n\x0c\n\x02\x05\x06\x12\x06\x9a\x06\0\x9e\x06\x01\n\ + \x0b\n\x03\x05\x06\x01\x12\x04\x9a\x06\x05\x12\n\r\n\x05\x05\x06\x02\0\ + \x01\x12\x04\x9b\x06\x02\x1a\n\x0c\n\x04\x05\x06\x02\0\x12\x04\x9b\x06\ + \x02\x1f\n\r\n\x05\x05\x06\x02\0\x02\x12\x04\x9b\x06\x1d\x1e\n\r\n\x05\ + \x05\x06\x02\x01\x01\x12\x04\x9c\x06\x02\r\n\x0c\n\x04\x05\x06\x02\x01\ + \x12\x04\x9c\x06\x02\x12\n\r\n\x05\x05\x06\x02\x01\x02\x12\x04\x9c\x06\ + \x10\x11\n\r\n\x05\x05\x06\x02\x02\x01\x12\x04\x9d\x06\x02\x0c\n\x0c\n\ + \x04\x05\x06\x02\x02\x12\x04\x9d\x06\x02\x11\n\r\n\x05\x05\x06\x02\x02\ + \x02\x12\x04\x9d\x06\x0f\x10\n\xd0\x03\n\x02\x05\x07\x12\x06\xa6\x06\0\ + \x9c\x07\x01\x1a\xc1\x03\x20Language\x20standardises\x20names\x20of\x20c\ + ommon\x20programming\x20languages\x20that\x20can\x20be\x20used\n\x20for\ + \x20the\x20`Document.language`\x20field.\x20The\x20primary\x20purpose\ + \x20of\x20this\x20enum\x20is\x20to\n\x20prevent\x20a\x20situation\x20whe\ + re\x20we\x20have\x20a\x20single\x20programming\x20language\x20ends\x20up\ + \x20with\n\x20multiple\x20string\x20representations.\x20For\x20example,\ + \x20the\x20C++\x20language\x20uses\x20the\x20name\n\x20\"CPP\"\x20in\x20\ + this\x20enum\x20and\x20other\x20names\x20such\x20as\x20\"cpp\"\x20are\ + \x20incompatible.\n\x20Feel\x20free\x20to\x20send\x20a\x20pull-request\ + \x20to\x20add\x20missing\x20programming\x20languages.\n\n\x0b\n\x03\x05\ + \x07\x01\x12\x04\xa6\x06\x05\r\n\r\n\x05\x05\x07\x02\0\x01\x12\x04\xa7\ + \x06\x02\x15\n\x0c\n\x04\x05\x07\x02\0\x12\x04\xa7\x06\x02\x1a\n\r\n\x05\ + \x05\x07\x02\0\x02\x12\x04\xa7\x06\x18\x19\n\r\n\x05\x05\x07\x02\x01\x01\ + \x12\x04\xa8\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\x01\x12\x04\xa8\x06\x02\ + \x0c\n\r\n\x05\x05\x07\x02\x01\x02\x12\x04\xa8\x06\t\x0b\n\r\n\x05\x05\ + \x07\x02\x02\x01\x12\x04\xa9\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\x02\x12\ + \x04\xa9\x06\x02\x0c\n\r\n\x05\x05\x07\x02\x02\x02\x12\x04\xa9\x06\t\x0b\ + \n\r\n\x05\x05\x07\x02\x03\x01\x12\x04\xaa\x06\x02\x05\n\x0c\n\x04\x05\ + \x07\x02\x03\x12\x04\xaa\x06\x02\x0b\n\r\n\x05\x05\x07\x02\x03\x02\x12\ + \x04\xaa\x06\x08\n\n\r\n\x05\x05\x07\x02\x04\x01\x12\x04\xab\x06\x02\x05\ + \n\x0c\n\x04\x05\x07\x02\x04\x12\x04\xab\x06\x02\x0b\n\r\n\x05\x05\x07\ + \x02\x04\x02\x12\x04\xab\x06\x08\n\n\r\n\x05\x05\x07\x02\x05\x01\x12\x04\ + \xac\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\x05\x12\x04\xac\x06\x02\x0c\n\r\ + \n\x05\x05\x07\x02\x05\x02\x12\x04\xac\x06\t\x0b\n\r\n\x05\x05\x07\x02\ + \x06\x01\x12\x04\xad\x06\x02\n\n\x0c\n\x04\x05\x07\x02\x06\x12\x04\xad\ + \x06\x02\x10\n\r\n\x05\x05\x07\x02\x06\x02\x12\x04\xad\x06\r\x0f\n\r\n\ + \x05\x05\x07\x02\x07\x01\x12\x04\xae\x06\x02\n\n\x0c\n\x04\x05\x07\x02\ + \x07\x12\x04\xae\x06\x02\x10\n\r\n\x05\x05\x07\x02\x07\x02\x12\x04\xae\ + \x06\r\x0f\n\r\n\x05\x05\x07\x02\x08\x01\x12\x04\xaf\x06\x02\x05\n\x0c\n\ + \x04\x05\x07\x02\x08\x12\x04\xaf\x06\x02\x0b\n\r\n\x05\x05\x07\x02\x08\ + \x02\x12\x04\xaf\x06\x08\n\n\r\n\x05\x05\x07\x02\t\x01\x12\x04\xb0\x06\ + \x02\x05\n\x0c\n\x04\x05\x07\x02\t\x12\x04\xb0\x06\x02\x0b\n\r\n\x05\x05\ + \x07\x02\t\x02\x12\x04\xb0\x06\x08\n\n\r\n\x05\x05\x07\x02\n\x01\x12\x04\ + \xb1\x06\x02\x08\n\x0c\n\x04\x05\x07\x02\n\x12\x04\xb1\x06\x02\x0e\n\r\n\ + \x05\x05\x07\x02\n\x02\x12\x04\xb1\x06\x0b\r\n\r\n\x05\x05\x07\x02\x0b\ + \x01\x12\x04\xb2\x06\x02\x03\n\x0c\n\x04\x05\x07\x02\x0b\x12\x04\xb2\x06\ + \x02\t\n\r\n\x05\x05\x07\x02\x0b\x02\x12\x04\xb2\x06\x06\x08\n\r\n\x05\ + \x05\x07\x02\x0c\x01\x12\x04\xb3\x06\x02\x07\n\x0c\n\x04\x05\x07\x02\x0c\ + \x12\x04\xb3\x06\x02\r\n\r\n\x05\x05\x07\x02\x0c\x02\x12\x04\xb3\x06\n\ + \x0c\n\r\n\x05\x05\x07\x02\r\x01\x12\x04\xb4\x06\x02\x05\nG\n\x04\x05\ + \x07\x02\r\x12\x04\xb4\x06\x02\x0b\"9\x20C++\x20(the\x20name\x20\"CPP\"\ \x20was\x20chosen\x20for\x20consistency\x20with\x20LSP)\n\r\n\x05\x05\ - \x07\x02\r\x02\x12\x04\x9b\x06\x08\n\n\r\n\x05\x05\x07\x02\x0e\x01\x12\ - \x04\x9c\x06\x02\x05\n\x0c\n\x04\x05\x07\x02\x0e\x12\x04\x9c\x06\x02\x0b\ - \n\r\n\x05\x05\x07\x02\x0e\x02\x12\x04\x9c\x06\x08\n\n\r\n\x05\x05\x07\ - \x02\x0f\x01\x12\x04\x9d\x06\x02\x08\n\x0c\n\x04\x05\x07\x02\x0f\x12\x04\ - \x9d\x06\x02\r\n\r\n\x05\x05\x07\x02\x0f\x02\x12\x04\x9d\x06\x0b\x0c\n\r\ - \n\x05\x05\x07\x02\x10\x01\x12\x04\x9e\x06\x02\t\n\x0c\n\x04\x05\x07\x02\ - \x10\x12\x04\x9e\x06\x02\x0e\n\r\n\x05\x05\x07\x02\x10\x02\x12\x04\x9e\ - \x06\x0c\r\n\r\n\x05\x05\x07\x02\x11\x01\x12\x04\x9f\x06\x02\x0e\n\x0c\n\ - \x04\x05\x07\x02\x11\x12\x04\x9f\x06\x02\x14\n\r\n\x05\x05\x07\x02\x11\ - \x02\x12\x04\x9f\x06\x11\x13\n\r\n\x05\x05\x07\x02\x12\x01\x12\x04\xa0\ - \x06\x02\x0c\n\x0c\n\x04\x05\x07\x02\x12\x12\x04\xa0\x06\x02\x11\n\r\n\ - \x05\x05\x07\x02\x12\x02\x12\x04\xa0\x06\x0f\x10\n\r\n\x05\x05\x07\x02\ - \x13\x01\x12\x04\xa1\x06\x02\x05\n\x0c\n\x04\x05\x07\x02\x13\x12\x04\xa1\ - \x06\x02\x0b\n\r\n\x05\x05\x07\x02\x13\x02\x12\x04\xa1\x06\x08\n\n\r\n\ - \x05\x05\x07\x02\x14\x01\x12\x04\xa2\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\ - \x14\x12\x04\xa2\x06\x02\x0c\n\r\n\x05\x05\x07\x02\x14\x02\x12\x04\xa2\ - \x06\t\x0b\n\r\n\x05\x05\x07\x02\x15\x01\x12\x04\xa3\x06\x02\x06\n\x0c\n\ - \x04\x05\x07\x02\x15\x12\x04\xa3\x06\x02\x0b\n\r\n\x05\x05\x07\x02\x15\ - \x02\x12\x04\xa3\x06\t\n\n\r\n\x05\x05\x07\x02\x16\x01\x12\x04\xa4\x06\ - \x02\x08\n\x0c\n\x04\x05\x07\x02\x16\x12\x04\xa4\x06\x02\x0e\n\r\n\x05\ - \x05\x07\x02\x16\x02\x12\x04\xa4\x06\x0b\r\n\r\n\x05\x05\x07\x02\x17\x01\ - \x12\x04\xa5\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\x17\x12\x04\xa5\x06\x02\ - \x0c\n\r\n\x05\x05\x07\x02\x17\x02\x12\x04\xa5\x06\t\x0b\n\r\n\x05\x05\ - \x07\x02\x18\x01\x12\x04\xa6\x06\x02\x0c\n\x0c\n\x04\x05\x07\x02\x18\x12\ - \x04\xa6\x06\x02\x12\n\r\n\x05\x05\x07\x02\x18\x02\x12\x04\xa6\x06\x0f\ - \x11\n\r\n\x05\x05\x07\x02\x19\x01\x12\x04\xa7\x06\x02\x08\n\x0c\n\x04\ - \x05\x07\x02\x19\x12\x04\xa7\x06\x02\x0e\n\r\n\x05\x05\x07\x02\x19\x02\ - \x12\x04\xa7\x06\x0b\r\n\r\n\x05\x05\x07\x02\x1a\x01\x12\x04\xa8\x06\x02\ - \x08\n\x0c\n\x04\x05\x07\x02\x1a\x12\x04\xa8\x06\x02\x0e\n\r\n\x05\x05\ - \x07\x02\x1a\x02\x12\x04\xa8\x06\x0b\r\n\r\n\x05\x05\x07\x02\x1b\x01\x12\ - \x04\xa9\x06\x02\x08\n\x0c\n\x04\x05\x07\x02\x1b\x12\x04\xa9\x06\x02\x0e\ - \n\r\n\x05\x05\x07\x02\x1b\x02\x12\x04\xa9\x06\x0b\r\n\r\n\x05\x05\x07\ - \x02\x1c\x01\x12\x04\xaa\x06\x02\x08\n\x0c\n\x04\x05\x07\x02\x1c\x12\x04\ - \xaa\x06\x02\x0e\n\r\n\x05\x05\x07\x02\x1c\x02\x12\x04\xaa\x06\x0b\r\n\r\ - \n\x05\x05\x07\x02\x1d\x01\x12\x04\xab\x06\x02\x06\n\x0c\n\x04\x05\x07\ - \x02\x1d\x12\x04\xab\x06\x02\x0c\n\r\n\x05\x05\x07\x02\x1d\x02\x12\x04\ - \xab\x06\t\x0b\n\r\n\x05\x05\x07\x02\x1e\x01\x12\x04\xac\x06\x02\x06\n\ - \x0c\n\x04\x05\x07\x02\x1e\x12\x04\xac\x06\x02\x0c\n\r\n\x05\x05\x07\x02\ - \x1e\x02\x12\x04\xac\x06\t\x0b\n\r\n\x05\x05\x07\x02\x1f\x01\x12\x04\xad\ - \x06\x02\t\n\x0c\n\x04\x05\x07\x02\x1f\x12\x04\xad\x06\x02\x0f\n\r\n\x05\ - \x05\x07\x02\x1f\x02\x12\x04\xad\x06\x0c\x0e\n\r\n\x05\x05\x07\x02\x20\ - \x01\x12\x04\xae\x06\x02\x0c\n\x0c\n\x04\x05\x07\x02\x20\x12\x04\xae\x06\ - \x02\x12\n\r\n\x05\x05\x07\x02\x20\x02\x12\x04\xae\x06\x0f\x11\n\r\n\x05\ - \x05\x07\x02!\x01\x12\x04\xaf\x06\x02\x0c\n\x0c\n\x04\x05\x07\x02!\x12\ - \x04\xaf\x06\x02\x12\n\r\n\x05\x05\x07\x02!\x02\x12\x04\xaf\x06\x0f\x11\ - \n\r\n\x05\x05\x07\x02\"\x01\x12\x04\xb0\x06\x02\x0c\n\x0c\n\x04\x05\x07\ - \x02\"\x12\x04\xb0\x06\x02\x12\n\r\n\x05\x05\x07\x02\"\x02\x12\x04\xb0\ - \x06\x0f\x11\n\r\n\x05\x05\x07\x02#\x01\x12\x04\xb1\x06\x02\x04\n\x0c\n\ - \x04\x05\x07\x02#\x12\x04\xb1\x06\x02\n\n\r\n\x05\x05\x07\x02#\x02\x12\ - \x04\xb1\x06\x07\t\n\r\n\x05\x05\x07\x02$\x01\x12\x04\xb2\x06\x02\t\n\ - \x0c\n\x04\x05\x07\x02$\x12\x04\xb2\x06\x02\x0f\n\r\n\x05\x05\x07\x02$\ - \x02\x12\x04\xb2\x06\x0c\x0e\n\r\n\x05\x05\x07\x02%\x01\x12\x04\xb3\x06\ - \x02\x08\n\x0c\n\x04\x05\x07\x02%\x12\x04\xb3\x06\x02\r\n\r\n\x05\x05\ - \x07\x02%\x02\x12\x04\xb3\x06\x0b\x0c\n\r\n\x05\x05\x07\x02&\x01\x12\x04\ - \xb4\x06\x02\x06\n\x0c\n\x04\x05\x07\x02&\x12\x04\xb4\x06\x02\x0c\n\r\n\ - \x05\x05\x07\x02&\x02\x12\x04\xb4\x06\t\x0b\n\r\n\x05\x05\x07\x02'\x01\ - \x12\x04\xb5\x06\x02\x06\n\x0c\n\x04\x05\x07\x02'\x12\x04\xb5\x06\x02\ - \x0c\n\r\n\x05\x05\x07\x02'\x02\x12\x04\xb5\x06\t\x0b\n\r\n\x05\x05\x07\ - \x02(\x01\x12\x04\xb6\x06\x02\x0c\n\x0c\n\x04\x05\x07\x02(\x12\x04\xb6\ - \x06\x02\x12\n\r\n\x05\x05\x07\x02(\x02\x12\x04\xb6\x06\x0f\x11\n\r\n\ - \x05\x05\x07\x02)\x01\x12\x04\xb7\x06\x02\t\n\x0c\n\x04\x05\x07\x02)\x12\ - \x04\xb7\x06\x02\x0f\n\r\n\x05\x05\x07\x02)\x02\x12\x04\xb7\x06\x0c\x0e\ - \n\r\n\x05\x05\x07\x02*\x01\x12\x04\xb8\x06\x02\x07\n\x0c\n\x04\x05\x07\ - \x02*\x12\x04\xb8\x06\x02\r\n\r\n\x05\x05\x07\x02*\x02\x12\x04\xb8\x06\n\ - \x0c\n\r\n\x05\x05\x07\x02+\x01\x12\x04\xb9\x06\x02\x05\n\x0c\n\x04\x05\ - \x07\x02+\x12\x04\xb9\x06\x02\x0b\n\r\n\x05\x05\x07\x02+\x02\x12\x04\xb9\ - \x06\x08\n\n\r\n\x05\x05\x07\x02,\x01\x12\x04\xba\x06\x02\x03\n\x0c\n\ - \x04\x05\x07\x02,\x12\x04\xba\x06\x02\t\n\r\n\x05\x05\x07\x02,\x02\x12\ - \x04\xba\x06\x06\x08\n\r\n\x05\x05\x07\x02-\x01\x12\x04\xbb\x06\x02\x06\ - \n\x0c\n\x04\x05\x07\x02-\x12\x04\xbb\x06\x02\x0c\n\r\n\x05\x05\x07\x02-\ - \x02\x12\x04\xbb\x06\t\x0b\n\r\n\x05\x05\x07\x02.\x01\x12\x04\xbc\x06\ - \x02\x06\n\x0c\n\x04\x05\x07\x02.\x12\x04\xbc\x06\x02\x0b\n\r\n\x05\x05\ - \x07\x02.\x02\x12\x04\xbc\x06\t\n\n\r\n\x05\x05\x07\x02/\x01\x12\x04\xbd\ - \x06\x02\x0c\n\x0c\n\x04\x05\x07\x02/\x12\x04\xbd\x06\x02\x12\n\r\n\x05\ - \x05\x07\x02/\x02\x12\x04\xbd\x06\x0f\x11\n\r\n\x05\x05\x07\x020\x01\x12\ - \x04\xbe\x06\x02\x11\n\x0c\n\x04\x05\x07\x020\x12\x04\xbe\x06\x02\x17\n\ - \r\n\x05\x05\x07\x020\x02\x12\x04\xbe\x06\x14\x16\n\r\n\x05\x05\x07\x021\ - \x01\x12\x04\xbf\x06\x02\t\n\x0c\n\x04\x05\x07\x021\x12\x04\xbf\x06\x02\ - \x0f\n\r\n\x05\x05\x07\x021\x02\x12\x04\xbf\x06\x0c\x0e\n\r\n\x05\x05\ - \x07\x022\x01\x12\x04\xc0\x06\x02\x07\n\x0c\n\x04\x05\x07\x022\x12\x04\ - \xc0\x06\x02\r\n\r\n\x05\x05\x07\x022\x02\x12\x04\xc0\x06\n\x0c\n\r\n\ - \x05\x05\x07\x023\x01\x12\x04\xc1\x06\x02\n\n\x0c\n\x04\x05\x07\x023\x12\ - \x04\xc1\x06\x02\x11\n\r\n\x05\x05\x07\x023\x02\x12\x04\xc1\x06\r\x10\n\ - \r\n\x05\x05\x07\x024\x01\x12\x04\xc2\x06\x02\x08\n\x0c\n\x04\x05\x07\ - \x024\x12\x04\xc2\x06\x02\r\n\r\n\x05\x05\x07\x024\x02\x12\x04\xc2\x06\ - \x0b\x0c\n\r\n\x05\x05\x07\x025\x01\x12\x04\xc3\x06\x02\x07\n\x0c\n\x04\ - \x05\x07\x025\x12\x04\xc3\x06\x02\r\n\r\n\x05\x05\x07\x025\x02\x12\x04\ - \xc3\x06\n\x0c\n\r\n\x05\x05\x07\x026\x01\x12\x04\xc4\x06\x02\x06\n\x0c\ - \n\x04\x05\x07\x026\x12\x04\xc4\x06\x02\x0c\n\r\n\x05\x05\x07\x026\x02\ - \x12\x04\xc4\x06\t\x0b\n\r\n\x05\x05\x07\x027\x01\x12\x04\xc5\x06\x02\ - \x06\n\x0c\n\x04\x05\x07\x027\x12\x04\xc5\x06\x02\x0c\n\r\n\x05\x05\x07\ - \x027\x02\x12\x04\xc5\x06\t\x0b\n\r\n\x05\x05\x07\x028\x01\x12\x04\xc6\ - \x06\x02\x05\n\x0c\n\x04\x05\x07\x028\x12\x04\xc6\x06\x02\x0b\n\r\n\x05\ - \x05\x07\x028\x02\x12\x04\xc6\x06\x08\n\n\r\n\x05\x05\x07\x029\x01\x12\ - \x04\xc7\x06\x02\x06\n\x0c\n\x04\x05\x07\x029\x12\x04\xc7\x06\x02\r\n\r\ - \n\x05\x05\x07\x029\x02\x12\x04\xc7\x06\t\x0c\n\r\n\x05\x05\x07\x02:\x01\ - \x12\x04\xc8\x06\x02\n\n\x0c\n\x04\x05\x07\x02:\x12\x04\xc8\x06\x02\x10\ - \n\r\n\x05\x05\x07\x02:\x02\x12\x04\xc8\x06\r\x0f\n\r\n\x05\x05\x07\x02;\ - \x01\x12\x04\xc9\x06\x02\n\n\x0c\n\x04\x05\x07\x02;\x12\x04\xc9\x06\x02\ - \x10\n\r\n\x05\x05\x07\x02;\x02\x12\x04\xc9\x06\r\x0f\n\r\n\x05\x05\x07\ - \x02<\x01\x12\x04\xca\x06\x02\x08\n\x0c\n\x04\x05\x07\x02<\x12\x04\xca\ - \x06\x02\x0e\n\r\n\x05\x05\x07\x02<\x02\x12\x04\xca\x06\x0b\r\n\r\n\x05\ - \x05\x07\x02=\x01\x12\x04\xcb\x06\x02\x08\n'\n\x04\x05\x07\x02=\x12\x04\ - \xcb\x06\x02\x0f\"\x19\x20https://nickel-lang.org/\n\r\n\x05\x05\x07\x02\ - =\x02\x12\x04\xcb\x06\x0b\x0e\n\r\n\x05\x05\x07\x02>\x01\x12\x04\xcc\x06\ - \x02\x05\n\x0c\n\x04\x05\x07\x02>\x12\x04\xcc\x06\x02\x0b\n\r\n\x05\x05\ - \x07\x02>\x02\x12\x04\xcc\x06\x08\n\n\r\n\x05\x05\x07\x02?\x01\x12\x04\ - \xcd\x06\x02\x07\n\x0c\n\x04\x05\x07\x02?\x12\x04\xcd\x06\x02\r\n\r\n\ - \x05\x05\x07\x02?\x02\x12\x04\xcd\x06\n\x0c\n\r\n\x05\x05\x07\x02@\x01\ - \x12\x04\xce\x06\x02\r\n\x0c\n\x04\x05\x07\x02@\x12\x04\xce\x06\x02\x13\ - \n\r\n\x05\x05\x07\x02@\x02\x12\x04\xce\x06\x10\x12\n\r\n\x05\x05\x07\ - \x02A\x01\x12\x04\xcf\x06\x02\x0f\n\x0c\n\x04\x05\x07\x02A\x12\x04\xcf\ - \x06\x02\x15\n\r\n\x05\x05\x07\x02A\x02\x12\x04\xcf\x06\x12\x14\n\r\n\ - \x05\x05\x07\x02B\x01\x12\x04\xd0\x06\x02\x08\n\x0c\n\x04\x05\x07\x02B\ - \x12\x04\xd0\x06\x02\x0e\n\r\n\x05\x05\x07\x02B\x02\x12\x04\xd0\x06\x0b\ - \r\n\r\n\x05\x05\x07\x02C\x01\x12\x04\xd1\x06\x02\x05\n\x0c\n\x04\x05\ - \x07\x02C\x12\x04\xd1\x06\x02\x0b\n\r\n\x05\x05\x07\x02C\x02\x12\x04\xd1\ - \x06\x08\n\n\r\n\x05\x05\x07\x02D\x01\x12\x04\xd2\x06\x02\x07\n\x0c\n\ - \x04\x05\x07\x02D\x12\x04\xd2\x06\x02\r\n\r\n\x05\x05\x07\x02D\x02\x12\ - \x04\xd2\x06\n\x0c\n\r\n\x05\x05\x07\x02E\x01\x12\x04\xd3\x06\x02\x06\n\ - \x0c\n\x04\x05\x07\x02E\x12\x04\xd3\x06\x02\x0c\n\r\n\x05\x05\x07\x02E\ - \x02\x12\x04\xd3\x06\t\x0b\n\r\n\x05\x05\x07\x02F\x01\x12\x04\xd4\x06\ - \x02\x0c\n\x0c\n\x04\x05\x07\x02F\x12\x04\xd4\x06\x02\x12\n\r\n\x05\x05\ - \x07\x02F\x02\x12\x04\xd4\x06\x0f\x11\n\r\n\x05\x05\x07\x02G\x01\x12\x04\ - \xd5\x06\x02\x08\n\x0c\n\x04\x05\x07\x02G\x12\x04\xd5\x06\x02\x0e\n\r\n\ - \x05\x05\x07\x02G\x02\x12\x04\xd5\x06\x0b\r\n\r\n\x05\x05\x07\x02H\x01\ - \x12\x04\xd6\x06\x02\n\n\x0c\n\x04\x05\x07\x02H\x12\x04\xd6\x06\x02\x11\ - \n\r\n\x05\x05\x07\x02H\x02\x12\x04\xd6\x06\r\x10\n\r\n\x05\x05\x07\x02I\ - \x01\x12\x04\xd7\x06\x02\x08\n\x0c\n\x04\x05\x07\x02I\x12\x04\xd7\x06\ - \x02\x0e\n\r\n\x05\x05\x07\x02I\x02\x12\x04\xd7\x06\x0b\r\n\r\n\x05\x05\ - \x07\x02J\x01\x12\x04\xd8\x06\x02\x03\n\x0c\n\x04\x05\x07\x02J\x12\x04\ - \xd8\x06\x02\t\n\r\n\x05\x05\x07\x02J\x02\x12\x04\xd8\x06\x06\x08\n\r\n\ - \x05\x05\x07\x02K\x01\x12\x04\xd9\x06\x02\x08\n\x0c\n\x04\x05\x07\x02K\ - \x12\x04\xd9\x06\x02\x0e\n\r\n\x05\x05\x07\x02K\x02\x12\x04\xd9\x06\x0b\ - \r\n\r\n\x05\x05\x07\x02L\x01\x12\x04\xda\x06\x02\x06\n\x0c\n\x04\x05\ - \x07\x02L\x12\x04\xda\x06\x02\x0c\n\r\n\x05\x05\x07\x02L\x02\x12\x04\xda\ - \x06\t\x0b\n\r\n\x05\x05\x07\x02M\x01\x12\x04\xdb\x06\x02\x07\n\x0c\n\ - \x04\x05\x07\x02M\x12\x04\xdb\x06\x02\r\n\r\n\x05\x05\x07\x02M\x02\x12\ - \x04\xdb\x06\n\x0c\n\r\n\x05\x05\x07\x02N\x01\x12\x04\xdc\x06\x02\x07\n1\ - \n\x04\x05\x07\x02N\x12\x04\xdc\x06\x02\x0e\"#\x20Internal\x20language\ - \x20for\x20testing\x20SCIP\n\r\n\x05\x05\x07\x02N\x02\x12\x04\xdc\x06\n\ - \r\n\r\n\x05\x05\x07\x02O\x01\x12\x04\xdd\x06\x02\x06\n\x0c\n\x04\x05\ - \x07\x02O\x12\x04\xdd\x06\x02\x0c\n\r\n\x05\x05\x07\x02O\x02\x12\x04\xdd\ - \x06\t\x0b\n\r\n\x05\x05\x07\x02P\x01\x12\x04\xde\x06\x02\x06\n\x0c\n\ - \x04\x05\x07\x02P\x12\x04\xde\x06\x02\x0c\n\r\n\x05\x05\x07\x02P\x02\x12\ - \x04\xde\x06\t\x0b\n\r\n\x05\x05\x07\x02Q\x01\x12\x04\xdf\x06\x02\x06\n\ - \x0c\n\x04\x05\x07\x02Q\x12\x04\xdf\x06\x02\x0c\n\r\n\x05\x05\x07\x02Q\ - \x02\x12\x04\xdf\x06\t\x0b\n\r\n\x05\x05\x07\x02R\x01\x12\x04\xe0\x06\ - \x02\x05\n\x0c\n\x04\x05\x07\x02R\x12\x04\xe0\x06\x02\x0b\n\r\n\x05\x05\ - \x07\x02R\x02\x12\x04\xe0\x06\x08\n\n\r\n\x05\x05\x07\x02S\x01\x12\x04\ - \xe1\x06\x02\x06\n\x0c\n\x04\x05\x07\x02S\x12\x04\xe1\x06\x02\x0c\n\r\n\ - \x05\x05\x07\x02S\x02\x12\x04\xe1\x06\t\x0b\n\r\n\x05\x05\x07\x02T\x01\ - \x12\x04\xe2\x06\x02\x05\n\x0c\n\x04\x05\x07\x02T\x12\x04\xe2\x06\x02\ - \x0b\n\r\n\x05\x05\x07\x02T\x02\x12\x04\xe2\x06\x08\n\n\r\n\x05\x05\x07\ - \x02U\x01\x12\x04\xe3\x06\x02\x05\n\x0c\n\x04\x05\x07\x02U\x12\x04\xe3\ - \x06\x02\x0b\n\r\n\x05\x05\x07\x02U\x02\x12\x04\xe3\x06\x08\n\n\r\n\x05\ - \x05\x07\x02V\x01\x12\x04\xe4\x06\x02\x06\n\x0c\n\x04\x05\x07\x02V\x12\ - \x04\xe4\x06\x02\x0c\n\r\n\x05\x05\x07\x02V\x02\x12\x04\xe4\x06\t\x0b\n\ - \r\n\x05\x05\x07\x02W\x01\x12\x04\xe5\x06\x02\x07\n\x0c\n\x04\x05\x07\ - \x02W\x12\x04\xe5\x06\x02\x0c\n\r\n\x05\x05\x07\x02W\x02\x12\x04\xe5\x06\ - \n\x0b\n\r\n\x05\x05\x07\x02X\x01\x12\x04\xe6\x06\x02\x08\n\x0c\n\x04\ - \x05\x07\x02X\x12\x04\xe6\x06\x02\x0e\n\r\n\x05\x05\x07\x02X\x02\x12\x04\ - \xe6\x06\x0b\r\n\r\n\x05\x05\x07\x02Y\x01\x12\x04\xe7\x06\x02\r\n\x13\n\ - \x04\x05\x07\x02Y\x12\x04\xe7\x06\x02\x13\"\x05\x20Bash\n\r\n\x05\x05\ - \x07\x02Y\x02\x12\x04\xe7\x06\x10\x12\n\r\n\x05\x05\x07\x02Z\x01\x12\x04\ - \xe8\x06\x02\t\n\x0c\n\x04\x05\x07\x02Z\x12\x04\xe8\x06\x02\x0f\n\r\n\ - \x05\x05\x07\x02Z\x02\x12\x04\xe8\x06\x0c\x0e\n\r\n\x05\x05\x07\x02[\x01\ - \x12\x04\xe9\x06\x02\x07\n\x0c\n\x04\x05\x07\x02[\x12\x04\xe9\x06\x02\ - \x0e\n\r\n\x05\x05\x07\x02[\x02\x12\x04\xe9\x06\n\r\n\r\n\x05\x05\x07\ - \x02\\\x01\x12\x04\xea\x06\x02\n\n\x0c\n\x04\x05\x07\x02\\\x12\x04\xea\ - \x06\x02\x10\n\r\n\x05\x05\x07\x02\\\x02\x12\x04\xea\x06\r\x0f\n\r\n\x05\ - \x05\x07\x02]\x01\x12\x04\xeb\x06\x02\x08\n\x0c\n\x04\x05\x07\x02]\x12\ - \x04\xeb\x06\x02\x0f\n\r\n\x05\x05\x07\x02]\x02\x12\x04\xeb\x06\x0b\x0e\ - \n\r\n\x05\x05\x07\x02^\x01\x12\x04\xec\x06\x02\x07\n\x0c\n\x04\x05\x07\ - \x02^\x12\x04\xec\x06\x02\x0c\n\r\n\x05\x05\x07\x02^\x02\x12\x04\xec\x06\ - \n\x0b\n\r\n\x05\x05\x07\x02_\x01\x12\x04\xed\x06\x02\x05\n\x0c\n\x04\ - \x05\x07\x02_\x12\x04\xed\x06\x02\x0c\n\r\n\x05\x05\x07\x02_\x02\x12\x04\ - \xed\x06\x08\x0b\n\r\n\x05\x05\x07\x02`\x01\x12\x04\xee\x06\x02\x06\n\ - \x0c\n\x04\x05\x07\x02`\x12\x04\xee\x06\x02\x0c\n\r\n\x05\x05\x07\x02`\ - \x02\x12\x04\xee\x06\t\x0b\n\r\n\x05\x05\x07\x02a\x01\x12\x04\xef\x06\ - \x02\x05\n\x0c\n\x04\x05\x07\x02a\x12\x04\xef\x06\x02\x0b\n\r\n\x05\x05\ - \x07\x02a\x02\x12\x04\xef\x06\x08\n\n\r\n\x05\x05\x07\x02b\x01\x12\x04\ - \xf0\x06\x02\x08\n\x0c\n\x04\x05\x07\x02b\x12\x04\xf0\x06\x02\x0f\n\r\n\ - \x05\x05\x07\x02b\x02\x12\x04\xf0\x06\x0b\x0e\n\r\n\x05\x05\x07\x02c\x01\ - \x12\x04\xf1\x06\x02\x0c\n\x0c\n\x04\x05\x07\x02c\x12\x04\xf1\x06\x02\ - \x12\n\r\n\x05\x05\x07\x02c\x02\x12\x04\xf1\x06\x0f\x11\n\r\n\x05\x05\ - \x07\x02d\x01\x12\x04\xf2\x06\x02\x11\n\x0c\n\x04\x05\x07\x02d\x12\x04\ - \xf2\x06\x02\x17\n\r\n\x05\x05\x07\x02d\x02\x12\x04\xf2\x06\x14\x16\n\r\ - \n\x05\x05\x07\x02e\x01\x12\x04\xf3\x06\x02\t\n\x0c\n\x04\x05\x07\x02e\ - \x12\x04\xf3\x06\x02\x10\n\r\n\x05\x05\x07\x02e\x02\x12\x04\xf3\x06\x0c\ - \x0f\n\r\n\x05\x05\x07\x02f\x01\x12\x04\xf4\x06\x02\x06\n\x0c\n\x04\x05\ - \x07\x02f\x12\x04\xf4\x06\x02\r\n\r\n\x05\x05\x07\x02f\x02\x12\x04\xf4\ - \x06\t\x0c\n\r\n\x05\x05\x07\x02g\x01\x12\x04\xf5\x06\x02\r\n\x0c\n\x04\ - \x05\x07\x02g\x12\x04\xf5\x06\x02\x13\n\r\n\x05\x05\x07\x02g\x02\x12\x04\ - \xf5\x06\x10\x12\n\r\n\x05\x05\x07\x02h\x01\x12\x04\xf6\x06\x02\x05\n\ - \x0c\n\x04\x05\x07\x02h\x12\x04\xf6\x06\x02\x0b\n\r\n\x05\x05\x07\x02h\ - \x02\x12\x04\xf6\x06\x08\n\n\r\n\x05\x05\x07\x02i\x01\x12\x04\xf7\x06\ - \x02\t\n\x0c\n\x04\x05\x07\x02i\x12\x04\xf7\x06\x02\x0f\n\r\n\x05\x05\ - \x07\x02i\x02\x12\x04\xf7\x06\x0c\x0e\n\r\n\x05\x05\x07\x02j\x01\x12\x04\ - \xf8\x06\x02\x05\n\x0c\n\x04\x05\x07\x02j\x12\x04\xf8\x06\x02\x0b\n\r\n\ - \x05\x05\x07\x02j\x02\x12\x04\xf8\x06\x08\n\n\r\n\x05\x05\x07\x02k\x01\ - \x12\x04\xf9\x06\x02\x05\n\x0c\n\x04\x05\x07\x02k\x12\x04\xf9\x06\x02\ - \x0b\n\r\n\x05\x05\x07\x02k\x02\x12\x04\xf9\x06\x08\n\n\r\n\x05\x05\x07\ - \x02l\x01\x12\x04\xfa\x06\x02\x06\n\x0c\n\x04\x05\x07\x02l\x12\x04\xfa\ - \x06\x02\x0c\n\r\n\x05\x05\x07\x02l\x02\x12\x04\xfa\x06\t\x0b\n\r\n\x05\ - \x05\x07\x02m\x01\x12\x04\xfb\x06\x02\x05\n\x93\x03\n\x04\x05\x07\x02m\ - \x12\x04\xfb\x06\x02\x0b\"\x84\x03\x20NextLanguage\x20=\x20111;\n\x20Ste\ + \x07\x02\r\x02\x12\x04\xb4\x06\x08\n\n\r\n\x05\x05\x07\x02\x0e\x01\x12\ + \x04\xb5\x06\x02\x05\n\x0c\n\x04\x05\x07\x02\x0e\x12\x04\xb5\x06\x02\x0b\ + \n\r\n\x05\x05\x07\x02\x0e\x02\x12\x04\xb5\x06\x08\n\n\r\n\x05\x05\x07\ + \x02\x0f\x01\x12\x04\xb6\x06\x02\x08\n\x0c\n\x04\x05\x07\x02\x0f\x12\x04\ + \xb6\x06\x02\r\n\r\n\x05\x05\x07\x02\x0f\x02\x12\x04\xb6\x06\x0b\x0c\n\r\ + \n\x05\x05\x07\x02\x10\x01\x12\x04\xb7\x06\x02\t\n\x0c\n\x04\x05\x07\x02\ + \x10\x12\x04\xb7\x06\x02\x0e\n\r\n\x05\x05\x07\x02\x10\x02\x12\x04\xb7\ + \x06\x0c\r\n\r\n\x05\x05\x07\x02\x11\x01\x12\x04\xb8\x06\x02\x0e\n\x0c\n\ + \x04\x05\x07\x02\x11\x12\x04\xb8\x06\x02\x14\n\r\n\x05\x05\x07\x02\x11\ + \x02\x12\x04\xb8\x06\x11\x13\n\r\n\x05\x05\x07\x02\x12\x01\x12\x04\xb9\ + \x06\x02\x0c\n\x0c\n\x04\x05\x07\x02\x12\x12\x04\xb9\x06\x02\x11\n\r\n\ + \x05\x05\x07\x02\x12\x02\x12\x04\xb9\x06\x0f\x10\n\r\n\x05\x05\x07\x02\ + \x13\x01\x12\x04\xba\x06\x02\x05\n\x0c\n\x04\x05\x07\x02\x13\x12\x04\xba\ + \x06\x02\x0b\n\r\n\x05\x05\x07\x02\x13\x02\x12\x04\xba\x06\x08\n\n\r\n\ + \x05\x05\x07\x02\x14\x01\x12\x04\xbb\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\ + \x14\x12\x04\xbb\x06\x02\x0c\n\r\n\x05\x05\x07\x02\x14\x02\x12\x04\xbb\ + \x06\t\x0b\n\r\n\x05\x05\x07\x02\x15\x01\x12\x04\xbc\x06\x02\x06\n\x0c\n\ + \x04\x05\x07\x02\x15\x12\x04\xbc\x06\x02\x0b\n\r\n\x05\x05\x07\x02\x15\ + \x02\x12\x04\xbc\x06\t\n\n\r\n\x05\x05\x07\x02\x16\x01\x12\x04\xbd\x06\ + \x02\x08\n\x0c\n\x04\x05\x07\x02\x16\x12\x04\xbd\x06\x02\x0e\n\r\n\x05\ + \x05\x07\x02\x16\x02\x12\x04\xbd\x06\x0b\r\n\r\n\x05\x05\x07\x02\x17\x01\ + \x12\x04\xbe\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\x17\x12\x04\xbe\x06\x02\ + \x0c\n\r\n\x05\x05\x07\x02\x17\x02\x12\x04\xbe\x06\t\x0b\n\r\n\x05\x05\ + \x07\x02\x18\x01\x12\x04\xbf\x06\x02\x0c\n\x0c\n\x04\x05\x07\x02\x18\x12\ + \x04\xbf\x06\x02\x12\n\r\n\x05\x05\x07\x02\x18\x02\x12\x04\xbf\x06\x0f\ + \x11\n\r\n\x05\x05\x07\x02\x19\x01\x12\x04\xc0\x06\x02\x08\n\x0c\n\x04\ + \x05\x07\x02\x19\x12\x04\xc0\x06\x02\x0e\n\r\n\x05\x05\x07\x02\x19\x02\ + \x12\x04\xc0\x06\x0b\r\n\r\n\x05\x05\x07\x02\x1a\x01\x12\x04\xc1\x06\x02\ + \x08\n\x0c\n\x04\x05\x07\x02\x1a\x12\x04\xc1\x06\x02\x0e\n\r\n\x05\x05\ + \x07\x02\x1a\x02\x12\x04\xc1\x06\x0b\r\n\r\n\x05\x05\x07\x02\x1b\x01\x12\ + \x04\xc2\x06\x02\x08\n\x0c\n\x04\x05\x07\x02\x1b\x12\x04\xc2\x06\x02\x0e\ + \n\r\n\x05\x05\x07\x02\x1b\x02\x12\x04\xc2\x06\x0b\r\n\r\n\x05\x05\x07\ + \x02\x1c\x01\x12\x04\xc3\x06\x02\x08\n\x0c\n\x04\x05\x07\x02\x1c\x12\x04\ + \xc3\x06\x02\x0e\n\r\n\x05\x05\x07\x02\x1c\x02\x12\x04\xc3\x06\x0b\r\n\r\ + \n\x05\x05\x07\x02\x1d\x01\x12\x04\xc4\x06\x02\x06\n\x0c\n\x04\x05\x07\ + \x02\x1d\x12\x04\xc4\x06\x02\x0c\n\r\n\x05\x05\x07\x02\x1d\x02\x12\x04\ + \xc4\x06\t\x0b\n\r\n\x05\x05\x07\x02\x1e\x01\x12\x04\xc5\x06\x02\x06\n\ + \x0c\n\x04\x05\x07\x02\x1e\x12\x04\xc5\x06\x02\x0c\n\r\n\x05\x05\x07\x02\ + \x1e\x02\x12\x04\xc5\x06\t\x0b\n\r\n\x05\x05\x07\x02\x1f\x01\x12\x04\xc6\ + \x06\x02\t\n\x0c\n\x04\x05\x07\x02\x1f\x12\x04\xc6\x06\x02\x0f\n\r\n\x05\ + \x05\x07\x02\x1f\x02\x12\x04\xc6\x06\x0c\x0e\n\r\n\x05\x05\x07\x02\x20\ + \x01\x12\x04\xc7\x06\x02\x0c\n\x0c\n\x04\x05\x07\x02\x20\x12\x04\xc7\x06\ + \x02\x12\n\r\n\x05\x05\x07\x02\x20\x02\x12\x04\xc7\x06\x0f\x11\n\r\n\x05\ + \x05\x07\x02!\x01\x12\x04\xc8\x06\x02\x0c\n\x0c\n\x04\x05\x07\x02!\x12\ + \x04\xc8\x06\x02\x12\n\r\n\x05\x05\x07\x02!\x02\x12\x04\xc8\x06\x0f\x11\ + \n\r\n\x05\x05\x07\x02\"\x01\x12\x04\xc9\x06\x02\x0c\n\x0c\n\x04\x05\x07\ + \x02\"\x12\x04\xc9\x06\x02\x12\n\r\n\x05\x05\x07\x02\"\x02\x12\x04\xc9\ + \x06\x0f\x11\n\r\n\x05\x05\x07\x02#\x01\x12\x04\xca\x06\x02\x04\n\x0c\n\ + \x04\x05\x07\x02#\x12\x04\xca\x06\x02\n\n\r\n\x05\x05\x07\x02#\x02\x12\ + \x04\xca\x06\x07\t\n\r\n\x05\x05\x07\x02$\x01\x12\x04\xcb\x06\x02\t\n\ + \x0c\n\x04\x05\x07\x02$\x12\x04\xcb\x06\x02\x0f\n\r\n\x05\x05\x07\x02$\ + \x02\x12\x04\xcb\x06\x0c\x0e\n\r\n\x05\x05\x07\x02%\x01\x12\x04\xcc\x06\ + \x02\x08\n\x0c\n\x04\x05\x07\x02%\x12\x04\xcc\x06\x02\r\n\r\n\x05\x05\ + \x07\x02%\x02\x12\x04\xcc\x06\x0b\x0c\n\r\n\x05\x05\x07\x02&\x01\x12\x04\ + \xcd\x06\x02\x06\n\x0c\n\x04\x05\x07\x02&\x12\x04\xcd\x06\x02\x0c\n\r\n\ + \x05\x05\x07\x02&\x02\x12\x04\xcd\x06\t\x0b\n\r\n\x05\x05\x07\x02'\x01\ + \x12\x04\xce\x06\x02\x06\n\x0c\n\x04\x05\x07\x02'\x12\x04\xce\x06\x02\ + \x0c\n\r\n\x05\x05\x07\x02'\x02\x12\x04\xce\x06\t\x0b\n\r\n\x05\x05\x07\ + \x02(\x01\x12\x04\xcf\x06\x02\x0c\n\x0c\n\x04\x05\x07\x02(\x12\x04\xcf\ + \x06\x02\x12\n\r\n\x05\x05\x07\x02(\x02\x12\x04\xcf\x06\x0f\x11\n\r\n\ + \x05\x05\x07\x02)\x01\x12\x04\xd0\x06\x02\t\n\x0c\n\x04\x05\x07\x02)\x12\ + \x04\xd0\x06\x02\x0f\n\r\n\x05\x05\x07\x02)\x02\x12\x04\xd0\x06\x0c\x0e\ + \n\r\n\x05\x05\x07\x02*\x01\x12\x04\xd1\x06\x02\x07\n\x0c\n\x04\x05\x07\ + \x02*\x12\x04\xd1\x06\x02\r\n\r\n\x05\x05\x07\x02*\x02\x12\x04\xd1\x06\n\ + \x0c\n\r\n\x05\x05\x07\x02+\x01\x12\x04\xd2\x06\x02\x05\n\x0c\n\x04\x05\ + \x07\x02+\x12\x04\xd2\x06\x02\x0b\n\r\n\x05\x05\x07\x02+\x02\x12\x04\xd2\ + \x06\x08\n\n\r\n\x05\x05\x07\x02,\x01\x12\x04\xd3\x06\x02\x03\n\x0c\n\ + \x04\x05\x07\x02,\x12\x04\xd3\x06\x02\t\n\r\n\x05\x05\x07\x02,\x02\x12\ + \x04\xd3\x06\x06\x08\n\r\n\x05\x05\x07\x02-\x01\x12\x04\xd4\x06\x02\x06\ + \n\x0c\n\x04\x05\x07\x02-\x12\x04\xd4\x06\x02\x0c\n\r\n\x05\x05\x07\x02-\ + \x02\x12\x04\xd4\x06\t\x0b\n\r\n\x05\x05\x07\x02.\x01\x12\x04\xd5\x06\ + \x02\x06\n\x0c\n\x04\x05\x07\x02.\x12\x04\xd5\x06\x02\x0b\n\r\n\x05\x05\ + \x07\x02.\x02\x12\x04\xd5\x06\t\n\n\r\n\x05\x05\x07\x02/\x01\x12\x04\xd6\ + \x06\x02\x0c\n\x0c\n\x04\x05\x07\x02/\x12\x04\xd6\x06\x02\x12\n\r\n\x05\ + \x05\x07\x02/\x02\x12\x04\xd6\x06\x0f\x11\n\r\n\x05\x05\x07\x020\x01\x12\ + \x04\xd7\x06\x02\x11\n\x0c\n\x04\x05\x07\x020\x12\x04\xd7\x06\x02\x17\n\ + \r\n\x05\x05\x07\x020\x02\x12\x04\xd7\x06\x14\x16\n\r\n\x05\x05\x07\x021\ + \x01\x12\x04\xd8\x06\x02\t\n\x0c\n\x04\x05\x07\x021\x12\x04\xd8\x06\x02\ + \x0f\n\r\n\x05\x05\x07\x021\x02\x12\x04\xd8\x06\x0c\x0e\n\r\n\x05\x05\ + \x07\x022\x01\x12\x04\xd9\x06\x02\x07\n\x0c\n\x04\x05\x07\x022\x12\x04\ + \xd9\x06\x02\r\n\r\n\x05\x05\x07\x022\x02\x12\x04\xd9\x06\n\x0c\n\r\n\ + \x05\x05\x07\x023\x01\x12\x04\xda\x06\x02\n\n\x0c\n\x04\x05\x07\x023\x12\ + \x04\xda\x06\x02\x11\n\r\n\x05\x05\x07\x023\x02\x12\x04\xda\x06\r\x10\n\ + \r\n\x05\x05\x07\x024\x01\x12\x04\xdb\x06\x02\x08\n\x0c\n\x04\x05\x07\ + \x024\x12\x04\xdb\x06\x02\r\n\r\n\x05\x05\x07\x024\x02\x12\x04\xdb\x06\ + \x0b\x0c\n\r\n\x05\x05\x07\x025\x01\x12\x04\xdc\x06\x02\x07\n\x0c\n\x04\ + \x05\x07\x025\x12\x04\xdc\x06\x02\r\n\r\n\x05\x05\x07\x025\x02\x12\x04\ + \xdc\x06\n\x0c\n\r\n\x05\x05\x07\x026\x01\x12\x04\xdd\x06\x02\x06\n\x0c\ + \n\x04\x05\x07\x026\x12\x04\xdd\x06\x02\x0c\n\r\n\x05\x05\x07\x026\x02\ + \x12\x04\xdd\x06\t\x0b\n\r\n\x05\x05\x07\x027\x01\x12\x04\xde\x06\x02\ + \x06\n\x0c\n\x04\x05\x07\x027\x12\x04\xde\x06\x02\x0c\n\r\n\x05\x05\x07\ + \x027\x02\x12\x04\xde\x06\t\x0b\n\r\n\x05\x05\x07\x028\x01\x12\x04\xdf\ + \x06\x02\x05\n\x0c\n\x04\x05\x07\x028\x12\x04\xdf\x06\x02\x0b\n\r\n\x05\ + \x05\x07\x028\x02\x12\x04\xdf\x06\x08\n\n\r\n\x05\x05\x07\x029\x01\x12\ + \x04\xe0\x06\x02\x06\n\x0c\n\x04\x05\x07\x029\x12\x04\xe0\x06\x02\r\n\r\ + \n\x05\x05\x07\x029\x02\x12\x04\xe0\x06\t\x0c\n\r\n\x05\x05\x07\x02:\x01\ + \x12\x04\xe1\x06\x02\n\n\x0c\n\x04\x05\x07\x02:\x12\x04\xe1\x06\x02\x10\ + \n\r\n\x05\x05\x07\x02:\x02\x12\x04\xe1\x06\r\x0f\n\r\n\x05\x05\x07\x02;\ + \x01\x12\x04\xe2\x06\x02\n\n\x0c\n\x04\x05\x07\x02;\x12\x04\xe2\x06\x02\ + \x10\n\r\n\x05\x05\x07\x02;\x02\x12\x04\xe2\x06\r\x0f\n\r\n\x05\x05\x07\ + \x02<\x01\x12\x04\xe3\x06\x02\x08\n\x0c\n\x04\x05\x07\x02<\x12\x04\xe3\ + \x06\x02\x0e\n\r\n\x05\x05\x07\x02<\x02\x12\x04\xe3\x06\x0b\r\n\r\n\x05\ + \x05\x07\x02=\x01\x12\x04\xe4\x06\x02\x08\n'\n\x04\x05\x07\x02=\x12\x04\ + \xe4\x06\x02\x0f\"\x19\x20https://nickel-lang.org/\n\r\n\x05\x05\x07\x02\ + =\x02\x12\x04\xe4\x06\x0b\x0e\n\r\n\x05\x05\x07\x02>\x01\x12\x04\xe5\x06\ + \x02\x05\n\x0c\n\x04\x05\x07\x02>\x12\x04\xe5\x06\x02\x0b\n\r\n\x05\x05\ + \x07\x02>\x02\x12\x04\xe5\x06\x08\n\n\r\n\x05\x05\x07\x02?\x01\x12\x04\ + \xe6\x06\x02\x07\n\x0c\n\x04\x05\x07\x02?\x12\x04\xe6\x06\x02\r\n\r\n\ + \x05\x05\x07\x02?\x02\x12\x04\xe6\x06\n\x0c\n\r\n\x05\x05\x07\x02@\x01\ + \x12\x04\xe7\x06\x02\r\n\x0c\n\x04\x05\x07\x02@\x12\x04\xe7\x06\x02\x13\ + \n\r\n\x05\x05\x07\x02@\x02\x12\x04\xe7\x06\x10\x12\n\r\n\x05\x05\x07\ + \x02A\x01\x12\x04\xe8\x06\x02\x0f\n\x0c\n\x04\x05\x07\x02A\x12\x04\xe8\ + \x06\x02\x15\n\r\n\x05\x05\x07\x02A\x02\x12\x04\xe8\x06\x12\x14\n\r\n\ + \x05\x05\x07\x02B\x01\x12\x04\xe9\x06\x02\x08\n\x0c\n\x04\x05\x07\x02B\ + \x12\x04\xe9\x06\x02\x0e\n\r\n\x05\x05\x07\x02B\x02\x12\x04\xe9\x06\x0b\ + \r\n\r\n\x05\x05\x07\x02C\x01\x12\x04\xea\x06\x02\x05\n\x0c\n\x04\x05\ + \x07\x02C\x12\x04\xea\x06\x02\x0b\n\r\n\x05\x05\x07\x02C\x02\x12\x04\xea\ + \x06\x08\n\n\r\n\x05\x05\x07\x02D\x01\x12\x04\xeb\x06\x02\x07\n\x0c\n\ + \x04\x05\x07\x02D\x12\x04\xeb\x06\x02\r\n\r\n\x05\x05\x07\x02D\x02\x12\ + \x04\xeb\x06\n\x0c\n\r\n\x05\x05\x07\x02E\x01\x12\x04\xec\x06\x02\x06\n\ + \x0c\n\x04\x05\x07\x02E\x12\x04\xec\x06\x02\x0c\n\r\n\x05\x05\x07\x02E\ + \x02\x12\x04\xec\x06\t\x0b\n\r\n\x05\x05\x07\x02F\x01\x12\x04\xed\x06\ + \x02\x0c\n\x0c\n\x04\x05\x07\x02F\x12\x04\xed\x06\x02\x12\n\r\n\x05\x05\ + \x07\x02F\x02\x12\x04\xed\x06\x0f\x11\n\r\n\x05\x05\x07\x02G\x01\x12\x04\ + \xee\x06\x02\x08\n\x0c\n\x04\x05\x07\x02G\x12\x04\xee\x06\x02\x0e\n\r\n\ + \x05\x05\x07\x02G\x02\x12\x04\xee\x06\x0b\r\n\r\n\x05\x05\x07\x02H\x01\ + \x12\x04\xef\x06\x02\n\n\x0c\n\x04\x05\x07\x02H\x12\x04\xef\x06\x02\x11\ + \n\r\n\x05\x05\x07\x02H\x02\x12\x04\xef\x06\r\x10\n\r\n\x05\x05\x07\x02I\ + \x01\x12\x04\xf0\x06\x02\x08\n\x0c\n\x04\x05\x07\x02I\x12\x04\xf0\x06\ + \x02\x0e\n\r\n\x05\x05\x07\x02I\x02\x12\x04\xf0\x06\x0b\r\n\r\n\x05\x05\ + \x07\x02J\x01\x12\x04\xf1\x06\x02\x03\n\x0c\n\x04\x05\x07\x02J\x12\x04\ + \xf1\x06\x02\t\n\r\n\x05\x05\x07\x02J\x02\x12\x04\xf1\x06\x06\x08\n\r\n\ + \x05\x05\x07\x02K\x01\x12\x04\xf2\x06\x02\x08\n\x0c\n\x04\x05\x07\x02K\ + \x12\x04\xf2\x06\x02\x0e\n\r\n\x05\x05\x07\x02K\x02\x12\x04\xf2\x06\x0b\ + \r\n\r\n\x05\x05\x07\x02L\x01\x12\x04\xf3\x06\x02\x06\n\x0c\n\x04\x05\ + \x07\x02L\x12\x04\xf3\x06\x02\x0c\n\r\n\x05\x05\x07\x02L\x02\x12\x04\xf3\ + \x06\t\x0b\n\r\n\x05\x05\x07\x02M\x01\x12\x04\xf4\x06\x02\x07\n\x0c\n\ + \x04\x05\x07\x02M\x12\x04\xf4\x06\x02\r\n\r\n\x05\x05\x07\x02M\x02\x12\ + \x04\xf4\x06\n\x0c\n\r\n\x05\x05\x07\x02N\x01\x12\x04\xf5\x06\x02\x07\n1\ + \n\x04\x05\x07\x02N\x12\x04\xf5\x06\x02\x0e\"#\x20Internal\x20language\ + \x20for\x20testing\x20SCIP\n\r\n\x05\x05\x07\x02N\x02\x12\x04\xf5\x06\n\ + \r\n\r\n\x05\x05\x07\x02O\x01\x12\x04\xf6\x06\x02\x06\n\x0c\n\x04\x05\ + \x07\x02O\x12\x04\xf6\x06\x02\x0c\n\r\n\x05\x05\x07\x02O\x02\x12\x04\xf6\ + \x06\t\x0b\n\r\n\x05\x05\x07\x02P\x01\x12\x04\xf7\x06\x02\x06\n\x0c\n\ + \x04\x05\x07\x02P\x12\x04\xf7\x06\x02\x0c\n\r\n\x05\x05\x07\x02P\x02\x12\ + \x04\xf7\x06\t\x0b\n\r\n\x05\x05\x07\x02Q\x01\x12\x04\xf8\x06\x02\x06\n\ + \x0c\n\x04\x05\x07\x02Q\x12\x04\xf8\x06\x02\x0c\n\r\n\x05\x05\x07\x02Q\ + \x02\x12\x04\xf8\x06\t\x0b\n\r\n\x05\x05\x07\x02R\x01\x12\x04\xf9\x06\ + \x02\x05\n\x0c\n\x04\x05\x07\x02R\x12\x04\xf9\x06\x02\x0b\n\r\n\x05\x05\ + \x07\x02R\x02\x12\x04\xf9\x06\x08\n\n\r\n\x05\x05\x07\x02S\x01\x12\x04\ + \xfa\x06\x02\x06\n\x0c\n\x04\x05\x07\x02S\x12\x04\xfa\x06\x02\x0c\n\r\n\ + \x05\x05\x07\x02S\x02\x12\x04\xfa\x06\t\x0b\n\r\n\x05\x05\x07\x02T\x01\ + \x12\x04\xfb\x06\x02\x05\n\x0c\n\x04\x05\x07\x02T\x12\x04\xfb\x06\x02\ + \x0b\n\r\n\x05\x05\x07\x02T\x02\x12\x04\xfb\x06\x08\n\n\r\n\x05\x05\x07\ + \x02U\x01\x12\x04\xfc\x06\x02\x05\n\x0c\n\x04\x05\x07\x02U\x12\x04\xfc\ + \x06\x02\x0b\n\r\n\x05\x05\x07\x02U\x02\x12\x04\xfc\x06\x08\n\n\r\n\x05\ + \x05\x07\x02V\x01\x12\x04\xfd\x06\x02\x06\n\x0c\n\x04\x05\x07\x02V\x12\ + \x04\xfd\x06\x02\x0c\n\r\n\x05\x05\x07\x02V\x02\x12\x04\xfd\x06\t\x0b\n\ + \r\n\x05\x05\x07\x02W\x01\x12\x04\xfe\x06\x02\x07\n\x0c\n\x04\x05\x07\ + \x02W\x12\x04\xfe\x06\x02\x0c\n\r\n\x05\x05\x07\x02W\x02\x12\x04\xfe\x06\ + \n\x0b\n\r\n\x05\x05\x07\x02X\x01\x12\x04\xff\x06\x02\x08\n\x0c\n\x04\ + \x05\x07\x02X\x12\x04\xff\x06\x02\x0e\n\r\n\x05\x05\x07\x02X\x02\x12\x04\ + \xff\x06\x0b\r\n\r\n\x05\x05\x07\x02Y\x01\x12\x04\x80\x07\x02\r\n\x13\n\ + \x04\x05\x07\x02Y\x12\x04\x80\x07\x02\x13\"\x05\x20Bash\n\r\n\x05\x05\ + \x07\x02Y\x02\x12\x04\x80\x07\x10\x12\n\r\n\x05\x05\x07\x02Z\x01\x12\x04\ + \x81\x07\x02\t\n\x0c\n\x04\x05\x07\x02Z\x12\x04\x81\x07\x02\x0f\n\r\n\ + \x05\x05\x07\x02Z\x02\x12\x04\x81\x07\x0c\x0e\n\r\n\x05\x05\x07\x02[\x01\ + \x12\x04\x82\x07\x02\x07\n\x0c\n\x04\x05\x07\x02[\x12\x04\x82\x07\x02\ + \x0e\n\r\n\x05\x05\x07\x02[\x02\x12\x04\x82\x07\n\r\n\r\n\x05\x05\x07\ + \x02\\\x01\x12\x04\x83\x07\x02\n\n\x0c\n\x04\x05\x07\x02\\\x12\x04\x83\ + \x07\x02\x10\n\r\n\x05\x05\x07\x02\\\x02\x12\x04\x83\x07\r\x0f\n\r\n\x05\ + \x05\x07\x02]\x01\x12\x04\x84\x07\x02\x08\n\x0c\n\x04\x05\x07\x02]\x12\ + \x04\x84\x07\x02\x0f\n\r\n\x05\x05\x07\x02]\x02\x12\x04\x84\x07\x0b\x0e\ + \n\r\n\x05\x05\x07\x02^\x01\x12\x04\x85\x07\x02\x07\n\x0c\n\x04\x05\x07\ + \x02^\x12\x04\x85\x07\x02\x0c\n\r\n\x05\x05\x07\x02^\x02\x12\x04\x85\x07\ + \n\x0b\n\r\n\x05\x05\x07\x02_\x01\x12\x04\x86\x07\x02\x05\n\x0c\n\x04\ + \x05\x07\x02_\x12\x04\x86\x07\x02\x0c\n\r\n\x05\x05\x07\x02_\x02\x12\x04\ + \x86\x07\x08\x0b\n\r\n\x05\x05\x07\x02`\x01\x12\x04\x87\x07\x02\x06\n\ + \x0c\n\x04\x05\x07\x02`\x12\x04\x87\x07\x02\x0c\n\r\n\x05\x05\x07\x02`\ + \x02\x12\x04\x87\x07\t\x0b\n\r\n\x05\x05\x07\x02a\x01\x12\x04\x88\x07\ + \x02\x05\n\x0c\n\x04\x05\x07\x02a\x12\x04\x88\x07\x02\x0b\n\r\n\x05\x05\ + \x07\x02a\x02\x12\x04\x88\x07\x08\n\n\r\n\x05\x05\x07\x02b\x01\x12\x04\ + \x89\x07\x02\x08\n\x0c\n\x04\x05\x07\x02b\x12\x04\x89\x07\x02\x0f\n\r\n\ + \x05\x05\x07\x02b\x02\x12\x04\x89\x07\x0b\x0e\n\r\n\x05\x05\x07\x02c\x01\ + \x12\x04\x8a\x07\x02\x0c\n\x0c\n\x04\x05\x07\x02c\x12\x04\x8a\x07\x02\ + \x12\n\r\n\x05\x05\x07\x02c\x02\x12\x04\x8a\x07\x0f\x11\n\r\n\x05\x05\ + \x07\x02d\x01\x12\x04\x8b\x07\x02\x11\n\x0c\n\x04\x05\x07\x02d\x12\x04\ + \x8b\x07\x02\x17\n\r\n\x05\x05\x07\x02d\x02\x12\x04\x8b\x07\x14\x16\n\r\ + \n\x05\x05\x07\x02e\x01\x12\x04\x8c\x07\x02\t\n\x0c\n\x04\x05\x07\x02e\ + \x12\x04\x8c\x07\x02\x10\n\r\n\x05\x05\x07\x02e\x02\x12\x04\x8c\x07\x0c\ + \x0f\n\r\n\x05\x05\x07\x02f\x01\x12\x04\x8d\x07\x02\x06\n\x0c\n\x04\x05\ + \x07\x02f\x12\x04\x8d\x07\x02\r\n\r\n\x05\x05\x07\x02f\x02\x12\x04\x8d\ + \x07\t\x0c\n\r\n\x05\x05\x07\x02g\x01\x12\x04\x8e\x07\x02\r\n\x0c\n\x04\ + \x05\x07\x02g\x12\x04\x8e\x07\x02\x13\n\r\n\x05\x05\x07\x02g\x02\x12\x04\ + \x8e\x07\x10\x12\n\r\n\x05\x05\x07\x02h\x01\x12\x04\x8f\x07\x02\x05\n\ + \x0c\n\x04\x05\x07\x02h\x12\x04\x8f\x07\x02\x0b\n\r\n\x05\x05\x07\x02h\ + \x02\x12\x04\x8f\x07\x08\n\n\r\n\x05\x05\x07\x02i\x01\x12\x04\x90\x07\ + \x02\t\n\x0c\n\x04\x05\x07\x02i\x12\x04\x90\x07\x02\x0f\n\r\n\x05\x05\ + \x07\x02i\x02\x12\x04\x90\x07\x0c\x0e\n\r\n\x05\x05\x07\x02j\x01\x12\x04\ + \x91\x07\x02\x05\n\x0c\n\x04\x05\x07\x02j\x12\x04\x91\x07\x02\x0b\n\r\n\ + \x05\x05\x07\x02j\x02\x12\x04\x91\x07\x08\n\n\r\n\x05\x05\x07\x02k\x01\ + \x12\x04\x92\x07\x02\x05\n\x0c\n\x04\x05\x07\x02k\x12\x04\x92\x07\x02\ + \x0b\n\r\n\x05\x05\x07\x02k\x02\x12\x04\x92\x07\x08\n\n\r\n\x05\x05\x07\ + \x02l\x01\x12\x04\x93\x07\x02\x06\n\x0c\n\x04\x05\x07\x02l\x12\x04\x93\ + \x07\x02\x0c\n\r\n\x05\x05\x07\x02l\x02\x12\x04\x93\x07\t\x0b\n\r\n\x05\ + \x05\x07\x02m\x01\x12\x04\x94\x07\x02\x05\n\x93\x03\n\x04\x05\x07\x02m\ + \x12\x04\x94\x07\x02\x0b\"\x84\x03\x20NextLanguage\x20=\x20111;\n\x20Ste\ ps\x20add\x20a\x20new\x20language:\n\x201.\x20Copy-paste\x20the\x20\"Nex\ tLanguage\x20=\x20N\"\x20line\x20above\n\x202.\x20Increment\x20\"NextLan\ guage\x20=\x20N\"\x20to\x20\"NextLanguage\x20=\x20N+1\"\n\x203.\x20Repla\ @@ -6186,7 +6918,7 @@ static file_descriptor_proto_data: &'static [u8] = b"\ \x20correct\x20line\x20above\x20using\x20alphabetical\x20order\n\x205.\ \x20(optional)\x20Add\x20a\x20brief\x20comment\x20behind\x20the\x20langu\ age\x20if\x20the\x20name\x20is\x20not\x20self-explanatory\n\n\r\n\x05\ - \x05\x07\x02m\x02\x12\x04\xfb\x06\x08\nb\x06proto3\ + \x05\x07\x02m\x02\x12\x04\x94\x07\x08\nb\x06proto3\ "; /// `FileDescriptorProto` object which was a source for this generated file @@ -6204,7 +6936,7 @@ pub fn file_descriptor() -> &'static ::protobuf::reflect::FileDescriptor { file_descriptor.get(|| { let generated_file_descriptor = generated_file_descriptor_lazy.get(|| { let mut deps = ::std::vec::Vec::with_capacity(0); - let mut messages = ::std::vec::Vec::with_capacity(12); + let mut messages = ::std::vec::Vec::with_capacity(14); messages.push(Index::generated_message_descriptor_data()); messages.push(Metadata::generated_message_descriptor_data()); messages.push(ToolInfo::generated_message_descriptor_data()); @@ -6215,6 +6947,8 @@ pub fn file_descriptor() -> &'static ::protobuf::reflect::FileDescriptor { messages.push(Signature::generated_message_descriptor_data()); messages.push(SymbolInformation::generated_message_descriptor_data()); messages.push(Relationship::generated_message_descriptor_data()); + messages.push(SingleLineRange::generated_message_descriptor_data()); + messages.push(MultiLineRange::generated_message_descriptor_data()); messages.push(Occurrence::generated_message_descriptor_data()); messages.push(Diagnostic::generated_message_descriptor_data()); let mut enums = ::std::vec::Vec::with_capacity(10); diff --git a/bindings/typescript/scip_pb.ts b/bindings/typescript/scip_pb.ts index 5f3e7413..19f94ec0 100644 --- a/bindings/typescript/scip_pb.ts +++ b/bindings/typescript/scip_pb.ts @@ -20,7 +20,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file scip.proto. */ export const file_scip: GenFile = /*@__PURE__*/ - fileDesc("CgpzY2lwLnByb3RvEgRzY2lwIn8KBUluZGV4EiAKCG1ldGFkYXRhGAEgASgLMg4uc2NpcC5NZXRhZGF0YRIhCglkb2N1bWVudHMYAiADKAsyDi5zY2lwLkRvY3VtZW50EjEKEGV4dGVybmFsX3N5bWJvbHMYAyADKAsyFy5zY2lwLlN5bWJvbEluZm9ybWF0aW9uIp8BCghNZXRhZGF0YRImCgd2ZXJzaW9uGAEgASgOMhUuc2NpcC5Qcm90b2NvbFZlcnNpb24SIQoJdG9vbF9pbmZvGAIgASgLMg4uc2NpcC5Ub29sSW5mbxIUCgxwcm9qZWN0X3Jvb3QYAyABKAkSMgoWdGV4dF9kb2N1bWVudF9lbmNvZGluZxgEIAEoDjISLnNjaXAuVGV4dEVuY29kaW5nIjwKCFRvb2xJbmZvEgwKBG5hbWUYASABKAkSDwoHdmVyc2lvbhgCIAEoCRIRCglhcmd1bWVudHMYAyADKAkixQEKCERvY3VtZW50EhAKCGxhbmd1YWdlGAQgASgJEhUKDXJlbGF0aXZlX3BhdGgYASABKAkSJQoLb2NjdXJyZW5jZXMYAiADKAsyEC5zY2lwLk9jY3VycmVuY2USKAoHc3ltYm9scxgDIAMoCzIXLnNjaXAuU3ltYm9sSW5mb3JtYXRpb24SDAoEdGV4dBgFIAEoCRIxChFwb3NpdGlvbl9lbmNvZGluZxgGIAEoDjIWLnNjaXAuUG9zaXRpb25FbmNvZGluZyJfCgZTeW1ib2wSDgoGc2NoZW1lGAEgASgJEh4KB3BhY2thZ2UYAiABKAsyDS5zY2lwLlBhY2thZ2USJQoLZGVzY3JpcHRvcnMYAyADKAsyEC5zY2lwLkRlc2NyaXB0b3IiOQoHUGFja2FnZRIPCgdtYW5hZ2VyGAEgASgJEgwKBG5hbWUYAiABKAkSDwoHdmVyc2lvbhgDIAEoCSKCAgoKRGVzY3JpcHRvchIMCgRuYW1lGAEgASgJEhUKDWRpc2FtYmlndWF0b3IYAiABKAkSJwoGc3VmZml4GAMgASgOMhcuc2NpcC5EZXNjcmlwdG9yLlN1ZmZpeCKlAQoGU3VmZml4EhUKEVVuc3BlY2lmaWVkU3VmZml4EAASDQoJTmFtZXNwYWNlEAESDwoHUGFja2FnZRABGgIIARIICgRUeXBlEAISCAoEVGVybRADEgoKBk1ldGhvZBAEEhEKDVR5cGVQYXJhbWV0ZXIQBRINCglQYXJhbWV0ZXIQBhIICgRNZXRhEAcSCQoFTG9jYWwQCBIJCgVNYWNybxAJGgIQASJkCglTaWduYXR1cmUSEAoIbGFuZ3VhZ2UYBCABKAkSDAoEdGV4dBgFIAEoCRIlCgtvY2N1cnJlbmNlcxgCIAMoCzIQLnNjaXAuT2NjdXJyZW5jZUoECAEQAkoECAMQBEoECAYQByLxCwoRU3ltYm9sSW5mb3JtYXRpb24SDgoGc3ltYm9sGAEgASgJEhUKDWRvY3VtZW50YXRpb24YAyADKAkSKQoNcmVsYXRpb25zaGlwcxgEIAMoCzISLnNjaXAuUmVsYXRpb25zaGlwEioKBGtpbmQYBSABKA4yHC5zY2lwLlN5bWJvbEluZm9ybWF0aW9uLktpbmQSFAoMZGlzcGxheV9uYW1lGAYgASgJEjAKF3NpZ25hdHVyZV9kb2N1bWVudGF0aW9uGAcgASgLMg8uc2NpcC5TaWduYXR1cmUSGAoQZW5jbG9zaW5nX3N5bWJvbBgIIAEoCSL7CQoES2luZBITCg9VbnNwZWNpZmllZEtpbmQQABISCg5BYnN0cmFjdE1ldGhvZBBCEgwKCEFjY2Vzc29yEEgSCQoFQXJyYXkQARINCglBc3NlcnRpb24QAhISCg5Bc3NvY2lhdGVkVHlwZRADEg0KCUF0dHJpYnV0ZRAEEgkKBUF4aW9tEAUSCwoHQm9vbGVhbhAGEgkKBUNsYXNzEAcSCwoHQ29uY2VwdBBWEgwKCENvbnN0YW50EAgSDwoLQ29uc3RydWN0b3IQCRIMCghDb250cmFjdBA+Eg4KCkRhdGFGYW1pbHkQChIMCghEZWxlZ2F0ZRBJEggKBEVudW0QCxIOCgpFbnVtTWVtYmVyEAwSCQoFRXJyb3IQPxIJCgVFdmVudBANEg0KCUV4dGVuc2lvbhBUEggKBEZhY3QQDhIJCgVGaWVsZBAPEggKBEZpbGUQEBIMCghGdW5jdGlvbhAREgoKBkdldHRlchASEgsKB0dyYW1tYXIQExIMCghJbnN0YW5jZRAUEg0KCUludGVyZmFjZRAVEgcKA0tleRAWEggKBExhbmcQFxIJCgVMZW1tYRAYEgsKB0xpYnJhcnkQQBIJCgVNYWNybxAZEgoKBk1ldGhvZBAaEg8KC01ldGhvZEFsaWFzEEoSEgoOTWV0aG9kUmVjZWl2ZXIQGxIXChNNZXRob2RTcGVjaWZpY2F0aW9uEEMSCwoHTWVzc2FnZRAcEgkKBU1peGluEFUSDAoITW9kaWZpZXIQQRIKCgZNb2R1bGUQHRINCglOYW1lc3BhY2UQHhIICgROdWxsEB8SCgoGTnVtYmVyECASCgoGT2JqZWN0ECESDAoIT3BlcmF0b3IQIhILCgdQYWNrYWdlECMSEQoNUGFja2FnZU9iamVjdBAkEg0KCVBhcmFtZXRlchAlEhIKDlBhcmFtZXRlckxhYmVsECYSCwoHUGF0dGVybhAnEg0KCVByZWRpY2F0ZRAoEgwKCFByb3BlcnR5ECkSDAoIUHJvdG9jb2wQKhISCg5Qcm90b2NvbE1ldGhvZBBEEhUKEVB1cmVWaXJ0dWFsTWV0aG9kEEUSDwoLUXVhc2lxdW90ZXIQKxIRCg1TZWxmUGFyYW1ldGVyECwSCgoGU2V0dGVyEC0SDQoJU2lnbmF0dXJlEC4SEgoOU2luZ2xldG9uQ2xhc3MQSxITCg9TaW5nbGV0b25NZXRob2QQTBIUChBTdGF0aWNEYXRhTWVtYmVyEE0SDwoLU3RhdGljRXZlbnQQThIPCgtTdGF0aWNGaWVsZBBPEhAKDFN0YXRpY01ldGhvZBBQEhIKDlN0YXRpY1Byb3BlcnR5EFESEgoOU3RhdGljVmFyaWFibGUQUhIKCgZTdHJpbmcQMBIKCgZTdHJ1Y3QQMRINCglTdWJzY3JpcHQQLxIKCgZUYWN0aWMQMhILCgdUaGVvcmVtEDMSEQoNVGhpc1BhcmFtZXRlchA0EgkKBVRyYWl0EDUSDwoLVHJhaXRNZXRob2QQRhIICgRUeXBlEDYSDQoJVHlwZUFsaWFzEDcSDQoJVHlwZUNsYXNzEDgSEwoPVHlwZUNsYXNzTWV0aG9kEEcSDgoKVHlwZUZhbWlseRA5EhEKDVR5cGVQYXJhbWV0ZXIQOhIJCgVVbmlvbhA7EgkKBVZhbHVlEDwSDAoIVmFyaWFibGUQPSKCAQoMUmVsYXRpb25zaGlwEg4KBnN5bWJvbBgBIAEoCRIUCgxpc19yZWZlcmVuY2UYAiABKAgSGQoRaXNfaW1wbGVtZW50YXRpb24YAyABKAgSGgoSaXNfdHlwZV9kZWZpbml0aW9uGAQgASgIEhUKDWlzX2RlZmluaXRpb24YBSABKAgiyAEKCk9jY3VycmVuY2USDQoFcmFuZ2UYASADKAUSDgoGc3ltYm9sGAIgASgJEhQKDHN5bWJvbF9yb2xlcxgDIAEoBRIeChZvdmVycmlkZV9kb2N1bWVudGF0aW9uGAQgAygJEiUKC3N5bnRheF9raW5kGAUgASgOMhAuc2NpcC5TeW50YXhLaW5kEiUKC2RpYWdub3N0aWNzGAYgAygLMhAuc2NpcC5EaWFnbm9zdGljEhcKD2VuY2xvc2luZ19yYW5nZRgHIAMoBSKAAQoKRGlhZ25vc3RpYxIgCghzZXZlcml0eRgBIAEoDjIOLnNjaXAuU2V2ZXJpdHkSDAoEY29kZRgCIAEoCRIPCgdtZXNzYWdlGAMgASgJEg4KBnNvdXJjZRgEIAEoCRIhCgR0YWdzGAUgAygOMhMuc2NpcC5EaWFnbm9zdGljVGFnKjEKD1Byb3RvY29sVmVyc2lvbhIeChpVbnNwZWNpZmllZFByb3RvY29sVmVyc2lvbhAAKkAKDFRleHRFbmNvZGluZxIbChdVbnNwZWNpZmllZFRleHRFbmNvZGluZxAAEggKBFVURjgQARIJCgVVVEYxNhACKqQBChBQb3NpdGlvbkVuY29kaW5nEh8KG1Vuc3BlY2lmaWVkUG9zaXRpb25FbmNvZGluZxAAEiMKH1VURjhDb2RlVW5pdE9mZnNldEZyb21MaW5lU3RhcnQQARIkCiBVVEYxNkNvZGVVbml0T2Zmc2V0RnJvbUxpbmVTdGFydBACEiQKIFVURjMyQ29kZVVuaXRPZmZzZXRGcm9tTGluZVN0YXJ0EAMqlAEKClN5bWJvbFJvbGUSGQoVVW5zcGVjaWZpZWRTeW1ib2xSb2xlEAASDgoKRGVmaW5pdGlvbhABEgoKBkltcG9ydBACEg8KC1dyaXRlQWNjZXNzEAQSDgoKUmVhZEFjY2VzcxAIEg0KCUdlbmVyYXRlZBAQEggKBFRlc3QQIBIVChFGb3J3YXJkRGVmaW5pdGlvbhBAKuoGCgpTeW50YXhLaW5kEhkKFVVuc3BlY2lmaWVkU3ludGF4S2luZBAAEgsKB0NvbW1lbnQQARIYChRQdW5jdHVhdGlvbkRlbGltaXRlchACEhYKElB1bmN0dWF0aW9uQnJhY2tldBADEgsKB0tleXdvcmQQBBIZChFJZGVudGlmaWVyS2V5d29yZBAEGgIIARIWChJJZGVudGlmaWVyT3BlcmF0b3IQBRIOCgpJZGVudGlmaWVyEAYSFQoRSWRlbnRpZmllckJ1aWx0aW4QBxISCg5JZGVudGlmaWVyTnVsbBAIEhYKEklkZW50aWZpZXJDb25zdGFudBAJEhsKF0lkZW50aWZpZXJNdXRhYmxlR2xvYmFsEAoSFwoTSWRlbnRpZmllclBhcmFtZXRlchALEhMKD0lkZW50aWZpZXJMb2NhbBAMEhYKEklkZW50aWZpZXJTaGFkb3dlZBANEhcKE0lkZW50aWZpZXJOYW1lc3BhY2UQDhIYChBJZGVudGlmaWVyTW9kdWxlEA4aAggBEhYKEklkZW50aWZpZXJGdW5jdGlvbhAPEiAKHElkZW50aWZpZXJGdW5jdGlvbkRlZmluaXRpb24QEBITCg9JZGVudGlmaWVyTWFjcm8QERIdChlJZGVudGlmaWVyTWFjcm9EZWZpbml0aW9uEBISEgoOSWRlbnRpZmllclR5cGUQExIZChVJZGVudGlmaWVyQnVpbHRpblR5cGUQFBIXChNJZGVudGlmaWVyQXR0cmlidXRlEBUSDwoLUmVnZXhFc2NhcGUQFhIRCg1SZWdleFJlcGVhdGVkEBcSEQoNUmVnZXhXaWxkY2FyZBAYEhIKDlJlZ2V4RGVsaW1pdGVyEBkSDQoJUmVnZXhKb2luEBoSEQoNU3RyaW5nTGl0ZXJhbBAbEhcKE1N0cmluZ0xpdGVyYWxFc2NhcGUQHBIYChRTdHJpbmdMaXRlcmFsU3BlY2lhbBAdEhQKEFN0cmluZ0xpdGVyYWxLZXkQHhIUChBDaGFyYWN0ZXJMaXRlcmFsEB8SEgoOTnVtZXJpY0xpdGVyYWwQIBISCg5Cb29sZWFuTGl0ZXJhbBAhEgcKA1RhZxAiEhAKDFRhZ0F0dHJpYnV0ZRAjEhAKDFRhZ0RlbGltaXRlchAkGgIQASpWCghTZXZlcml0eRIXChNVbnNwZWNpZmllZFNldmVyaXR5EAASCQoFRXJyb3IQARILCgdXYXJuaW5nEAISDwoLSW5mb3JtYXRpb24QAxIICgRIaW50EAQqTgoNRGlhZ25vc3RpY1RhZxIcChhVbnNwZWNpZmllZERpYWdub3N0aWNUYWcQABIPCgtVbm5lY2Vzc2FyeRABEg4KCkRlcHJlY2F0ZWQQAiqbCgoITGFuZ3VhZ2USFwoTVW5zcGVjaWZpZWRMYW5ndWFnZRAAEggKBEFCQVAQPBIICgRBcGV4EGASBwoDQVBMEDESBwoDQWRhECcSCAoEQWdkYRAtEgwKCEFzY2lpRG9jEFYSDAoIQXNzZW1ibHkQOhIHCgNBd2sQQhIHCgNCYXQQRBIKCgZCaWJUZVgQURIFCgFDECISCQoFQ09CT0wQOxIHCgNDUFAQIxIHCgNDU1MQGhIKCgZDU2hhcnAQARILCgdDbG9qdXJlEAgSEAoMQ29mZmVlc2NyaXB0EBUSDgoKQ29tbW9uTGlzcBAJEgcKA0NvcRAvEggKBENVREEQYRIICgREYXJ0EAMSCgoGRGVscGhpEDkSCAoERGlmZhBYEg4KCkRvY2tlcmZpbGUQUBIKCgZEeWFsb2cQMhIKCgZFbGl4aXIQERIKCgZFcmxhbmcQEhIKCgZGU2hhcnAQKhIICgRGaXNoEEESCAoERmxvdxAYEgsKB0ZvcnRyYW4QOBIOCgpHaXRfQ29tbWl0EFsSDgoKR2l0X0NvbmZpZxBZEg4KCkdpdF9SZWJhc2UQXBIGCgJHbxAhEgsKB0dyYXBoUUwQYhIKCgZHcm9vdnkQBxIICgRIVE1MEB4SCAoESGFjaxAUEg4KCkhhbmRsZWJhcnMQWhILCgdIYXNrZWxsECwSCQoFSWRyaXMQLhIHCgNJbmkQSBIFCgFKEDMSCAoESlNPThBLEggKBEphdmEQBhIOCgpKYXZhU2NyaXB0EBYSEwoPSmF2YVNjcmlwdFJlYWN0EF0SCwoHSnNvbm5ldBBMEgkKBUp1bGlhEDcSDAoISnVzdGZpbGUQbRIKCgZLb3RsaW4QBBIJCgVMYVRlWBBTEggKBExlYW4QMBIICgRMZXNzEBsSBwoDTHVhEAwSCAoETHVhdRBsEgwKCE1ha2VmaWxlEE8SDAoITWFya2Rvd24QVBIKCgZNYXRsYWIQNBIKCgZOaWNrZWwQbhIHCgNOaXgQTRIJCgVPQ2FtbBApEg8KC09iamVjdGl2ZV9DECQSEQoNT2JqZWN0aXZlX0NQUBAlEgoKBlBhc2NhbBBjEgcKA1BIUBATEgkKBVBMU1FMEEYSCAoEUGVybBANEg4KClBvd2VyU2hlbGwQQxIKCgZQcm9sb2cQRxIMCghQcm90b2J1ZhBkEgoKBlB5dGhvbhAPEgUKAVIQNhIKCgZSYWNrZXQQCxIICgRSYWt1EA4SCQoFUmF6b3IQPhIJCgVSZXBybxBmEggKBFJlU1QQVRIICgRSdWJ5EBASCAoEUnVzdBAoEgcKA1NBUxA9EggKBFNDU1MQHRIHCgNTTUwQKxIHCgNTUUwQRRIICgRTYXNzEBwSCQoFU2NhbGEQBRIKCgZTY2hlbWUQChIPCgtTaGVsbFNjcmlwdBBAEgsKB1NreWxhcmsQThIJCgVTbGFuZxBrEgwKCFNvbGlkaXR5EF8SCgoGU3ZlbHRlEGoSCQoFU3dpZnQQAhIHCgNUY2wQZRIICgRUT01MEEkSBwoDVGVYEFISCgoGVGhyaWZ0EGcSDgoKVHlwZVNjcmlwdBAXEhMKD1R5cGVTY3JpcHRSZWFjdBBeEgsKB1Zlcmlsb2cQaBIICgRWSERMEGkSDwoLVmlzdWFsQmFzaWMQPxIHCgNWdWUQGRILCgdXb2xmcmFtEDUSBwoDWE1MEB8SBwoDWFNMECASCAoEWUFNTBBKEgcKA1ppZxAmQk4KEm9yZy5zY2lwX2NvZGUuc2NpcEIJU2NpcFByb3RvUAFaK2dpdGh1Yi5jb20vc2NpcC1jb2RlL3NjaXAvYmluZGluZ3MvZ28vc2NpcC9iBnByb3RvMw"); + fileDesc("CgpzY2lwLnByb3RvEgRzY2lwIn8KBUluZGV4EiAKCG1ldGFkYXRhGAEgASgLMg4uc2NpcC5NZXRhZGF0YRIhCglkb2N1bWVudHMYAiADKAsyDi5zY2lwLkRvY3VtZW50EjEKEGV4dGVybmFsX3N5bWJvbHMYAyADKAsyFy5zY2lwLlN5bWJvbEluZm9ybWF0aW9uIp8BCghNZXRhZGF0YRImCgd2ZXJzaW9uGAEgASgOMhUuc2NpcC5Qcm90b2NvbFZlcnNpb24SIQoJdG9vbF9pbmZvGAIgASgLMg4uc2NpcC5Ub29sSW5mbxIUCgxwcm9qZWN0X3Jvb3QYAyABKAkSMgoWdGV4dF9kb2N1bWVudF9lbmNvZGluZxgEIAEoDjISLnNjaXAuVGV4dEVuY29kaW5nIjwKCFRvb2xJbmZvEgwKBG5hbWUYASABKAkSDwoHdmVyc2lvbhgCIAEoCRIRCglhcmd1bWVudHMYAyADKAkixQEKCERvY3VtZW50EhAKCGxhbmd1YWdlGAQgASgJEhUKDXJlbGF0aXZlX3BhdGgYASABKAkSJQoLb2NjdXJyZW5jZXMYAiADKAsyEC5zY2lwLk9jY3VycmVuY2USKAoHc3ltYm9scxgDIAMoCzIXLnNjaXAuU3ltYm9sSW5mb3JtYXRpb24SDAoEdGV4dBgFIAEoCRIxChFwb3NpdGlvbl9lbmNvZGluZxgGIAEoDjIWLnNjaXAuUG9zaXRpb25FbmNvZGluZyJfCgZTeW1ib2wSDgoGc2NoZW1lGAEgASgJEh4KB3BhY2thZ2UYAiABKAsyDS5zY2lwLlBhY2thZ2USJQoLZGVzY3JpcHRvcnMYAyADKAsyEC5zY2lwLkRlc2NyaXB0b3IiOQoHUGFja2FnZRIPCgdtYW5hZ2VyGAEgASgJEgwKBG5hbWUYAiABKAkSDwoHdmVyc2lvbhgDIAEoCSKCAgoKRGVzY3JpcHRvchIMCgRuYW1lGAEgASgJEhUKDWRpc2FtYmlndWF0b3IYAiABKAkSJwoGc3VmZml4GAMgASgOMhcuc2NpcC5EZXNjcmlwdG9yLlN1ZmZpeCKlAQoGU3VmZml4EhUKEVVuc3BlY2lmaWVkU3VmZml4EAASDQoJTmFtZXNwYWNlEAESDwoHUGFja2FnZRABGgIIARIICgRUeXBlEAISCAoEVGVybRADEgoKBk1ldGhvZBAEEhEKDVR5cGVQYXJhbWV0ZXIQBRINCglQYXJhbWV0ZXIQBhIICgRNZXRhEAcSCQoFTG9jYWwQCBIJCgVNYWNybxAJGgIQASJkCglTaWduYXR1cmUSEAoIbGFuZ3VhZ2UYBCABKAkSDAoEdGV4dBgFIAEoCRIlCgtvY2N1cnJlbmNlcxgCIAMoCzIQLnNjaXAuT2NjdXJyZW5jZUoECAEQAkoECAMQBEoECAYQByLxCwoRU3ltYm9sSW5mb3JtYXRpb24SDgoGc3ltYm9sGAEgASgJEhUKDWRvY3VtZW50YXRpb24YAyADKAkSKQoNcmVsYXRpb25zaGlwcxgEIAMoCzISLnNjaXAuUmVsYXRpb25zaGlwEioKBGtpbmQYBSABKA4yHC5zY2lwLlN5bWJvbEluZm9ybWF0aW9uLktpbmQSFAoMZGlzcGxheV9uYW1lGAYgASgJEjAKF3NpZ25hdHVyZV9kb2N1bWVudGF0aW9uGAcgASgLMg8uc2NpcC5TaWduYXR1cmUSGAoQZW5jbG9zaW5nX3N5bWJvbBgIIAEoCSL7CQoES2luZBITCg9VbnNwZWNpZmllZEtpbmQQABISCg5BYnN0cmFjdE1ldGhvZBBCEgwKCEFjY2Vzc29yEEgSCQoFQXJyYXkQARINCglBc3NlcnRpb24QAhISCg5Bc3NvY2lhdGVkVHlwZRADEg0KCUF0dHJpYnV0ZRAEEgkKBUF4aW9tEAUSCwoHQm9vbGVhbhAGEgkKBUNsYXNzEAcSCwoHQ29uY2VwdBBWEgwKCENvbnN0YW50EAgSDwoLQ29uc3RydWN0b3IQCRIMCghDb250cmFjdBA+Eg4KCkRhdGFGYW1pbHkQChIMCghEZWxlZ2F0ZRBJEggKBEVudW0QCxIOCgpFbnVtTWVtYmVyEAwSCQoFRXJyb3IQPxIJCgVFdmVudBANEg0KCUV4dGVuc2lvbhBUEggKBEZhY3QQDhIJCgVGaWVsZBAPEggKBEZpbGUQEBIMCghGdW5jdGlvbhAREgoKBkdldHRlchASEgsKB0dyYW1tYXIQExIMCghJbnN0YW5jZRAUEg0KCUludGVyZmFjZRAVEgcKA0tleRAWEggKBExhbmcQFxIJCgVMZW1tYRAYEgsKB0xpYnJhcnkQQBIJCgVNYWNybxAZEgoKBk1ldGhvZBAaEg8KC01ldGhvZEFsaWFzEEoSEgoOTWV0aG9kUmVjZWl2ZXIQGxIXChNNZXRob2RTcGVjaWZpY2F0aW9uEEMSCwoHTWVzc2FnZRAcEgkKBU1peGluEFUSDAoITW9kaWZpZXIQQRIKCgZNb2R1bGUQHRINCglOYW1lc3BhY2UQHhIICgROdWxsEB8SCgoGTnVtYmVyECASCgoGT2JqZWN0ECESDAoIT3BlcmF0b3IQIhILCgdQYWNrYWdlECMSEQoNUGFja2FnZU9iamVjdBAkEg0KCVBhcmFtZXRlchAlEhIKDlBhcmFtZXRlckxhYmVsECYSCwoHUGF0dGVybhAnEg0KCVByZWRpY2F0ZRAoEgwKCFByb3BlcnR5ECkSDAoIUHJvdG9jb2wQKhISCg5Qcm90b2NvbE1ldGhvZBBEEhUKEVB1cmVWaXJ0dWFsTWV0aG9kEEUSDwoLUXVhc2lxdW90ZXIQKxIRCg1TZWxmUGFyYW1ldGVyECwSCgoGU2V0dGVyEC0SDQoJU2lnbmF0dXJlEC4SEgoOU2luZ2xldG9uQ2xhc3MQSxITCg9TaW5nbGV0b25NZXRob2QQTBIUChBTdGF0aWNEYXRhTWVtYmVyEE0SDwoLU3RhdGljRXZlbnQQThIPCgtTdGF0aWNGaWVsZBBPEhAKDFN0YXRpY01ldGhvZBBQEhIKDlN0YXRpY1Byb3BlcnR5EFESEgoOU3RhdGljVmFyaWFibGUQUhIKCgZTdHJpbmcQMBIKCgZTdHJ1Y3QQMRINCglTdWJzY3JpcHQQLxIKCgZUYWN0aWMQMhILCgdUaGVvcmVtEDMSEQoNVGhpc1BhcmFtZXRlchA0EgkKBVRyYWl0EDUSDwoLVHJhaXRNZXRob2QQRhIICgRUeXBlEDYSDQoJVHlwZUFsaWFzEDcSDQoJVHlwZUNsYXNzEDgSEwoPVHlwZUNsYXNzTWV0aG9kEEcSDgoKVHlwZUZhbWlseRA5EhEKDVR5cGVQYXJhbWV0ZXIQOhIJCgVVbmlvbhA7EgkKBVZhbHVlEDwSDAoIVmFyaWFibGUQPSKCAQoMUmVsYXRpb25zaGlwEg4KBnN5bWJvbBgBIAEoCRIUCgxpc19yZWZlcmVuY2UYAiABKAgSGQoRaXNfaW1wbGVtZW50YXRpb24YAyABKAgSGgoSaXNfdHlwZV9kZWZpbml0aW9uGAQgASgIEhUKDWlzX2RlZmluaXRpb24YBSABKAgiTwoPU2luZ2xlTGluZVJhbmdlEgwKBGxpbmUYASABKAUSFwoPc3RhcnRfY2hhcmFjdGVyGAIgASgFEhUKDWVuZF9jaGFyYWN0ZXIYAyABKAUiZgoOTXVsdGlMaW5lUmFuZ2USEgoKc3RhcnRfbGluZRgBIAEoBRIXCg9zdGFydF9jaGFyYWN0ZXIYAiABKAUSEAoIZW5kX2xpbmUYAyABKAUSFQoNZW5kX2NoYXJhY3RlchgEIAEoBSLYAwoKT2NjdXJyZW5jZRIRCgVyYW5nZRgBIAMoBUICGAESMgoRc2luZ2xlX2xpbmVfcmFuZ2UYCCABKAsyFS5zY2lwLlNpbmdsZUxpbmVSYW5nZUgAEjAKEG11bHRpX2xpbmVfcmFuZ2UYCSABKAsyFC5zY2lwLk11bHRpTGluZVJhbmdlSAASDgoGc3ltYm9sGAIgASgJEhQKDHN5bWJvbF9yb2xlcxgDIAEoBRIeChZvdmVycmlkZV9kb2N1bWVudGF0aW9uGAQgAygJEiUKC3N5bnRheF9raW5kGAUgASgOMhAuc2NpcC5TeW50YXhLaW5kEiUKC2RpYWdub3N0aWNzGAYgAygLMhAuc2NpcC5EaWFnbm9zdGljEhsKD2VuY2xvc2luZ19yYW5nZRgHIAMoBUICGAESPAobc2luZ2xlX2xpbmVfZW5jbG9zaW5nX3JhbmdlGAogASgLMhUuc2NpcC5TaW5nbGVMaW5lUmFuZ2VIARI6ChptdWx0aV9saW5lX2VuY2xvc2luZ19yYW5nZRgLIAEoCzIULnNjaXAuTXVsdGlMaW5lUmFuZ2VIAUINCgt0eXBlZF9yYW5nZUIXChV0eXBlZF9lbmNsb3NpbmdfcmFuZ2UigAEKCkRpYWdub3N0aWMSIAoIc2V2ZXJpdHkYASABKA4yDi5zY2lwLlNldmVyaXR5EgwKBGNvZGUYAiABKAkSDwoHbWVzc2FnZRgDIAEoCRIOCgZzb3VyY2UYBCABKAkSIQoEdGFncxgFIAMoDjITLnNjaXAuRGlhZ25vc3RpY1RhZyoxCg9Qcm90b2NvbFZlcnNpb24SHgoaVW5zcGVjaWZpZWRQcm90b2NvbFZlcnNpb24QACpACgxUZXh0RW5jb2RpbmcSGwoXVW5zcGVjaWZpZWRUZXh0RW5jb2RpbmcQABIICgRVVEY4EAESCQoFVVRGMTYQAiqkAQoQUG9zaXRpb25FbmNvZGluZxIfChtVbnNwZWNpZmllZFBvc2l0aW9uRW5jb2RpbmcQABIjCh9VVEY4Q29kZVVuaXRPZmZzZXRGcm9tTGluZVN0YXJ0EAESJAogVVRGMTZDb2RlVW5pdE9mZnNldEZyb21MaW5lU3RhcnQQAhIkCiBVVEYzMkNvZGVVbml0T2Zmc2V0RnJvbUxpbmVTdGFydBADKpQBCgpTeW1ib2xSb2xlEhkKFVVuc3BlY2lmaWVkU3ltYm9sUm9sZRAAEg4KCkRlZmluaXRpb24QARIKCgZJbXBvcnQQAhIPCgtXcml0ZUFjY2VzcxAEEg4KClJlYWRBY2Nlc3MQCBINCglHZW5lcmF0ZWQQEBIICgRUZXN0ECASFQoRRm9yd2FyZERlZmluaXRpb24QQCrqBgoKU3ludGF4S2luZBIZChVVbnNwZWNpZmllZFN5bnRheEtpbmQQABILCgdDb21tZW50EAESGAoUUHVuY3R1YXRpb25EZWxpbWl0ZXIQAhIWChJQdW5jdHVhdGlvbkJyYWNrZXQQAxILCgdLZXl3b3JkEAQSGQoRSWRlbnRpZmllcktleXdvcmQQBBoCCAESFgoSSWRlbnRpZmllck9wZXJhdG9yEAUSDgoKSWRlbnRpZmllchAGEhUKEUlkZW50aWZpZXJCdWlsdGluEAcSEgoOSWRlbnRpZmllck51bGwQCBIWChJJZGVudGlmaWVyQ29uc3RhbnQQCRIbChdJZGVudGlmaWVyTXV0YWJsZUdsb2JhbBAKEhcKE0lkZW50aWZpZXJQYXJhbWV0ZXIQCxITCg9JZGVudGlmaWVyTG9jYWwQDBIWChJJZGVudGlmaWVyU2hhZG93ZWQQDRIXChNJZGVudGlmaWVyTmFtZXNwYWNlEA4SGAoQSWRlbnRpZmllck1vZHVsZRAOGgIIARIWChJJZGVudGlmaWVyRnVuY3Rpb24QDxIgChxJZGVudGlmaWVyRnVuY3Rpb25EZWZpbml0aW9uEBASEwoPSWRlbnRpZmllck1hY3JvEBESHQoZSWRlbnRpZmllck1hY3JvRGVmaW5pdGlvbhASEhIKDklkZW50aWZpZXJUeXBlEBMSGQoVSWRlbnRpZmllckJ1aWx0aW5UeXBlEBQSFwoTSWRlbnRpZmllckF0dHJpYnV0ZRAVEg8KC1JlZ2V4RXNjYXBlEBYSEQoNUmVnZXhSZXBlYXRlZBAXEhEKDVJlZ2V4V2lsZGNhcmQQGBISCg5SZWdleERlbGltaXRlchAZEg0KCVJlZ2V4Sm9pbhAaEhEKDVN0cmluZ0xpdGVyYWwQGxIXChNTdHJpbmdMaXRlcmFsRXNjYXBlEBwSGAoUU3RyaW5nTGl0ZXJhbFNwZWNpYWwQHRIUChBTdHJpbmdMaXRlcmFsS2V5EB4SFAoQQ2hhcmFjdGVyTGl0ZXJhbBAfEhIKDk51bWVyaWNMaXRlcmFsECASEgoOQm9vbGVhbkxpdGVyYWwQIRIHCgNUYWcQIhIQCgxUYWdBdHRyaWJ1dGUQIxIQCgxUYWdEZWxpbWl0ZXIQJBoCEAEqVgoIU2V2ZXJpdHkSFwoTVW5zcGVjaWZpZWRTZXZlcml0eRAAEgkKBUVycm9yEAESCwoHV2FybmluZxACEg8KC0luZm9ybWF0aW9uEAMSCAoESGludBAEKk4KDURpYWdub3N0aWNUYWcSHAoYVW5zcGVjaWZpZWREaWFnbm9zdGljVGFnEAASDwoLVW5uZWNlc3NhcnkQARIOCgpEZXByZWNhdGVkEAIqmwoKCExhbmd1YWdlEhcKE1Vuc3BlY2lmaWVkTGFuZ3VhZ2UQABIICgRBQkFQEDwSCAoEQXBleBBgEgcKA0FQTBAxEgcKA0FkYRAnEggKBEFnZGEQLRIMCghBc2NpaURvYxBWEgwKCEFzc2VtYmx5EDoSBwoDQXdrEEISBwoDQmF0EEQSCgoGQmliVGVYEFESBQoBQxAiEgkKBUNPQk9MEDsSBwoDQ1BQECMSBwoDQ1NTEBoSCgoGQ1NoYXJwEAESCwoHQ2xvanVyZRAIEhAKDENvZmZlZXNjcmlwdBAVEg4KCkNvbW1vbkxpc3AQCRIHCgNDb3EQLxIICgRDVURBEGESCAoERGFydBADEgoKBkRlbHBoaRA5EggKBERpZmYQWBIOCgpEb2NrZXJmaWxlEFASCgoGRHlhbG9nEDISCgoGRWxpeGlyEBESCgoGRXJsYW5nEBISCgoGRlNoYXJwECoSCAoERmlzaBBBEggKBEZsb3cQGBILCgdGb3J0cmFuEDgSDgoKR2l0X0NvbW1pdBBbEg4KCkdpdF9Db25maWcQWRIOCgpHaXRfUmViYXNlEFwSBgoCR28QIRILCgdHcmFwaFFMEGISCgoGR3Jvb3Z5EAcSCAoESFRNTBAeEggKBEhhY2sQFBIOCgpIYW5kbGViYXJzEFoSCwoHSGFza2VsbBAsEgkKBUlkcmlzEC4SBwoDSW5pEEgSBQoBShAzEggKBEpTT04QSxIICgRKYXZhEAYSDgoKSmF2YVNjcmlwdBAWEhMKD0phdmFTY3JpcHRSZWFjdBBdEgsKB0pzb25uZXQQTBIJCgVKdWxpYRA3EgwKCEp1c3RmaWxlEG0SCgoGS290bGluEAQSCQoFTGFUZVgQUxIICgRMZWFuEDASCAoETGVzcxAbEgcKA0x1YRAMEggKBEx1YXUQbBIMCghNYWtlZmlsZRBPEgwKCE1hcmtkb3duEFQSCgoGTWF0bGFiEDQSCgoGTmlja2VsEG4SBwoDTml4EE0SCQoFT0NhbWwQKRIPCgtPYmplY3RpdmVfQxAkEhEKDU9iamVjdGl2ZV9DUFAQJRIKCgZQYXNjYWwQYxIHCgNQSFAQExIJCgVQTFNRTBBGEggKBFBlcmwQDRIOCgpQb3dlclNoZWxsEEMSCgoGUHJvbG9nEEcSDAoIUHJvdG9idWYQZBIKCgZQeXRob24QDxIFCgFSEDYSCgoGUmFja2V0EAsSCAoEUmFrdRAOEgkKBVJhem9yED4SCQoFUmVwcm8QZhIICgRSZVNUEFUSCAoEUnVieRAQEggKBFJ1c3QQKBIHCgNTQVMQPRIICgRTQ1NTEB0SBwoDU01MECsSBwoDU1FMEEUSCAoEU2FzcxAcEgkKBVNjYWxhEAUSCgoGU2NoZW1lEAoSDwoLU2hlbGxTY3JpcHQQQBILCgdTa3lsYXJrEE4SCQoFU2xhbmcQaxIMCghTb2xpZGl0eRBfEgoKBlN2ZWx0ZRBqEgkKBVN3aWZ0EAISBwoDVGNsEGUSCAoEVE9NTBBJEgcKA1RlWBBSEgoKBlRocmlmdBBnEg4KClR5cGVTY3JpcHQQFxITCg9UeXBlU2NyaXB0UmVhY3QQXhILCgdWZXJpbG9nEGgSCAoEVkhETBBpEg8KC1Zpc3VhbEJhc2ljED8SBwoDVnVlEBkSCwoHV29sZnJhbRA1EgcKA1hNTBAfEgcKA1hTTBAgEggKBFlBTUwQShIHCgNaaWcQJkJOChJvcmcuc2NpcF9jb2RlLnNjaXBCCVNjaXBQcm90b1ABWitnaXRodWIuY29tL3NjaXAtY29kZS9zY2lwL2JpbmRpbmdzL2dvL3NjaXAvYgZwcm90bzM"); /** * Index represents a complete SCIP index for a workspace this is rooted at a @@ -1229,6 +1229,69 @@ export type Relationship = Message<"scip.Relationship"> & { export const RelationshipSchema: GenMessage = /*@__PURE__*/ messageDesc(file_scip, 9); +/** + * SingleLineRange represents a half-open [start, end) range within a single line. + * + * @generated from message scip.SingleLineRange + */ +export type SingleLineRange = Message<"scip.SingleLineRange"> & { + /** + * @generated from field: int32 line = 1; + */ + line: number; + + /** + * @generated from field: int32 start_character = 2; + */ + startCharacter: number; + + /** + * @generated from field: int32 end_character = 3; + */ + endCharacter: number; +}; + +/** + * Describes the message scip.SingleLineRange. + * Use `create(SingleLineRangeSchema)` to create a new message. + */ +export const SingleLineRangeSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_scip, 10); + +/** + * MultiLineRange represents a half-open [start, end) range spanning multiple lines. + * + * @generated from message scip.MultiLineRange + */ +export type MultiLineRange = Message<"scip.MultiLineRange"> & { + /** + * @generated from field: int32 start_line = 1; + */ + startLine: number; + + /** + * @generated from field: int32 start_character = 2; + */ + startCharacter: number; + + /** + * @generated from field: int32 end_line = 3; + */ + endLine: number; + + /** + * @generated from field: int32 end_character = 4; + */ + endCharacter: number; +}; + +/** + * Describes the message scip.MultiLineRange. + * Use `create(MultiLineRangeSchema)` to create a new message. + */ +export const MultiLineRangeSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_scip, 11); + /** * Occurrence associates a source position with a symbol and/or highlighting * information. @@ -1240,12 +1303,26 @@ export const RelationshipSchema: GenMessage = /*@__PURE__*/ */ export type Occurrence = Message<"scip.Occurrence"> & { /** - * Half-open [start, end) range of this occurrence. Must be exactly three or four - * elements: + * Deprecated: Use `single_line_range` or `multi_line_range` instead. * + * Half-open [start, end) range. Must be exactly three or four elements: + * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` - * - Three elements: `[startLine, startCharacter, endCharacter]`. The end line - * is inferred to have the same value as the start line. + * + * Historical note: the original draft of this schema had a `Range` message + * type with `start` and `end` fields of type `Position`, mirroring LSP. + * Benchmarks revealed that this encoding was inefficient and that we could + * reduce the total payload size of an index by 50% by using `repeated int32` + * instead. However, the lack of type safety led to the introduction of + * `single_line_range` and `multi_line_range` as typed alternatives. + * + * @generated from field: repeated int32 range = 1 [deprecated = true]; + * @deprecated + */ + range: number[]; + + /** + * Half-open [start, end) source range of this occurrence. * * It is allowed for the range to be empty (i.e. start==end). * @@ -1256,17 +1333,25 @@ export type Occurrence = Message<"scip.Occurrence"> & { * The 'character' value is interpreted based on the PositionEncoding for * the Document. * - * Historical note: the original draft of this schema had a `Range` message - * type with `start` and `end` fields of type `Position`, mirroring LSP. - * Benchmarks revealed that this encoding was inefficient and that we could - * reduce the total payload size of an index by 50% by using `repeated int32` - * instead. The `repeated int32` encoding is admittedly more embarrassing to - * work with in some programming languages but we hope the performance - * improvements make up for it. - * - * @generated from field: repeated int32 range = 1; - */ - range: number[]; + * @generated from oneof scip.Occurrence.typed_range + */ + typedRange: { + /** + * Range spanning a single line. + * + * @generated from field: scip.SingleLineRange single_line_range = 8; + */ + value: SingleLineRange; + case: "singleLineRange"; + } | { + /** + * Range spanning multiple lines. + * + * @generated from field: scip.MultiLineRange multi_line_range = 9; + */ + value: MultiLineRange; + case: "multiLineRange"; + } | { case: undefined; value?: undefined }; /** * (optional) The symbol that appears at this position. See @@ -1313,12 +1398,18 @@ export type Occurrence = Message<"scip.Occurrence"> & { diagnostics: Diagnostic[]; /** - * (optional) Using the same encoding as the sibling `range` field, half-open - * source range of the nearest non-trivial enclosing AST node. This range must - * enclose the `range` field. Example applications that make use of the - * enclosing_range field: + * Deprecated: Use `typed_enclosing_range` instead. + * + * @generated from field: repeated int32 enclosing_range = 7 [deprecated = true]; + * @deprecated + */ + enclosingRange: number[]; + + /** + * (optional) Half-open source range of the nearest non-trivial enclosing AST + * node. This range must enclose the occurrence range. Example applications: * - * - Call hierarchies: to determine what symbols are references from the body + * - Call hierarchies: to determine what symbols are referenced from the body * of a function * - Symbol outline: to display breadcrumbs from the cursor position to the * root of the file @@ -1366,9 +1457,21 @@ export type Occurrence = Message<"scip.Occurrence"> & { * ^^^^^^^^^^^^^ enclosing_range * ``` * - * @generated from field: repeated int32 enclosing_range = 7; - */ - enclosingRange: number[]; + * @generated from oneof scip.Occurrence.typed_enclosing_range + */ + typedEnclosingRange: { + /** + * @generated from field: scip.SingleLineRange single_line_enclosing_range = 10; + */ + value: SingleLineRange; + case: "singleLineEnclosingRange"; + } | { + /** + * @generated from field: scip.MultiLineRange multi_line_enclosing_range = 11; + */ + value: MultiLineRange; + case: "multiLineEnclosingRange"; + } | { case: undefined; value?: undefined }; }; /** @@ -1376,7 +1479,7 @@ export type Occurrence = Message<"scip.Occurrence"> & { * Use `create(OccurrenceSchema)` to create a new message. */ export const OccurrenceSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_scip, 10); + messageDesc(file_scip, 12); /** * Represents a diagnostic, such as a compiler error or warning, which should be @@ -1425,7 +1528,7 @@ export type Diagnostic = Message<"scip.Diagnostic"> & { * Use `create(DiagnosticSchema)` to create a new message. */ export const DiagnosticSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_scip, 11); + messageDesc(file_scip, 13); /** * @generated from enum scip.ProtocolVersion diff --git a/docs/scip.md b/docs/scip.md index d7202c0a..c36a02ed 100644 --- a/docs/scip.md +++ b/docs/scip.md @@ -149,6 +149,20 @@ function in `IndexVisitor` and update `ParseStreaming`. +### MultiLineRange + +MultiLineRange represents a half-open [start, end) range spanning multiple lines. + +| Name | Type | Description | +| ---- | ---- | ----------- | +| **start_line** | int32 | +| **start_character** | int32 | +| **end_line** | int32 | +| **end_character** | int32 | + + + + ### Occurrence Occurrence associates a source position with a symbol and/or highlighting @@ -159,39 +173,34 @@ across occurrences into a single occurrence to reduce payload sizes. | Name | Type | Description | | ---- | ---- | ----------- | -| repeated **range** | int32 | Half-open [start, end) range of this occurrence. Must be exactly three or four elements: +| repeated **range** | int32 | Deprecated: Use `single_line_range` or `multi_line_range` instead. +| **single_line_range** | SingleLineRange | Range spanning a single line. +| **multi_line_range** | MultiLineRange | Range spanning multiple lines. | **symbol** | string | (optional) The symbol that appears at this position. See `SymbolInformation.symbol` for how to format symbols as strings. | **symbol_roles** | int32 | (optional) Bitset containing `SymbolRole`s in this occurrence. See `SymbolRole`'s documentation for how to read and write this field. | repeated **override_documentation** | string | (optional) CommonMark-formatted documentation for this specific range. If empty, the `Symbol.documentation` field is used instead. One example where this field might be useful is when the symbol represents a generic function (with abstract type parameters such as `List`) and at this occurrence we know the exact values (such as `List`). | **syntax_kind** | SyntaxKind | (optional) What syntax highlighting class should be used for this range? | repeated **diagnostics** | Diagnostic | (optional) Diagnostics that have been reported for this specific range. -| repeated **enclosing_range** | int32 | (optional) Using the same encoding as the sibling `range` field, half-open source range of the nearest non-trivial enclosing AST node. This range must enclose the `range` field. Example applications that make use of the enclosing_range field: +| repeated **enclosing_range** | int32 | Deprecated: Use `typed_enclosing_range` instead. +| **single_line_enclosing_range** | SingleLineRange | +| **multi_line_enclosing_range** | MultiLineRange | Additional notes on **range**: -Half-open [start, end) range of this occurrence. Must be exactly three or four -elements: +Deprecated: Use `single_line_range` or `multi_line_range` instead. +Half-open [start, end) range. Must be exactly three or four elements: +- Three elements: `[startLine, startCharacter, endCharacter]` (single-line) - Four elements: `[startLine, startCharacter, endLine, endCharacter]` -- Three elements: `[startLine, startCharacter, endCharacter]`. The end line - is inferred to have the same value as the start line. - -It is allowed for the range to be empty (i.e. start==end). - -Line numbers and characters are always 0-based. Make sure to increment the -line/character values before displaying them in an editor-like UI because -editors conventionally use 1-based numbers. - -The 'character' value is interpreted based on the PositionEncoding for -the Document. Historical note: the original draft of this schema had a `Range` message type with `start` and `end` fields of type `Position`, mirroring LSP. Benchmarks revealed that this encoding was inefficient and that we could reduce the total payload size of an index by 50% by using `repeated int32` -instead. The `repeated int32` encoding is admittedly more embarrassing to -work with in some programming languages but we hope the performance -improvements make up for it. +instead. However, the lack of type safety led to the introduction of +`single_line_range` and `multi_line_range` as typed alternatives. + + @@ -210,60 +219,7 @@ which commonly allow for type-changing assignment. -Additional notes on **enclosing_range**: - -(optional) Using the same encoding as the sibling `range` field, half-open -source range of the nearest non-trivial enclosing AST node. This range must -enclose the `range` field. Example applications that make use of the -enclosing_range field: -- Call hierarchies: to determine what symbols are references from the body - of a function -- Symbol outline: to display breadcrumbs from the cursor position to the - root of the file -- Expand selection: to select the nearest enclosing AST node. -- Highlight range: to indicate the AST expression that is associated with a - hover popover - -For definition occurrences, the enclosing range should indicate the -start/end bounds of the entire definition AST node, including -documentation. -``` -const n = 3 - ^ range -^^^^^^^^^^^ enclosing_range - -/** Parses the string into something */ -^ enclosing_range start --------------------------------------| -function parse(input string): string { | - ^^^^^ range | - return input.slice(n) | -} | -^ enclosing_range end <---------------------------------------| -``` - -Any attributes/decorators/attached macros should also be part of the -enclosing range. - -```python -@cache -^ enclosing_range start---------------------| -def factorial(n): | - return n * factorial(n-1) if n else 1 | -< enclosing_range end-----------------------| - -``` - -For reference occurrences, the enclosing range should indicate the start/end -bounds of the parent expression. -``` -const a = a.b - ^ range - ^^^ enclosing_range -const b = a.b(41).f(42).g(43) - ^ range - ^^^^^^^^^^^^^ enclosing_range -``` ### Package @@ -327,6 +283,18 @@ signatures using the Document message type. +### SingleLineRange + +SingleLineRange represents a half-open [start, end) range within a single line. + +| Name | Type | Description | +| ---- | ---- | ----------- | +| **line** | int32 | +| **start_character** | int32 | +| **end_character** | int32 | + + + ### Symbol Symbol is similar to a URI, it identifies a class, method, or a local From 514816b76ade469fb24a8ece7df9962a1fa52c56 Mon Sep 17 00:00:00 2001 From: jupblb Date: Wed, 3 Jun 2026 22:11:19 +0200 Subject: [PATCH 03/12] proto: document typed_range precedence over deprecated range --- scip.proto | 50 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/scip.proto b/scip.proto index d8be97f7..16362e2d 100644 --- a/scip.proto +++ b/scip.proto @@ -641,6 +641,11 @@ enum SyntaxKind { } // SingleLineRange represents a half-open [start, end) range within a single line. +// +// Line numbers and characters are always 0-based. Make sure to increment them +// before displaying in an editor-like UI because editors conventionally use +// 1-based numbers. The `character` values are interpreted based on the +// `PositionEncoding` for the enclosing Document. message SingleLineRange { int32 line = 1; int32 start_character = 2; @@ -648,6 +653,15 @@ message SingleLineRange { } // MultiLineRange represents a half-open [start, end) range spanning multiple lines. +// +// Line numbers and characters are always 0-based. Make sure to increment them +// before displaying in an editor-like UI because editors conventionally use +// 1-based numbers. The `character` values are interpreted based on the +// `PositionEncoding` for the enclosing Document. +// +// Producers SHOULD use `SingleLineRange` when `start_line == end_line` to keep +// indexes compact, but consumers MUST accept multi-line encoding even when the +// range happens to fit on a single line. message MultiLineRange { int32 start_line = 1; int32 start_character = 2; @@ -660,6 +674,21 @@ message MultiLineRange { // // If possible, indexers should try to bundle logically related information // across occurrences into a single occurrence to reduce payload sizes. +// +// Range encoding: +// +// An Occurrence carries its source range in one of two ways: the deprecated +// `range` field (a `repeated int32` packed encoding kept for backward +// compatibility), or one of the typed alternatives in the `typed_range` +// oneof. New producers SHOULD set `typed_range` and SHOULD NOT set the +// deprecated `range` field. The same rule applies to `enclosing_range` and +// `typed_enclosing_range`. +// +// When both encodings are present on the same Occurrence, `typed_range` takes +// precedence over `range` (likewise `typed_enclosing_range` over +// `enclosing_range`). Producers that set both forms MUST keep them +// semantically equivalent. Consumers SHOULD prefer the typed form when +// available and fall back to the `repeated int32` form otherwise. message Occurrence { // Deprecated: Use `single_line_range` or `multi_line_range` instead. // @@ -667,24 +696,24 @@ message Occurrence { // - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) // - Four elements: `[startLine, startCharacter, endLine, endCharacter]` // + // The end line of a three-element range is inferred to equal the start line. + // // Historical note: the original draft of this schema had a `Range` message // type with `start` and `end` fields of type `Position`, mirroring LSP. // Benchmarks revealed that this encoding was inefficient and that we could // reduce the total payload size of an index by 50% by using `repeated int32` // instead. However, the lack of type safety led to the introduction of - // `single_line_range` and `multi_line_range` as typed alternatives. + // `single_line_range` and `multi_line_range` as typed alternatives; the + // typed encoding's per-index size overhead is small (single-digit percent) + // because ranges are only a fraction of a typical index payload. repeated int32 range = 1 [deprecated = true]; // Half-open [start, end) source range of this occurrence. // // It is allowed for the range to be empty (i.e. start==end). // - // Line numbers and characters are always 0-based. Make sure to increment the - // line/character values before displaying them in an editor-like UI because - // editors conventionally use 1-based numbers. - // - // The 'character' value is interpreted based on the PositionEncoding for - // the Document. + // When both `typed_range` and the deprecated `range` field are set, + // `typed_range` takes precedence. oneof typed_range { // Range spanning a single line. SingleLineRange single_line_range = 8; @@ -711,6 +740,8 @@ message Occurrence { // (optional) Diagnostics that have been reported for this specific range. repeated Diagnostic diagnostics = 6; // Deprecated: Use `typed_enclosing_range` instead. + // + // Uses the same `repeated int32` encoding as the deprecated `range` field. repeated int32 enclosing_range = 7 [deprecated = true]; // (optional) Half-open source range of the nearest non-trivial enclosing AST @@ -763,8 +794,13 @@ message Occurrence { // ^ range // ^^^^^^^^^^^^^ enclosing_range // ``` + // + // When both `typed_enclosing_range` and the deprecated `enclosing_range` + // field are set, `typed_enclosing_range` takes precedence. oneof typed_enclosing_range { + // Enclosing range spanning a single line. SingleLineRange single_line_enclosing_range = 10; + // Enclosing range spanning multiple lines. MultiLineRange multi_line_enclosing_range = 11; } } From ace62dc166eba47f7697e4511620b14fdd28ff5c Mon Sep 17 00:00:00 2001 From: jupblb Date: Wed, 3 Jun 2026 22:11:26 +0200 Subject: [PATCH 04/12] codegen: regenerate bindings --- bindings/go/scip/scip.pb.go | 50 +- bindings/haskell/src/Proto/Scip.hs | 1018 +++++++++-------- .../org/scip_code/scip/MultiLineRange.java | 18 + .../java/org/scip_code/scip/Occurrence.java | 246 +++- .../scip_code/scip/OccurrenceOrBuilder.java | 60 +- .../org/scip_code/scip/SingleLineRange.java | 10 + .../org/scip_code/scip/MultiLineRangeKt.kt | 9 + .../kotlin/org/scip_code/scip/OccurrenceKt.kt | 95 +- .../org/scip_code/scip/SingleLineRangeKt.kt | 5 + bindings/rust/src/generated/scip.rs | 943 ++++++++------- bindings/typescript/scip_pb.ts | 52 +- docs/scip.md | 45 +- 12 files changed, 1561 insertions(+), 990 deletions(-) diff --git a/bindings/go/scip/scip.pb.go b/bindings/go/scip/scip.pb.go index de32145c..ee0452f7 100644 --- a/bindings/go/scip/scip.pb.go +++ b/bindings/go/scip/scip.pb.go @@ -2294,6 +2294,11 @@ func (x *Relationship) GetIsDefinition() bool { } // SingleLineRange represents a half-open [start, end) range within a single line. +// +// Line numbers and characters are always 0-based. Make sure to increment them +// before displaying in an editor-like UI because editors conventionally use +// 1-based numbers. The `character` values are interpreted based on the +// `PositionEncoding` for the enclosing Document. type SingleLineRange struct { state protoimpl.MessageState `protogen:"open.v1"` Line int32 `protobuf:"varint,1,opt,name=line,proto3" json:"line,omitempty"` @@ -2355,6 +2360,15 @@ func (x *SingleLineRange) GetEndCharacter() int32 { } // MultiLineRange represents a half-open [start, end) range spanning multiple lines. +// +// Line numbers and characters are always 0-based. Make sure to increment them +// before displaying in an editor-like UI because editors conventionally use +// 1-based numbers. The `character` values are interpreted based on the +// `PositionEncoding` for the enclosing Document. +// +// Producers SHOULD use `SingleLineRange` when `start_line == end_line` to keep +// indexes compact, but consumers MUST accept multi-line encoding even when the +// range happens to fit on a single line. type MultiLineRange struct { state protoimpl.MessageState `protogen:"open.v1"` StartLine int32 `protobuf:"varint,1,opt,name=start_line,json=startLine,proto3" json:"start_line,omitempty"` @@ -2428,6 +2442,21 @@ func (x *MultiLineRange) GetEndCharacter() int32 { // // If possible, indexers should try to bundle logically related information // across occurrences into a single occurrence to reduce payload sizes. +// +// Range encoding: +// +// An Occurrence carries its source range in one of two ways: the deprecated +// `range` field (a `repeated int32` packed encoding kept for backward +// compatibility), or one of the typed alternatives in the `typed_range` +// oneof. New producers SHOULD set `typed_range` and SHOULD NOT set the +// deprecated `range` field. The same rule applies to `enclosing_range` and +// `typed_enclosing_range`. +// +// When both encodings are present on the same Occurrence, `typed_range` takes +// precedence over `range` (likewise `typed_enclosing_range` over +// `enclosing_range`). Producers that set both forms MUST keep them +// semantically equivalent. Consumers SHOULD prefer the typed form when +// available and fall back to the `repeated int32` form otherwise. type Occurrence struct { state protoimpl.MessageState `protogen:"open.v1"` // Deprecated: Use `single_line_range` or `multi_line_range` instead. @@ -2436,12 +2465,16 @@ type Occurrence struct { // - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) // - Four elements: `[startLine, startCharacter, endLine, endCharacter]` // + // The end line of a three-element range is inferred to equal the start line. + // // Historical note: the original draft of this schema had a `Range` message // type with `start` and `end` fields of type `Position`, mirroring LSP. // Benchmarks revealed that this encoding was inefficient and that we could // reduce the total payload size of an index by 50% by using `repeated int32` // instead. However, the lack of type safety led to the introduction of - // `single_line_range` and `multi_line_range` as typed alternatives. + // `single_line_range` and `multi_line_range` as typed alternatives; the + // typed encoding's per-index size overhead is small (single-digit percent) + // because ranges are only a fraction of a typical index payload. // // Deprecated: Marked as deprecated in scip.proto. Range []int32 `protobuf:"varint,1,rep,packed,name=range,proto3" json:"range,omitempty"` @@ -2449,12 +2482,8 @@ type Occurrence struct { // // It is allowed for the range to be empty (i.e. start==end). // - // Line numbers and characters are always 0-based. Make sure to increment the - // line/character values before displaying them in an editor-like UI because - // editors conventionally use 1-based numbers. - // - // The 'character' value is interpreted based on the PositionEncoding for - // the Document. + // When both `typed_range` and the deprecated `range` field are set, + // `typed_range` takes precedence. // // Types that are valid to be assigned to TypedRange: // @@ -2482,6 +2511,8 @@ type Occurrence struct { Diagnostics []*Diagnostic `protobuf:"bytes,6,rep,name=diagnostics,proto3" json:"diagnostics,omitempty"` // Deprecated: Use `typed_enclosing_range` instead. // + // Uses the same `repeated int32` encoding as the deprecated `range` field. + // // Deprecated: Marked as deprecated in scip.proto. EnclosingRange []int32 `protobuf:"varint,7,rep,packed,name=enclosing_range,json=enclosingRange,proto3" json:"enclosing_range,omitempty"` // (optional) Half-open source range of the nearest non-trivial enclosing AST @@ -2545,6 +2576,9 @@ type Occurrence struct { // // ``` // + // When both `typed_enclosing_range` and the deprecated `enclosing_range` + // field are set, `typed_enclosing_range` takes precedence. + // // Types that are valid to be assigned to TypedEnclosingRange: // // *Occurrence_SingleLineEnclosingRange @@ -2708,10 +2742,12 @@ type isOccurrence_TypedEnclosingRange interface { } type Occurrence_SingleLineEnclosingRange struct { + // Enclosing range spanning a single line. SingleLineEnclosingRange *SingleLineRange `protobuf:"bytes,10,opt,name=single_line_enclosing_range,json=singleLineEnclosingRange,proto3,oneof"` } type Occurrence_MultiLineEnclosingRange struct { + // Enclosing range spanning multiple lines. MultiLineEnclosingRange *MultiLineRange `protobuf:"bytes,11,opt,name=multi_line_enclosing_range,json=multiLineEnclosingRange,proto3,oneof"` } diff --git a/bindings/haskell/src/Proto/Scip.hs b/bindings/haskell/src/Proto/Scip.hs index 2fc96436..8d3f6fff 100644 --- a/bindings/haskell/src/Proto/Scip.hs +++ b/bindings/haskell/src/Proto/Scip.hs @@ -7455,9 +7455,9 @@ packedFileDescriptor \\ETXXSL\DLE \DC2\b\n\ \\EOTYAML\DLEJ\DC2\a\n\ \\ETXZig\DLE&BN\n\ - \\DC2org.scip_code.scipB\tScipProtoP\SOHZ+github.com/scip-code/scip/bindings/go/scip/J\167\199\STX\n\ + \\DC2org.scip_code.scipB\tScipProtoP\SOHZ+github.com/scip-code/scip/bindings/go/scip/J\194\213\STX\n\ \\a\DC2\ENQ\n\ - \\NUL\156\a\SOH\n\ + \\NUL\192\a\SOH\n\ \\130\EOT\n\ \\SOH\f\DC2\ETX\n\ \\NUL\DC22\247\ETX An index contains one or more pieces of information about a given piece of\n\ @@ -9267,179 +9267,208 @@ packedFileDescriptor \\n\ \\r\n\ \\ENQ\ENQ\EOT\STX&\STX\DC2\EOT\255\EOT\DC1\DC3\n\ - \_\n\ + \\239\STX\n\ \\STX\EOT\n\ - \\DC2\ACK\131\ENQ\NUL\135\ENQ\SOH\SUBQ SingleLineRange represents a half-open [start, end) range within a single line.\n\ + \\DC2\ACK\136\ENQ\NUL\140\ENQ\SOH\SUB\224\STX SingleLineRange represents a half-open [start, end) range within a single line.\n\ + \\n\ + \ Line numbers and characters are always 0-based. Make sure to increment them\n\ + \ before displaying in an editor-like UI because editors conventionally use\n\ + \ 1-based numbers. The `character` values are interpreted based on the\n\ + \ `PositionEncoding` for the enclosing Document.\n\ \\n\ \\v\n\ \\ETX\EOT\n\ - \\SOH\DC2\EOT\131\ENQ\b\ETB\n\ + \\SOH\DC2\EOT\136\ENQ\b\ETB\n\ \\r\n\ \\ENQ\EOT\n\ - \\STX\NUL\ENQ\DC2\EOT\132\ENQ\STX\a\n\ + \\STX\NUL\ENQ\DC2\EOT\137\ENQ\STX\a\n\ \\f\n\ \\EOT\EOT\n\ - \\STX\NUL\DC2\EOT\132\ENQ\STX\DC1\n\ + \\STX\NUL\DC2\EOT\137\ENQ\STX\DC1\n\ \\r\n\ \\ENQ\EOT\n\ - \\STX\NUL\SOH\DC2\EOT\132\ENQ\b\f\n\ + \\STX\NUL\SOH\DC2\EOT\137\ENQ\b\f\n\ \\r\n\ \\ENQ\EOT\n\ - \\STX\NUL\ETX\DC2\EOT\132\ENQ\SI\DLE\n\ + \\STX\NUL\ETX\DC2\EOT\137\ENQ\SI\DLE\n\ \\r\n\ \\ENQ\EOT\n\ - \\STX\SOH\ENQ\DC2\EOT\133\ENQ\STX\a\n\ + \\STX\SOH\ENQ\DC2\EOT\138\ENQ\STX\a\n\ \\f\n\ \\EOT\EOT\n\ - \\STX\SOH\DC2\EOT\133\ENQ\STX\FS\n\ + \\STX\SOH\DC2\EOT\138\ENQ\STX\FS\n\ \\r\n\ \\ENQ\EOT\n\ - \\STX\SOH\SOH\DC2\EOT\133\ENQ\b\ETB\n\ + \\STX\SOH\SOH\DC2\EOT\138\ENQ\b\ETB\n\ \\r\n\ \\ENQ\EOT\n\ - \\STX\SOH\ETX\DC2\EOT\133\ENQ\SUB\ESC\n\ + \\STX\SOH\ETX\DC2\EOT\138\ENQ\SUB\ESC\n\ \\r\n\ \\ENQ\EOT\n\ - \\STX\STX\ENQ\DC2\EOT\134\ENQ\STX\a\n\ + \\STX\STX\ENQ\DC2\EOT\139\ENQ\STX\a\n\ \\f\n\ \\EOT\EOT\n\ - \\STX\STX\DC2\EOT\134\ENQ\STX\SUB\n\ + \\STX\STX\DC2\EOT\139\ENQ\STX\SUB\n\ \\r\n\ \\ENQ\EOT\n\ - \\STX\STX\SOH\DC2\EOT\134\ENQ\b\NAK\n\ + \\STX\STX\SOH\DC2\EOT\139\ENQ\b\NAK\n\ \\r\n\ \\ENQ\EOT\n\ - \\STX\STX\ETX\DC2\EOT\134\ENQ\CAN\EM\n\ - \a\n\ - \\STX\EOT\v\DC2\ACK\138\ENQ\NUL\143\ENQ\SOH\SUBS MultiLineRange represents a half-open [start, end) range spanning multiple lines.\n\ + \\STX\STX\ETX\DC2\EOT\139\ENQ\CAN\EM\n\ + \\182\EOT\n\ + \\STX\EOT\v\DC2\ACK\152\ENQ\NUL\157\ENQ\SOH\SUB\167\EOT MultiLineRange represents a half-open [start, end) range spanning multiple lines.\n\ + \\n\ + \ Line numbers and characters are always 0-based. Make sure to increment them\n\ + \ before displaying in an editor-like UI because editors conventionally use\n\ + \ 1-based numbers. The `character` values are interpreted based on the\n\ + \ `PositionEncoding` for the enclosing Document.\n\ + \\n\ + \ Producers SHOULD use `SingleLineRange` when `start_line == end_line` to keep\n\ + \ indexes compact, but consumers MUST accept multi-line encoding even when the\n\ + \ range happens to fit on a single line.\n\ \\n\ \\v\n\ - \\ETX\EOT\v\SOH\DC2\EOT\138\ENQ\b\SYN\n\ + \\ETX\EOT\v\SOH\DC2\EOT\152\ENQ\b\SYN\n\ \\r\n\ - \\ENQ\EOT\v\STX\NUL\ENQ\DC2\EOT\139\ENQ\STX\a\n\ + \\ENQ\EOT\v\STX\NUL\ENQ\DC2\EOT\153\ENQ\STX\a\n\ \\f\n\ - \\EOT\EOT\v\STX\NUL\DC2\EOT\139\ENQ\STX\ETB\n\ + \\EOT\EOT\v\STX\NUL\DC2\EOT\153\ENQ\STX\ETB\n\ \\r\n\ - \\ENQ\EOT\v\STX\NUL\SOH\DC2\EOT\139\ENQ\b\DC2\n\ + \\ENQ\EOT\v\STX\NUL\SOH\DC2\EOT\153\ENQ\b\DC2\n\ \\r\n\ - \\ENQ\EOT\v\STX\NUL\ETX\DC2\EOT\139\ENQ\NAK\SYN\n\ + \\ENQ\EOT\v\STX\NUL\ETX\DC2\EOT\153\ENQ\NAK\SYN\n\ \\r\n\ - \\ENQ\EOT\v\STX\SOH\ENQ\DC2\EOT\140\ENQ\STX\a\n\ + \\ENQ\EOT\v\STX\SOH\ENQ\DC2\EOT\154\ENQ\STX\a\n\ \\f\n\ - \\EOT\EOT\v\STX\SOH\DC2\EOT\140\ENQ\STX\FS\n\ + \\EOT\EOT\v\STX\SOH\DC2\EOT\154\ENQ\STX\FS\n\ \\r\n\ - \\ENQ\EOT\v\STX\SOH\SOH\DC2\EOT\140\ENQ\b\ETB\n\ + \\ENQ\EOT\v\STX\SOH\SOH\DC2\EOT\154\ENQ\b\ETB\n\ \\r\n\ - \\ENQ\EOT\v\STX\SOH\ETX\DC2\EOT\140\ENQ\SUB\ESC\n\ + \\ENQ\EOT\v\STX\SOH\ETX\DC2\EOT\154\ENQ\SUB\ESC\n\ \\r\n\ - \\ENQ\EOT\v\STX\STX\ENQ\DC2\EOT\141\ENQ\STX\a\n\ + \\ENQ\EOT\v\STX\STX\ENQ\DC2\EOT\155\ENQ\STX\a\n\ \\f\n\ - \\EOT\EOT\v\STX\STX\DC2\EOT\141\ENQ\STX\NAK\n\ + \\EOT\EOT\v\STX\STX\DC2\EOT\155\ENQ\STX\NAK\n\ \\r\n\ - \\ENQ\EOT\v\STX\STX\SOH\DC2\EOT\141\ENQ\b\DLE\n\ + \\ENQ\EOT\v\STX\STX\SOH\DC2\EOT\155\ENQ\b\DLE\n\ \\r\n\ - \\ENQ\EOT\v\STX\STX\ETX\DC2\EOT\141\ENQ\DC3\DC4\n\ + \\ENQ\EOT\v\STX\STX\ETX\DC2\EOT\155\ENQ\DC3\DC4\n\ \\r\n\ - \\ENQ\EOT\v\STX\ETX\ENQ\DC2\EOT\142\ENQ\STX\a\n\ + \\ENQ\EOT\v\STX\ETX\ENQ\DC2\EOT\156\ENQ\STX\a\n\ \\f\n\ - \\EOT\EOT\v\STX\ETX\DC2\EOT\142\ENQ\STX\SUB\n\ + \\EOT\EOT\v\STX\ETX\DC2\EOT\156\ENQ\STX\SUB\n\ \\r\n\ - \\ENQ\EOT\v\STX\ETX\SOH\DC2\EOT\142\ENQ\b\NAK\n\ + \\ENQ\EOT\v\STX\ETX\SOH\DC2\EOT\156\ENQ\b\NAK\n\ \\r\n\ - \\ENQ\EOT\v\STX\ETX\ETX\DC2\EOT\142\ENQ\CAN\EM\n\ - \\249\SOH\n\ - \\STX\EOT\f\DC2\ACK\150\ENQ\NUL\129\ACK\SOH\SUB\234\SOH Occurrence associates a source position with a symbol and/or highlighting\n\ + \\ENQ\EOT\v\STX\ETX\ETX\DC2\EOT\156\ENQ\CAN\EM\n\ + \\228\a\n\ + \\STX\EOT\f\DC2\ACK\179\ENQ\NUL\165\ACK\SOH\SUB\213\a Occurrence associates a source position with a symbol and/or highlighting\n\ \ information.\n\ \\n\ \ If possible, indexers should try to bundle logically related information\n\ \ across occurrences into a single occurrence to reduce payload sizes.\n\ \\n\ + \ Range encoding:\n\ + \\n\ + \ An Occurrence carries its source range in one of two ways: the deprecated\n\ + \ `range` field (a `repeated int32` packed encoding kept for backward\n\ + \ compatibility), or one of the typed alternatives in the `typed_range`\n\ + \ oneof. New producers SHOULD set `typed_range` and SHOULD NOT set the\n\ + \ deprecated `range` field. The same rule applies to `enclosing_range` and\n\ + \ `typed_enclosing_range`.\n\ + \\n\ + \ When both encodings are present on the same Occurrence, `typed_range` takes\n\ + \ precedence over `range` (likewise `typed_enclosing_range` over\n\ + \ `enclosing_range`). Producers that set both forms MUST keep them\n\ + \ semantically equivalent. Consumers SHOULD prefer the typed form when\n\ + \ available and fall back to the `repeated int32` form otherwise.\n\ + \\n\ \\v\n\ - \\ETX\EOT\f\SOH\DC2\EOT\150\ENQ\b\DC2\n\ + \\ETX\EOT\f\SOH\DC2\EOT\179\ENQ\b\DC2\n\ \\r\n\ - \\ENQ\EOT\f\STX\NUL\EOT\DC2\EOT\163\ENQ\STX\n\ + \\ENQ\EOT\f\STX\NUL\EOT\DC2\EOT\196\ENQ\STX\n\ \\n\ - \\224\ENQ\n\ - \\EOT\EOT\f\STX\NUL\DC2\EOT\163\ENQ\STX/\SUB\209\ENQ Deprecated: Use `single_line_range` or `multi_line_range` instead.\n\ + \\187\a\n\ + \\EOT\EOT\f\STX\NUL\DC2\EOT\196\ENQ\STX/\SUB\172\a Deprecated: Use `single_line_range` or `multi_line_range` instead.\n\ \\n\ \ Half-open [start, end) range. Must be exactly three or four elements:\n\ \ - Three elements: `[startLine, startCharacter, endCharacter]` (single-line)\n\ \ - Four elements: `[startLine, startCharacter, endLine, endCharacter]`\n\ \\n\ + \ The end line of a three-element range is inferred to equal the start line.\n\ + \\n\ \ Historical note: the original draft of this schema had a `Range` message\n\ \ type with `start` and `end` fields of type `Position`, mirroring LSP.\n\ \ Benchmarks revealed that this encoding was inefficient and that we could\n\ \ reduce the total payload size of an index by 50% by using `repeated int32`\n\ \ instead. However, the lack of type safety led to the introduction of\n\ - \ `single_line_range` and `multi_line_range` as typed alternatives.\n\ + \ `single_line_range` and `multi_line_range` as typed alternatives; the\n\ + \ typed encoding's per-index size overhead is small (single-digit percent)\n\ + \ because ranges are only a fraction of a typical index payload.\n\ \\n\ \\r\n\ - \\ENQ\EOT\f\STX\NUL\ENQ\DC2\EOT\163\ENQ\v\DLE\n\ + \\ENQ\EOT\f\STX\NUL\ENQ\DC2\EOT\196\ENQ\v\DLE\n\ \\r\n\ - \\ENQ\EOT\f\STX\NUL\SOH\DC2\EOT\163\ENQ\DC1\SYN\n\ + \\ENQ\EOT\f\STX\NUL\SOH\DC2\EOT\196\ENQ\DC1\SYN\n\ \\r\n\ - \\ENQ\EOT\f\STX\NUL\ETX\DC2\EOT\163\ENQ\EM\SUB\n\ + \\ENQ\EOT\f\STX\NUL\ETX\DC2\EOT\196\ENQ\EM\SUB\n\ \\r\n\ - \\ENQ\EOT\f\STX\NUL\b\DC2\EOT\163\ENQ\ESC.\n\ + \\ENQ\EOT\f\STX\NUL\b\DC2\EOT\196\ENQ\ESC.\n\ \\SO\n\ - \\ACK\EOT\f\STX\NUL\b\ETX\DC2\EOT\163\ENQ\FS-\n\ - \\164\ETX\n\ - \\EOT\EOT\f\b\NUL\DC2\ACK\175\ENQ\STX\180\ENQ\ETX\SUB\147\ETX Half-open [start, end) source range of this occurrence.\n\ + \\ACK\EOT\f\STX\NUL\b\ETX\DC2\EOT\196\ENQ\FS-\n\ + \\236\SOH\n\ + \\EOT\EOT\f\b\NUL\DC2\ACK\204\ENQ\STX\209\ENQ\ETX\SUB\219\SOH Half-open [start, end) source range of this occurrence.\n\ \\n\ \ It is allowed for the range to be empty (i.e. start==end).\n\ \\n\ - \ Line numbers and characters are always 0-based. Make sure to increment the\n\ - \ line/character values before displaying them in an editor-like UI because\n\ - \ editors conventionally use 1-based numbers.\n\ - \\n\ - \ The 'character' value is interpreted based on the PositionEncoding for\n\ - \ the Document.\n\ + \ When both `typed_range` and the deprecated `range` field are set,\n\ + \ `typed_range` takes precedence.\n\ \\n\ \\r\n\ - \\ENQ\EOT\f\b\NUL\SOH\DC2\EOT\175\ENQ\b\DC3\n\ + \\ENQ\EOT\f\b\NUL\SOH\DC2\EOT\204\ENQ\b\DC3\n\ \\r\n\ - \\ENQ\EOT\f\STX\SOH\ACK\DC2\EOT\177\ENQ\EOT\DC3\n\ + \\ENQ\EOT\f\STX\SOH\ACK\DC2\EOT\206\ENQ\EOT\DC3\n\ \-\n\ - \\EOT\EOT\f\STX\SOH\DC2\EOT\177\ENQ\EOT*\SUB\US Range spanning a single line.\n\ + \\EOT\EOT\f\STX\SOH\DC2\EOT\206\ENQ\EOT*\SUB\US Range spanning a single line.\n\ \\n\ \\r\n\ - \\ENQ\EOT\f\STX\SOH\SOH\DC2\EOT\177\ENQ\DC4%\n\ + \\ENQ\EOT\f\STX\SOH\SOH\DC2\EOT\206\ENQ\DC4%\n\ \\r\n\ - \\ENQ\EOT\f\STX\SOH\ETX\DC2\EOT\177\ENQ()\n\ + \\ENQ\EOT\f\STX\SOH\ETX\DC2\EOT\206\ENQ()\n\ \\r\n\ - \\ENQ\EOT\f\STX\STX\ACK\DC2\EOT\179\ENQ\EOT\DC2\n\ + \\ENQ\EOT\f\STX\STX\ACK\DC2\EOT\208\ENQ\EOT\DC2\n\ \.\n\ - \\EOT\EOT\f\STX\STX\DC2\EOT\179\ENQ\EOT(\SUB Range spanning multiple lines.\n\ + \\EOT\EOT\f\STX\STX\DC2\EOT\208\ENQ\EOT(\SUB Range spanning multiple lines.\n\ \\n\ \\r\n\ - \\ENQ\EOT\f\STX\STX\SOH\DC2\EOT\179\ENQ\DC3#\n\ + \\ENQ\EOT\f\STX\STX\SOH\DC2\EOT\208\ENQ\DC3#\n\ \\r\n\ - \\ENQ\EOT\f\STX\STX\ETX\DC2\EOT\179\ENQ&'\n\ + \\ENQ\EOT\f\STX\STX\ETX\DC2\EOT\208\ENQ&'\n\ \\r\n\ - \\ENQ\EOT\f\STX\ETX\ENQ\DC2\EOT\183\ENQ\STX\b\n\ + \\ENQ\EOT\f\STX\ETX\ENQ\DC2\EOT\212\ENQ\STX\b\n\ \\138\SOH\n\ - \\EOT\EOT\f\STX\ETX\DC2\EOT\183\ENQ\STX\DC4\SUB| (optional) The symbol that appears at this position. See\n\ + \\EOT\EOT\f\STX\ETX\DC2\EOT\212\ENQ\STX\DC4\SUB| (optional) The symbol that appears at this position. See\n\ \ `SymbolInformation.symbol` for how to format symbols as strings.\n\ \\n\ \\r\n\ - \\ENQ\EOT\f\STX\ETX\SOH\DC2\EOT\183\ENQ\t\SI\n\ + \\ENQ\EOT\f\STX\ETX\SOH\DC2\EOT\212\ENQ\t\SI\n\ \\r\n\ - \\ENQ\EOT\f\STX\ETX\ETX\DC2\EOT\183\ENQ\DC2\DC3\n\ + \\ENQ\EOT\f\STX\ETX\ETX\DC2\EOT\212\ENQ\DC2\DC3\n\ \\r\n\ - \\ENQ\EOT\f\STX\EOT\ENQ\DC2\EOT\186\ENQ\STX\a\n\ + \\ENQ\EOT\f\STX\EOT\ENQ\DC2\EOT\215\ENQ\STX\a\n\ \\151\SOH\n\ - \\EOT\EOT\f\STX\EOT\DC2\EOT\186\ENQ\STX\EM\SUB\136\SOH (optional) Bitset containing `SymbolRole`s in this occurrence.\n\ + \\EOT\EOT\f\STX\EOT\DC2\EOT\215\ENQ\STX\EM\SUB\136\SOH (optional) Bitset containing `SymbolRole`s in this occurrence.\n\ \ See `SymbolRole`'s documentation for how to read and write this field.\n\ \\n\ \\r\n\ - \\ENQ\EOT\f\STX\EOT\SOH\DC2\EOT\186\ENQ\b\DC4\n\ + \\ENQ\EOT\f\STX\EOT\SOH\DC2\EOT\215\ENQ\b\DC4\n\ \\r\n\ - \\ENQ\EOT\f\STX\EOT\ETX\DC2\EOT\186\ENQ\ETB\CAN\n\ + \\ENQ\EOT\f\STX\EOT\ETX\DC2\EOT\215\ENQ\ETB\CAN\n\ \\r\n\ - \\ENQ\EOT\f\STX\ENQ\EOT\DC2\EOT\195\ENQ\STX\n\ + \\ENQ\EOT\f\STX\ENQ\EOT\DC2\EOT\224\ENQ\STX\n\ \\n\ \\241\ETX\n\ - \\EOT\EOT\f\STX\ENQ\DC2\EOT\195\ENQ\STX-\SUB\226\ETX (optional) CommonMark-formatted documentation for this specific range. If\n\ + \\EOT\EOT\f\STX\ENQ\DC2\EOT\224\ENQ\STX-\SUB\226\ETX (optional) CommonMark-formatted documentation for this specific range. If\n\ \ empty, the `Symbol.documentation` field is used instead. One example\n\ \ where this field might be useful is when the symbol represents a generic\n\ \ function (with abstract type parameters such as `List`) and at this\n\ @@ -9449,50 +9478,52 @@ packedFileDescriptor \ which commonly allow for type-changing assignment.\n\ \\n\ \\r\n\ - \\ENQ\EOT\f\STX\ENQ\ENQ\DC2\EOT\195\ENQ\v\DC1\n\ + \\ENQ\EOT\f\STX\ENQ\ENQ\DC2\EOT\224\ENQ\v\DC1\n\ \\r\n\ - \\ENQ\EOT\f\STX\ENQ\SOH\DC2\EOT\195\ENQ\DC2(\n\ + \\ENQ\EOT\f\STX\ENQ\SOH\DC2\EOT\224\ENQ\DC2(\n\ \\r\n\ - \\ENQ\EOT\f\STX\ENQ\ETX\DC2\EOT\195\ENQ+,\n\ + \\ENQ\EOT\f\STX\ENQ\ETX\DC2\EOT\224\ENQ+,\n\ \\r\n\ - \\ENQ\EOT\f\STX\ACK\ACK\DC2\EOT\197\ENQ\STX\f\n\ + \\ENQ\EOT\f\STX\ACK\ACK\DC2\EOT\226\ENQ\STX\f\n\ \X\n\ - \\EOT\EOT\f\STX\ACK\DC2\EOT\197\ENQ\STX\GS\SUBJ (optional) What syntax highlighting class should be used for this range?\n\ + \\EOT\EOT\f\STX\ACK\DC2\EOT\226\ENQ\STX\GS\SUBJ (optional) What syntax highlighting class should be used for this range?\n\ \\n\ \\r\n\ - \\ENQ\EOT\f\STX\ACK\SOH\DC2\EOT\197\ENQ\r\CAN\n\ + \\ENQ\EOT\f\STX\ACK\SOH\DC2\EOT\226\ENQ\r\CAN\n\ \\r\n\ - \\ENQ\EOT\f\STX\ACK\ETX\DC2\EOT\197\ENQ\ESC\FS\n\ + \\ENQ\EOT\f\STX\ACK\ETX\DC2\EOT\226\ENQ\ESC\FS\n\ \\r\n\ - \\ENQ\EOT\f\STX\a\EOT\DC2\EOT\199\ENQ\STX\n\ + \\ENQ\EOT\f\STX\a\EOT\DC2\EOT\228\ENQ\STX\n\ \\n\ \W\n\ - \\EOT\EOT\f\STX\a\DC2\EOT\199\ENQ\STX&\SUBI (optional) Diagnostics that have been reported for this specific range.\n\ + \\EOT\EOT\f\STX\a\DC2\EOT\228\ENQ\STX&\SUBI (optional) Diagnostics that have been reported for this specific range.\n\ \\n\ \\r\n\ - \\ENQ\EOT\f\STX\a\ACK\DC2\EOT\199\ENQ\v\NAK\n\ + \\ENQ\EOT\f\STX\a\ACK\DC2\EOT\228\ENQ\v\NAK\n\ \\r\n\ - \\ENQ\EOT\f\STX\a\SOH\DC2\EOT\199\ENQ\SYN!\n\ + \\ENQ\EOT\f\STX\a\SOH\DC2\EOT\228\ENQ\SYN!\n\ \\r\n\ - \\ENQ\EOT\f\STX\a\ETX\DC2\EOT\199\ENQ$%\n\ + \\ENQ\EOT\f\STX\a\ETX\DC2\EOT\228\ENQ$%\n\ \\r\n\ - \\ENQ\EOT\f\STX\b\EOT\DC2\EOT\201\ENQ\STX\n\ + \\ENQ\EOT\f\STX\b\EOT\DC2\EOT\232\ENQ\STX\n\ \\n\ - \@\n\ - \\EOT\EOT\f\STX\b\DC2\EOT\201\ENQ\STX9\SUB2 Deprecated: Use `typed_enclosing_range` instead.\n\ + \\139\SOH\n\ + \\EOT\EOT\f\STX\b\DC2\EOT\232\ENQ\STX9\SUB} Deprecated: Use `typed_enclosing_range` instead.\n\ + \\n\ + \ Uses the same `repeated int32` encoding as the deprecated `range` field.\n\ \\n\ \\r\n\ - \\ENQ\EOT\f\STX\b\ENQ\DC2\EOT\201\ENQ\v\DLE\n\ + \\ENQ\EOT\f\STX\b\ENQ\DC2\EOT\232\ENQ\v\DLE\n\ \\r\n\ - \\ENQ\EOT\f\STX\b\SOH\DC2\EOT\201\ENQ\DC1 \n\ + \\ENQ\EOT\f\STX\b\SOH\DC2\EOT\232\ENQ\DC1 \n\ \\r\n\ - \\ENQ\EOT\f\STX\b\ETX\DC2\EOT\201\ENQ#$\n\ + \\ENQ\EOT\f\STX\b\ETX\DC2\EOT\232\ENQ#$\n\ \\r\n\ - \\ENQ\EOT\f\STX\b\b\DC2\EOT\201\ENQ%8\n\ + \\ENQ\EOT\f\STX\b\b\DC2\EOT\232\ENQ%8\n\ \\SO\n\ - \\ACK\EOT\f\STX\b\b\ETX\DC2\EOT\201\ENQ&7\n\ - \\217\r\n\ - \\EOT\EOT\f\b\SOH\DC2\ACK\253\ENQ\STX\128\ACK\ETX\SUB\200\r (optional) Half-open source range of the nearest non-trivial enclosing AST\n\ + \\ACK\EOT\f\STX\b\b\ETX\DC2\EOT\232\ENQ&7\n\ + \\220\SO\n\ + \\EOT\EOT\f\b\SOH\DC2\ACK\159\ACK\STX\164\ACK\ETX\SUB\203\SO (optional) Half-open source range of the nearest non-trivial enclosing AST\n\ \ node. This range must enclose the occurrence range. Example applications:\n\ \\n\ \ - Call hierarchies: to determine what symbols are referenced from the body\n\ @@ -9543,143 +9574,148 @@ packedFileDescriptor \ ^^^^^^^^^^^^^ enclosing_range\n\ \ ```\n\ \\n\ + \ When both `typed_enclosing_range` and the deprecated `enclosing_range`\n\ + \ field are set, `typed_enclosing_range` takes precedence.\n\ + \\n\ \\r\n\ - \\ENQ\EOT\f\b\SOH\SOH\DC2\EOT\253\ENQ\b\GS\n\ + \\ENQ\EOT\f\b\SOH\SOH\DC2\EOT\159\ACK\b\GS\n\ \\r\n\ - \\ENQ\EOT\f\STX\t\ACK\DC2\EOT\254\ENQ\EOT\DC3\n\ - \\f\n\ - \\EOT\EOT\f\STX\t\DC2\EOT\254\ENQ\EOT5\n\ + \\ENQ\EOT\f\STX\t\ACK\DC2\EOT\161\ACK\EOT\DC3\n\ + \7\n\ + \\EOT\EOT\f\STX\t\DC2\EOT\161\ACK\EOT5\SUB) Enclosing range spanning a single line.\n\ + \\n\ \\r\n\ - \\ENQ\EOT\f\STX\t\SOH\DC2\EOT\254\ENQ\DC4/\n\ + \\ENQ\EOT\f\STX\t\SOH\DC2\EOT\161\ACK\DC4/\n\ \\r\n\ - \\ENQ\EOT\f\STX\t\ETX\DC2\EOT\254\ENQ24\n\ + \\ENQ\EOT\f\STX\t\ETX\DC2\EOT\161\ACK24\n\ \\r\n\ \\ENQ\EOT\f\STX\n\ - \\ACK\DC2\EOT\255\ENQ\EOT\DC2\n\ - \\f\n\ + \\ACK\DC2\EOT\163\ACK\EOT\DC2\n\ + \8\n\ \\EOT\EOT\f\STX\n\ - \\DC2\EOT\255\ENQ\EOT3\n\ + \\DC2\EOT\163\ACK\EOT3\SUB* Enclosing range spanning multiple lines.\n\ + \\n\ \\r\n\ \\ENQ\EOT\f\STX\n\ - \\SOH\DC2\EOT\255\ENQ\DC3-\n\ + \\SOH\DC2\EOT\163\ACK\DC3-\n\ \\r\n\ \\ENQ\EOT\f\STX\n\ - \\ETX\DC2\EOT\255\ENQ02\n\ + \\ETX\DC2\EOT\163\ACK02\n\ \w\n\ - \\STX\EOT\r\DC2\ACK\133\ACK\NUL\144\ACK\SOH\SUBi Represents a diagnostic, such as a compiler error or warning, which should be\n\ + \\STX\EOT\r\DC2\ACK\169\ACK\NUL\180\ACK\SOH\SUBi Represents a diagnostic, such as a compiler error or warning, which should be\n\ \ reported for a document.\n\ \\n\ \\v\n\ - \\ETX\EOT\r\SOH\DC2\EOT\133\ACK\b\DC2\n\ + \\ETX\EOT\r\SOH\DC2\EOT\169\ACK\b\DC2\n\ \\r\n\ - \\ENQ\EOT\r\STX\NUL\ACK\DC2\EOT\135\ACK\STX\n\ + \\ENQ\EOT\r\STX\NUL\ACK\DC2\EOT\171\ACK\STX\n\ \\n\ \W\n\ - \\EOT\EOT\r\STX\NUL\DC2\EOT\135\ACK\STX\CAN\SUBI Should this diagnostic be reported as an error, warning, info, or hint?\n\ + \\EOT\EOT\r\STX\NUL\DC2\EOT\171\ACK\STX\CAN\SUBI Should this diagnostic be reported as an error, warning, info, or hint?\n\ \\n\ \\r\n\ - \\ENQ\EOT\r\STX\NUL\SOH\DC2\EOT\135\ACK\v\DC3\n\ + \\ENQ\EOT\r\STX\NUL\SOH\DC2\EOT\171\ACK\v\DC3\n\ \\r\n\ - \\ENQ\EOT\r\STX\NUL\ETX\DC2\EOT\135\ACK\SYN\ETB\n\ + \\ENQ\EOT\r\STX\NUL\ETX\DC2\EOT\171\ACK\SYN\ETB\n\ \\r\n\ - \\ENQ\EOT\r\STX\SOH\ENQ\DC2\EOT\137\ACK\STX\b\n\ + \\ENQ\EOT\r\STX\SOH\ENQ\DC2\EOT\173\ACK\STX\b\n\ \]\n\ - \\EOT\EOT\r\STX\SOH\DC2\EOT\137\ACK\STX\DC2\SUBO (optional) Code of this diagnostic, which might appear in the user interface.\n\ + \\EOT\EOT\r\STX\SOH\DC2\EOT\173\ACK\STX\DC2\SUBO (optional) Code of this diagnostic, which might appear in the user interface.\n\ \\n\ \\r\n\ - \\ENQ\EOT\r\STX\SOH\SOH\DC2\EOT\137\ACK\t\r\n\ + \\ENQ\EOT\r\STX\SOH\SOH\DC2\EOT\173\ACK\t\r\n\ \\r\n\ - \\ENQ\EOT\r\STX\SOH\ETX\DC2\EOT\137\ACK\DLE\DC1\n\ + \\ENQ\EOT\r\STX\SOH\ETX\DC2\EOT\173\ACK\DLE\DC1\n\ \\r\n\ - \\ENQ\EOT\r\STX\STX\ENQ\DC2\EOT\139\ACK\STX\b\n\ + \\ENQ\EOT\r\STX\STX\ENQ\DC2\EOT\175\ACK\STX\b\n\ \+\n\ - \\EOT\EOT\r\STX\STX\DC2\EOT\139\ACK\STX\NAK\SUB\GS Message of this diagnostic.\n\ + \\EOT\EOT\r\STX\STX\DC2\EOT\175\ACK\STX\NAK\SUB\GS Message of this diagnostic.\n\ \\n\ \\r\n\ - \\ENQ\EOT\r\STX\STX\SOH\DC2\EOT\139\ACK\t\DLE\n\ + \\ENQ\EOT\r\STX\STX\SOH\DC2\EOT\175\ACK\t\DLE\n\ \\r\n\ - \\ENQ\EOT\r\STX\STX\ETX\DC2\EOT\139\ACK\DC3\DC4\n\ + \\ENQ\EOT\r\STX\STX\ETX\DC2\EOT\175\ACK\DC3\DC4\n\ \\r\n\ - \\ENQ\EOT\r\STX\ETX\ENQ\DC2\EOT\142\ACK\STX\b\n\ + \\ENQ\EOT\r\STX\ETX\ENQ\DC2\EOT\178\ACK\STX\b\n\ \~\n\ - \\EOT\EOT\r\STX\ETX\DC2\EOT\142\ACK\STX\DC4\SUBp (optional) Human-readable string describing the source of this diagnostic, e.g.\n\ + \\EOT\EOT\r\STX\ETX\DC2\EOT\178\ACK\STX\DC4\SUBp (optional) Human-readable string describing the source of this diagnostic, e.g.\n\ \ 'typescript' or 'super lint'.\n\ \\n\ \\r\n\ - \\ENQ\EOT\r\STX\ETX\SOH\DC2\EOT\142\ACK\t\SI\n\ + \\ENQ\EOT\r\STX\ETX\SOH\DC2\EOT\178\ACK\t\SI\n\ \\r\n\ - \\ENQ\EOT\r\STX\ETX\ETX\DC2\EOT\142\ACK\DC2\DC3\n\ + \\ENQ\EOT\r\STX\ETX\ETX\DC2\EOT\178\ACK\DC2\DC3\n\ \\r\n\ - \\ENQ\EOT\r\STX\EOT\EOT\DC2\EOT\143\ACK\STX\n\ + \\ENQ\EOT\r\STX\EOT\EOT\DC2\EOT\179\ACK\STX\n\ \\n\ \\f\n\ - \\EOT\EOT\r\STX\EOT\DC2\EOT\143\ACK\STX\"\n\ + \\EOT\EOT\r\STX\EOT\DC2\EOT\179\ACK\STX\"\n\ \\r\n\ - \\ENQ\EOT\r\STX\EOT\ACK\DC2\EOT\143\ACK\v\CAN\n\ + \\ENQ\EOT\r\STX\EOT\ACK\DC2\EOT\179\ACK\v\CAN\n\ \\r\n\ - \\ENQ\EOT\r\STX\EOT\SOH\DC2\EOT\143\ACK\EM\GS\n\ + \\ENQ\EOT\r\STX\EOT\SOH\DC2\EOT\179\ACK\EM\GS\n\ \\r\n\ - \\ENQ\EOT\r\STX\EOT\ETX\DC2\EOT\143\ACK !\n\ + \\ENQ\EOT\r\STX\EOT\ETX\DC2\EOT\179\ACK !\n\ \\f\n\ - \\STX\ENQ\ENQ\DC2\ACK\146\ACK\NUL\152\ACK\SOH\n\ + \\STX\ENQ\ENQ\DC2\ACK\182\ACK\NUL\188\ACK\SOH\n\ \\v\n\ - \\ETX\ENQ\ENQ\SOH\DC2\EOT\146\ACK\ENQ\r\n\ + \\ETX\ENQ\ENQ\SOH\DC2\EOT\182\ACK\ENQ\r\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\NUL\SOH\DC2\EOT\147\ACK\STX\NAK\n\ + \\ENQ\ENQ\ENQ\STX\NUL\SOH\DC2\EOT\183\ACK\STX\NAK\n\ \\f\n\ - \\EOT\ENQ\ENQ\STX\NUL\DC2\EOT\147\ACK\STX\SUB\n\ + \\EOT\ENQ\ENQ\STX\NUL\DC2\EOT\183\ACK\STX\SUB\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\NUL\STX\DC2\EOT\147\ACK\CAN\EM\n\ + \\ENQ\ENQ\ENQ\STX\NUL\STX\DC2\EOT\183\ACK\CAN\EM\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\SOH\SOH\DC2\EOT\148\ACK\STX\a\n\ + \\ENQ\ENQ\ENQ\STX\SOH\SOH\DC2\EOT\184\ACK\STX\a\n\ \\f\n\ - \\EOT\ENQ\ENQ\STX\SOH\DC2\EOT\148\ACK\STX\f\n\ + \\EOT\ENQ\ENQ\STX\SOH\DC2\EOT\184\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\SOH\STX\DC2\EOT\148\ACK\n\ + \\ENQ\ENQ\ENQ\STX\SOH\STX\DC2\EOT\184\ACK\n\ \\v\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\STX\SOH\DC2\EOT\149\ACK\STX\t\n\ + \\ENQ\ENQ\ENQ\STX\STX\SOH\DC2\EOT\185\ACK\STX\t\n\ \\f\n\ - \\EOT\ENQ\ENQ\STX\STX\DC2\EOT\149\ACK\STX\SO\n\ + \\EOT\ENQ\ENQ\STX\STX\DC2\EOT\185\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\STX\STX\DC2\EOT\149\ACK\f\r\n\ + \\ENQ\ENQ\ENQ\STX\STX\STX\DC2\EOT\185\ACK\f\r\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\ETX\SOH\DC2\EOT\150\ACK\STX\r\n\ + \\ENQ\ENQ\ENQ\STX\ETX\SOH\DC2\EOT\186\ACK\STX\r\n\ \\f\n\ - \\EOT\ENQ\ENQ\STX\ETX\DC2\EOT\150\ACK\STX\DC2\n\ + \\EOT\ENQ\ENQ\STX\ETX\DC2\EOT\186\ACK\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\ETX\STX\DC2\EOT\150\ACK\DLE\DC1\n\ + \\ENQ\ENQ\ENQ\STX\ETX\STX\DC2\EOT\186\ACK\DLE\DC1\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\EOT\SOH\DC2\EOT\151\ACK\STX\ACK\n\ + \\ENQ\ENQ\ENQ\STX\EOT\SOH\DC2\EOT\187\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\ENQ\STX\EOT\DC2\EOT\151\ACK\STX\v\n\ + \\EOT\ENQ\ENQ\STX\EOT\DC2\EOT\187\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\ENQ\STX\EOT\STX\DC2\EOT\151\ACK\t\n\ + \\ENQ\ENQ\ENQ\STX\EOT\STX\DC2\EOT\187\ACK\t\n\ \\n\ \\f\n\ - \\STX\ENQ\ACK\DC2\ACK\154\ACK\NUL\158\ACK\SOH\n\ + \\STX\ENQ\ACK\DC2\ACK\190\ACK\NUL\194\ACK\SOH\n\ \\v\n\ - \\ETX\ENQ\ACK\SOH\DC2\EOT\154\ACK\ENQ\DC2\n\ + \\ETX\ENQ\ACK\SOH\DC2\EOT\190\ACK\ENQ\DC2\n\ \\r\n\ - \\ENQ\ENQ\ACK\STX\NUL\SOH\DC2\EOT\155\ACK\STX\SUB\n\ + \\ENQ\ENQ\ACK\STX\NUL\SOH\DC2\EOT\191\ACK\STX\SUB\n\ \\f\n\ - \\EOT\ENQ\ACK\STX\NUL\DC2\EOT\155\ACK\STX\US\n\ + \\EOT\ENQ\ACK\STX\NUL\DC2\EOT\191\ACK\STX\US\n\ \\r\n\ - \\ENQ\ENQ\ACK\STX\NUL\STX\DC2\EOT\155\ACK\GS\RS\n\ + \\ENQ\ENQ\ACK\STX\NUL\STX\DC2\EOT\191\ACK\GS\RS\n\ \\r\n\ - \\ENQ\ENQ\ACK\STX\SOH\SOH\DC2\EOT\156\ACK\STX\r\n\ + \\ENQ\ENQ\ACK\STX\SOH\SOH\DC2\EOT\192\ACK\STX\r\n\ \\f\n\ - \\EOT\ENQ\ACK\STX\SOH\DC2\EOT\156\ACK\STX\DC2\n\ + \\EOT\ENQ\ACK\STX\SOH\DC2\EOT\192\ACK\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\ACK\STX\SOH\STX\DC2\EOT\156\ACK\DLE\DC1\n\ + \\ENQ\ENQ\ACK\STX\SOH\STX\DC2\EOT\192\ACK\DLE\DC1\n\ \\r\n\ - \\ENQ\ENQ\ACK\STX\STX\SOH\DC2\EOT\157\ACK\STX\f\n\ + \\ENQ\ENQ\ACK\STX\STX\SOH\DC2\EOT\193\ACK\STX\f\n\ \\f\n\ - \\EOT\ENQ\ACK\STX\STX\DC2\EOT\157\ACK\STX\DC1\n\ + \\EOT\ENQ\ACK\STX\STX\DC2\EOT\193\ACK\STX\DC1\n\ \\r\n\ - \\ENQ\ENQ\ACK\STX\STX\STX\DC2\EOT\157\ACK\SI\DLE\n\ + \\ENQ\ENQ\ACK\STX\STX\STX\DC2\EOT\193\ACK\SI\DLE\n\ \\208\ETX\n\ - \\STX\ENQ\a\DC2\ACK\166\ACK\NUL\156\a\SOH\SUB\193\ETX Language standardises names of common programming languages that can be used\n\ + \\STX\ENQ\a\DC2\ACK\202\ACK\NUL\192\a\SOH\SUB\193\ETX Language standardises names of common programming languages that can be used\n\ \ for the `Document.language` field. The primary purpose of this enum is to\n\ \ prevent a situation where we have a single programming language ends up with\n\ \ multiple string representations. For example, the C++ language uses the name\n\ @@ -9687,707 +9723,707 @@ packedFileDescriptor \ Feel free to send a pull-request to add missing programming languages.\n\ \\n\ \\v\n\ - \\ETX\ENQ\a\SOH\DC2\EOT\166\ACK\ENQ\r\n\ + \\ETX\ENQ\a\SOH\DC2\EOT\202\ACK\ENQ\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\NUL\SOH\DC2\EOT\167\ACK\STX\NAK\n\ + \\ENQ\ENQ\a\STX\NUL\SOH\DC2\EOT\203\ACK\STX\NAK\n\ \\f\n\ - \\EOT\ENQ\a\STX\NUL\DC2\EOT\167\ACK\STX\SUB\n\ + \\EOT\ENQ\a\STX\NUL\DC2\EOT\203\ACK\STX\SUB\n\ \\r\n\ - \\ENQ\ENQ\a\STX\NUL\STX\DC2\EOT\167\ACK\CAN\EM\n\ + \\ENQ\ENQ\a\STX\NUL\STX\DC2\EOT\203\ACK\CAN\EM\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SOH\SOH\DC2\EOT\168\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX\SOH\SOH\DC2\EOT\204\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX\SOH\DC2\EOT\168\ACK\STX\f\n\ + \\EOT\ENQ\a\STX\SOH\DC2\EOT\204\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SOH\STX\DC2\EOT\168\ACK\t\v\n\ + \\ENQ\ENQ\a\STX\SOH\STX\DC2\EOT\204\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\STX\SOH\DC2\EOT\169\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX\STX\SOH\DC2\EOT\205\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX\STX\DC2\EOT\169\ACK\STX\f\n\ + \\EOT\ENQ\a\STX\STX\DC2\EOT\205\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX\STX\STX\DC2\EOT\169\ACK\t\v\n\ + \\ENQ\ENQ\a\STX\STX\STX\DC2\EOT\205\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ETX\SOH\DC2\EOT\170\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX\ETX\SOH\DC2\EOT\206\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX\ETX\DC2\EOT\170\ACK\STX\v\n\ + \\EOT\ENQ\a\STX\ETX\DC2\EOT\206\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ETX\STX\DC2\EOT\170\ACK\b\n\ + \\ENQ\ENQ\a\STX\ETX\STX\DC2\EOT\206\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX\EOT\SOH\DC2\EOT\171\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX\EOT\SOH\DC2\EOT\207\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX\EOT\DC2\EOT\171\ACK\STX\v\n\ + \\EOT\ENQ\a\STX\EOT\DC2\EOT\207\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\EOT\STX\DC2\EOT\171\ACK\b\n\ + \\ENQ\ENQ\a\STX\EOT\STX\DC2\EOT\207\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ENQ\SOH\DC2\EOT\172\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX\ENQ\SOH\DC2\EOT\208\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX\ENQ\DC2\EOT\172\ACK\STX\f\n\ + \\EOT\ENQ\a\STX\ENQ\DC2\EOT\208\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ENQ\STX\DC2\EOT\172\ACK\t\v\n\ + \\ENQ\ENQ\a\STX\ENQ\STX\DC2\EOT\208\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ACK\SOH\DC2\EOT\173\ACK\STX\n\ + \\ENQ\ENQ\a\STX\ACK\SOH\DC2\EOT\209\ACK\STX\n\ \\n\ \\f\n\ - \\EOT\ENQ\a\STX\ACK\DC2\EOT\173\ACK\STX\DLE\n\ + \\EOT\ENQ\a\STX\ACK\DC2\EOT\209\ACK\STX\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ACK\STX\DC2\EOT\173\ACK\r\SI\n\ + \\ENQ\ENQ\a\STX\ACK\STX\DC2\EOT\209\ACK\r\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX\a\SOH\DC2\EOT\174\ACK\STX\n\ + \\ENQ\ENQ\a\STX\a\SOH\DC2\EOT\210\ACK\STX\n\ \\n\ \\f\n\ - \\EOT\ENQ\a\STX\a\DC2\EOT\174\ACK\STX\DLE\n\ + \\EOT\ENQ\a\STX\a\DC2\EOT\210\ACK\STX\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STX\a\STX\DC2\EOT\174\ACK\r\SI\n\ + \\ENQ\ENQ\a\STX\a\STX\DC2\EOT\210\ACK\r\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX\b\SOH\DC2\EOT\175\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX\b\SOH\DC2\EOT\211\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX\b\DC2\EOT\175\ACK\STX\v\n\ + \\EOT\ENQ\a\STX\b\DC2\EOT\211\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\b\STX\DC2\EOT\175\ACK\b\n\ + \\ENQ\ENQ\a\STX\b\STX\DC2\EOT\211\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX\t\SOH\DC2\EOT\176\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX\t\SOH\DC2\EOT\212\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX\t\DC2\EOT\176\ACK\STX\v\n\ + \\EOT\ENQ\a\STX\t\DC2\EOT\212\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\t\STX\DC2\EOT\176\ACK\b\n\ + \\ENQ\ENQ\a\STX\t\STX\DC2\EOT\212\ACK\b\n\ \\n\ \\r\n\ \\ENQ\ENQ\a\STX\n\ - \\SOH\DC2\EOT\177\ACK\STX\b\n\ + \\SOH\DC2\EOT\213\ACK\STX\b\n\ \\f\n\ \\EOT\ENQ\a\STX\n\ - \\DC2\EOT\177\ACK\STX\SO\n\ + \\DC2\EOT\213\ACK\STX\SO\n\ \\r\n\ \\ENQ\ENQ\a\STX\n\ - \\STX\DC2\EOT\177\ACK\v\r\n\ + \\STX\DC2\EOT\213\ACK\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\v\SOH\DC2\EOT\178\ACK\STX\ETX\n\ + \\ENQ\ENQ\a\STX\v\SOH\DC2\EOT\214\ACK\STX\ETX\n\ \\f\n\ - \\EOT\ENQ\a\STX\v\DC2\EOT\178\ACK\STX\t\n\ + \\EOT\ENQ\a\STX\v\DC2\EOT\214\ACK\STX\t\n\ \\r\n\ - \\ENQ\ENQ\a\STX\v\STX\DC2\EOT\178\ACK\ACK\b\n\ + \\ENQ\ENQ\a\STX\v\STX\DC2\EOT\214\ACK\ACK\b\n\ \\r\n\ - \\ENQ\ENQ\a\STX\f\SOH\DC2\EOT\179\ACK\STX\a\n\ + \\ENQ\ENQ\a\STX\f\SOH\DC2\EOT\215\ACK\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STX\f\DC2\EOT\179\ACK\STX\r\n\ + \\EOT\ENQ\a\STX\f\DC2\EOT\215\ACK\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\f\STX\DC2\EOT\179\ACK\n\ + \\ENQ\ENQ\a\STX\f\STX\DC2\EOT\215\ACK\n\ \\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX\r\SOH\DC2\EOT\180\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX\r\SOH\DC2\EOT\216\ACK\STX\ENQ\n\ \G\n\ - \\EOT\ENQ\a\STX\r\DC2\EOT\180\ACK\STX\v\"9 C++ (the name \"CPP\" was chosen for consistency with LSP)\n\ + \\EOT\ENQ\a\STX\r\DC2\EOT\216\ACK\STX\v\"9 C++ (the name \"CPP\" was chosen for consistency with LSP)\n\ \\r\n\ - \\ENQ\ENQ\a\STX\r\STX\DC2\EOT\180\ACK\b\n\ + \\ENQ\ENQ\a\STX\r\STX\DC2\EOT\216\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SO\SOH\DC2\EOT\181\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX\SO\SOH\DC2\EOT\217\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX\SO\DC2\EOT\181\ACK\STX\v\n\ + \\EOT\ENQ\a\STX\SO\DC2\EOT\217\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SO\STX\DC2\EOT\181\ACK\b\n\ + \\ENQ\ENQ\a\STX\SO\STX\DC2\EOT\217\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SI\SOH\DC2\EOT\182\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX\SI\SOH\DC2\EOT\218\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX\SI\DC2\EOT\182\ACK\STX\r\n\ + \\EOT\ENQ\a\STX\SI\DC2\EOT\218\ACK\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SI\STX\DC2\EOT\182\ACK\v\f\n\ + \\ENQ\ENQ\a\STX\SI\STX\DC2\EOT\218\ACK\v\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DLE\SOH\DC2\EOT\183\ACK\STX\t\n\ + \\ENQ\ENQ\a\STX\DLE\SOH\DC2\EOT\219\ACK\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STX\DLE\DC2\EOT\183\ACK\STX\SO\n\ + \\EOT\ENQ\a\STX\DLE\DC2\EOT\219\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DLE\STX\DC2\EOT\183\ACK\f\r\n\ + \\ENQ\ENQ\a\STX\DLE\STX\DC2\EOT\219\ACK\f\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DC1\SOH\DC2\EOT\184\ACK\STX\SO\n\ + \\ENQ\ENQ\a\STX\DC1\SOH\DC2\EOT\220\ACK\STX\SO\n\ \\f\n\ - \\EOT\ENQ\a\STX\DC1\DC2\EOT\184\ACK\STX\DC4\n\ + \\EOT\ENQ\a\STX\DC1\DC2\EOT\220\ACK\STX\DC4\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DC1\STX\DC2\EOT\184\ACK\DC1\DC3\n\ + \\ENQ\ENQ\a\STX\DC1\STX\DC2\EOT\220\ACK\DC1\DC3\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DC2\SOH\DC2\EOT\185\ACK\STX\f\n\ + \\ENQ\ENQ\a\STX\DC2\SOH\DC2\EOT\221\ACK\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STX\DC2\DC2\EOT\185\ACK\STX\DC1\n\ + \\EOT\ENQ\a\STX\DC2\DC2\EOT\221\ACK\STX\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DC2\STX\DC2\EOT\185\ACK\SI\DLE\n\ + \\ENQ\ENQ\a\STX\DC2\STX\DC2\EOT\221\ACK\SI\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DC3\SOH\DC2\EOT\186\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX\DC3\SOH\DC2\EOT\222\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX\DC3\DC2\EOT\186\ACK\STX\v\n\ + \\EOT\ENQ\a\STX\DC3\DC2\EOT\222\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DC3\STX\DC2\EOT\186\ACK\b\n\ + \\ENQ\ENQ\a\STX\DC3\STX\DC2\EOT\222\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DC4\SOH\DC2\EOT\187\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX\DC4\SOH\DC2\EOT\223\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX\DC4\DC2\EOT\187\ACK\STX\f\n\ + \\EOT\ENQ\a\STX\DC4\DC2\EOT\223\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX\DC4\STX\DC2\EOT\187\ACK\t\v\n\ + \\ENQ\ENQ\a\STX\DC4\STX\DC2\EOT\223\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\NAK\SOH\DC2\EOT\188\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX\NAK\SOH\DC2\EOT\224\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX\NAK\DC2\EOT\188\ACK\STX\v\n\ + \\EOT\ENQ\a\STX\NAK\DC2\EOT\224\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\NAK\STX\DC2\EOT\188\ACK\t\n\ + \\ENQ\ENQ\a\STX\NAK\STX\DC2\EOT\224\ACK\t\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SYN\SOH\DC2\EOT\189\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX\SYN\SOH\DC2\EOT\225\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX\SYN\DC2\EOT\189\ACK\STX\SO\n\ + \\EOT\ENQ\a\STX\SYN\DC2\EOT\225\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SYN\STX\DC2\EOT\189\ACK\v\r\n\ + \\ENQ\ENQ\a\STX\SYN\STX\DC2\EOT\225\ACK\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ETB\SOH\DC2\EOT\190\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX\ETB\SOH\DC2\EOT\226\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX\ETB\DC2\EOT\190\ACK\STX\f\n\ + \\EOT\ENQ\a\STX\ETB\DC2\EOT\226\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ETB\STX\DC2\EOT\190\ACK\t\v\n\ + \\ENQ\ENQ\a\STX\ETB\STX\DC2\EOT\226\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\CAN\SOH\DC2\EOT\191\ACK\STX\f\n\ + \\ENQ\ENQ\a\STX\CAN\SOH\DC2\EOT\227\ACK\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STX\CAN\DC2\EOT\191\ACK\STX\DC2\n\ + \\EOT\ENQ\a\STX\CAN\DC2\EOT\227\ACK\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STX\CAN\STX\DC2\EOT\191\ACK\SI\DC1\n\ + \\ENQ\ENQ\a\STX\CAN\STX\DC2\EOT\227\ACK\SI\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STX\EM\SOH\DC2\EOT\192\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX\EM\SOH\DC2\EOT\228\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX\EM\DC2\EOT\192\ACK\STX\SO\n\ + \\EOT\ENQ\a\STX\EM\DC2\EOT\228\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX\EM\STX\DC2\EOT\192\ACK\v\r\n\ + \\ENQ\ENQ\a\STX\EM\STX\DC2\EOT\228\ACK\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SUB\SOH\DC2\EOT\193\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX\SUB\SOH\DC2\EOT\229\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX\SUB\DC2\EOT\193\ACK\STX\SO\n\ + \\EOT\ENQ\a\STX\SUB\DC2\EOT\229\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX\SUB\STX\DC2\EOT\193\ACK\v\r\n\ + \\ENQ\ENQ\a\STX\SUB\STX\DC2\EOT\229\ACK\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ESC\SOH\DC2\EOT\194\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX\ESC\SOH\DC2\EOT\230\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX\ESC\DC2\EOT\194\ACK\STX\SO\n\ + \\EOT\ENQ\a\STX\ESC\DC2\EOT\230\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX\ESC\STX\DC2\EOT\194\ACK\v\r\n\ + \\ENQ\ENQ\a\STX\ESC\STX\DC2\EOT\230\ACK\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\FS\SOH\DC2\EOT\195\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX\FS\SOH\DC2\EOT\231\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX\FS\DC2\EOT\195\ACK\STX\SO\n\ + \\EOT\ENQ\a\STX\FS\DC2\EOT\231\ACK\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX\FS\STX\DC2\EOT\195\ACK\v\r\n\ + \\ENQ\ENQ\a\STX\FS\STX\DC2\EOT\231\ACK\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\GS\SOH\DC2\EOT\196\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX\GS\SOH\DC2\EOT\232\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX\GS\DC2\EOT\196\ACK\STX\f\n\ + \\EOT\ENQ\a\STX\GS\DC2\EOT\232\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX\GS\STX\DC2\EOT\196\ACK\t\v\n\ + \\ENQ\ENQ\a\STX\GS\STX\DC2\EOT\232\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\RS\SOH\DC2\EOT\197\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX\RS\SOH\DC2\EOT\233\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX\RS\DC2\EOT\197\ACK\STX\f\n\ + \\EOT\ENQ\a\STX\RS\DC2\EOT\233\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX\RS\STX\DC2\EOT\197\ACK\t\v\n\ + \\ENQ\ENQ\a\STX\RS\STX\DC2\EOT\233\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX\US\SOH\DC2\EOT\198\ACK\STX\t\n\ + \\ENQ\ENQ\a\STX\US\SOH\DC2\EOT\234\ACK\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STX\US\DC2\EOT\198\ACK\STX\SI\n\ + \\EOT\ENQ\a\STX\US\DC2\EOT\234\ACK\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX\US\STX\DC2\EOT\198\ACK\f\SO\n\ + \\ENQ\ENQ\a\STX\US\STX\DC2\EOT\234\ACK\f\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX \SOH\DC2\EOT\199\ACK\STX\f\n\ + \\ENQ\ENQ\a\STX \SOH\DC2\EOT\235\ACK\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STX \DC2\EOT\199\ACK\STX\DC2\n\ + \\EOT\ENQ\a\STX \DC2\EOT\235\ACK\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STX \STX\DC2\EOT\199\ACK\SI\DC1\n\ + \\ENQ\ENQ\a\STX \STX\DC2\EOT\235\ACK\SI\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STX!\SOH\DC2\EOT\200\ACK\STX\f\n\ + \\ENQ\ENQ\a\STX!\SOH\DC2\EOT\236\ACK\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STX!\DC2\EOT\200\ACK\STX\DC2\n\ + \\EOT\ENQ\a\STX!\DC2\EOT\236\ACK\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STX!\STX\DC2\EOT\200\ACK\SI\DC1\n\ + \\ENQ\ENQ\a\STX!\STX\DC2\EOT\236\ACK\SI\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STX\"\SOH\DC2\EOT\201\ACK\STX\f\n\ + \\ENQ\ENQ\a\STX\"\SOH\DC2\EOT\237\ACK\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STX\"\DC2\EOT\201\ACK\STX\DC2\n\ + \\EOT\ENQ\a\STX\"\DC2\EOT\237\ACK\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STX\"\STX\DC2\EOT\201\ACK\SI\DC1\n\ + \\ENQ\ENQ\a\STX\"\STX\DC2\EOT\237\ACK\SI\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STX#\SOH\DC2\EOT\202\ACK\STX\EOT\n\ + \\ENQ\ENQ\a\STX#\SOH\DC2\EOT\238\ACK\STX\EOT\n\ \\f\n\ - \\EOT\ENQ\a\STX#\DC2\EOT\202\ACK\STX\n\ + \\EOT\ENQ\a\STX#\DC2\EOT\238\ACK\STX\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX#\STX\DC2\EOT\202\ACK\a\t\n\ + \\ENQ\ENQ\a\STX#\STX\DC2\EOT\238\ACK\a\t\n\ \\r\n\ - \\ENQ\ENQ\a\STX$\SOH\DC2\EOT\203\ACK\STX\t\n\ + \\ENQ\ENQ\a\STX$\SOH\DC2\EOT\239\ACK\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STX$\DC2\EOT\203\ACK\STX\SI\n\ + \\EOT\ENQ\a\STX$\DC2\EOT\239\ACK\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX$\STX\DC2\EOT\203\ACK\f\SO\n\ + \\ENQ\ENQ\a\STX$\STX\DC2\EOT\239\ACK\f\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX%\SOH\DC2\EOT\204\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX%\SOH\DC2\EOT\240\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX%\DC2\EOT\204\ACK\STX\r\n\ + \\EOT\ENQ\a\STX%\DC2\EOT\240\ACK\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX%\STX\DC2\EOT\204\ACK\v\f\n\ + \\ENQ\ENQ\a\STX%\STX\DC2\EOT\240\ACK\v\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX&\SOH\DC2\EOT\205\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX&\SOH\DC2\EOT\241\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX&\DC2\EOT\205\ACK\STX\f\n\ + \\EOT\ENQ\a\STX&\DC2\EOT\241\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX&\STX\DC2\EOT\205\ACK\t\v\n\ + \\ENQ\ENQ\a\STX&\STX\DC2\EOT\241\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX'\SOH\DC2\EOT\206\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX'\SOH\DC2\EOT\242\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX'\DC2\EOT\206\ACK\STX\f\n\ + \\EOT\ENQ\a\STX'\DC2\EOT\242\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX'\STX\DC2\EOT\206\ACK\t\v\n\ + \\ENQ\ENQ\a\STX'\STX\DC2\EOT\242\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX(\SOH\DC2\EOT\207\ACK\STX\f\n\ + \\ENQ\ENQ\a\STX(\SOH\DC2\EOT\243\ACK\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STX(\DC2\EOT\207\ACK\STX\DC2\n\ + \\EOT\ENQ\a\STX(\DC2\EOT\243\ACK\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STX(\STX\DC2\EOT\207\ACK\SI\DC1\n\ + \\ENQ\ENQ\a\STX(\STX\DC2\EOT\243\ACK\SI\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STX)\SOH\DC2\EOT\208\ACK\STX\t\n\ + \\ENQ\ENQ\a\STX)\SOH\DC2\EOT\244\ACK\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STX)\DC2\EOT\208\ACK\STX\SI\n\ + \\EOT\ENQ\a\STX)\DC2\EOT\244\ACK\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX)\STX\DC2\EOT\208\ACK\f\SO\n\ + \\ENQ\ENQ\a\STX)\STX\DC2\EOT\244\ACK\f\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX*\SOH\DC2\EOT\209\ACK\STX\a\n\ + \\ENQ\ENQ\a\STX*\SOH\DC2\EOT\245\ACK\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STX*\DC2\EOT\209\ACK\STX\r\n\ + \\EOT\ENQ\a\STX*\DC2\EOT\245\ACK\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX*\STX\DC2\EOT\209\ACK\n\ + \\ENQ\ENQ\a\STX*\STX\DC2\EOT\245\ACK\n\ \\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX+\SOH\DC2\EOT\210\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX+\SOH\DC2\EOT\246\ACK\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX+\DC2\EOT\210\ACK\STX\v\n\ + \\EOT\ENQ\a\STX+\DC2\EOT\246\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX+\STX\DC2\EOT\210\ACK\b\n\ + \\ENQ\ENQ\a\STX+\STX\DC2\EOT\246\ACK\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX,\SOH\DC2\EOT\211\ACK\STX\ETX\n\ + \\ENQ\ENQ\a\STX,\SOH\DC2\EOT\247\ACK\STX\ETX\n\ \\f\n\ - \\EOT\ENQ\a\STX,\DC2\EOT\211\ACK\STX\t\n\ + \\EOT\ENQ\a\STX,\DC2\EOT\247\ACK\STX\t\n\ \\r\n\ - \\ENQ\ENQ\a\STX,\STX\DC2\EOT\211\ACK\ACK\b\n\ + \\ENQ\ENQ\a\STX,\STX\DC2\EOT\247\ACK\ACK\b\n\ \\r\n\ - \\ENQ\ENQ\a\STX-\SOH\DC2\EOT\212\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX-\SOH\DC2\EOT\248\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX-\DC2\EOT\212\ACK\STX\f\n\ + \\EOT\ENQ\a\STX-\DC2\EOT\248\ACK\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX-\STX\DC2\EOT\212\ACK\t\v\n\ + \\ENQ\ENQ\a\STX-\STX\DC2\EOT\248\ACK\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX.\SOH\DC2\EOT\213\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX.\SOH\DC2\EOT\249\ACK\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX.\DC2\EOT\213\ACK\STX\v\n\ + \\EOT\ENQ\a\STX.\DC2\EOT\249\ACK\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX.\STX\DC2\EOT\213\ACK\t\n\ + \\ENQ\ENQ\a\STX.\STX\DC2\EOT\249\ACK\t\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX/\SOH\DC2\EOT\214\ACK\STX\f\n\ + \\ENQ\ENQ\a\STX/\SOH\DC2\EOT\250\ACK\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STX/\DC2\EOT\214\ACK\STX\DC2\n\ + \\EOT\ENQ\a\STX/\DC2\EOT\250\ACK\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STX/\STX\DC2\EOT\214\ACK\SI\DC1\n\ + \\ENQ\ENQ\a\STX/\STX\DC2\EOT\250\ACK\SI\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STX0\SOH\DC2\EOT\215\ACK\STX\DC1\n\ + \\ENQ\ENQ\a\STX0\SOH\DC2\EOT\251\ACK\STX\DC1\n\ \\f\n\ - \\EOT\ENQ\a\STX0\DC2\EOT\215\ACK\STX\ETB\n\ + \\EOT\ENQ\a\STX0\DC2\EOT\251\ACK\STX\ETB\n\ \\r\n\ - \\ENQ\ENQ\a\STX0\STX\DC2\EOT\215\ACK\DC4\SYN\n\ + \\ENQ\ENQ\a\STX0\STX\DC2\EOT\251\ACK\DC4\SYN\n\ \\r\n\ - \\ENQ\ENQ\a\STX1\SOH\DC2\EOT\216\ACK\STX\t\n\ + \\ENQ\ENQ\a\STX1\SOH\DC2\EOT\252\ACK\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STX1\DC2\EOT\216\ACK\STX\SI\n\ + \\EOT\ENQ\a\STX1\DC2\EOT\252\ACK\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX1\STX\DC2\EOT\216\ACK\f\SO\n\ + \\ENQ\ENQ\a\STX1\STX\DC2\EOT\252\ACK\f\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX2\SOH\DC2\EOT\217\ACK\STX\a\n\ + \\ENQ\ENQ\a\STX2\SOH\DC2\EOT\253\ACK\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STX2\DC2\EOT\217\ACK\STX\r\n\ + \\EOT\ENQ\a\STX2\DC2\EOT\253\ACK\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX2\STX\DC2\EOT\217\ACK\n\ + \\ENQ\ENQ\a\STX2\STX\DC2\EOT\253\ACK\n\ \\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX3\SOH\DC2\EOT\218\ACK\STX\n\ + \\ENQ\ENQ\a\STX3\SOH\DC2\EOT\254\ACK\STX\n\ \\n\ \\f\n\ - \\EOT\ENQ\a\STX3\DC2\EOT\218\ACK\STX\DC1\n\ + \\EOT\ENQ\a\STX3\DC2\EOT\254\ACK\STX\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STX3\STX\DC2\EOT\218\ACK\r\DLE\n\ + \\ENQ\ENQ\a\STX3\STX\DC2\EOT\254\ACK\r\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STX4\SOH\DC2\EOT\219\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX4\SOH\DC2\EOT\255\ACK\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX4\DC2\EOT\219\ACK\STX\r\n\ + \\EOT\ENQ\a\STX4\DC2\EOT\255\ACK\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX4\STX\DC2\EOT\219\ACK\v\f\n\ + \\ENQ\ENQ\a\STX4\STX\DC2\EOT\255\ACK\v\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX5\SOH\DC2\EOT\220\ACK\STX\a\n\ + \\ENQ\ENQ\a\STX5\SOH\DC2\EOT\128\a\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STX5\DC2\EOT\220\ACK\STX\r\n\ + \\EOT\ENQ\a\STX5\DC2\EOT\128\a\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX5\STX\DC2\EOT\220\ACK\n\ + \\ENQ\ENQ\a\STX5\STX\DC2\EOT\128\a\n\ \\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX6\SOH\DC2\EOT\221\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX6\SOH\DC2\EOT\129\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX6\DC2\EOT\221\ACK\STX\f\n\ + \\EOT\ENQ\a\STX6\DC2\EOT\129\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX6\STX\DC2\EOT\221\ACK\t\v\n\ + \\ENQ\ENQ\a\STX6\STX\DC2\EOT\129\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX7\SOH\DC2\EOT\222\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX7\SOH\DC2\EOT\130\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX7\DC2\EOT\222\ACK\STX\f\n\ + \\EOT\ENQ\a\STX7\DC2\EOT\130\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX7\STX\DC2\EOT\222\ACK\t\v\n\ + \\ENQ\ENQ\a\STX7\STX\DC2\EOT\130\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX8\SOH\DC2\EOT\223\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX8\SOH\DC2\EOT\131\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX8\DC2\EOT\223\ACK\STX\v\n\ + \\EOT\ENQ\a\STX8\DC2\EOT\131\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX8\STX\DC2\EOT\223\ACK\b\n\ + \\ENQ\ENQ\a\STX8\STX\DC2\EOT\131\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX9\SOH\DC2\EOT\224\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STX9\SOH\DC2\EOT\132\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX9\DC2\EOT\224\ACK\STX\r\n\ + \\EOT\ENQ\a\STX9\DC2\EOT\132\a\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX9\STX\DC2\EOT\224\ACK\t\f\n\ + \\ENQ\ENQ\a\STX9\STX\DC2\EOT\132\a\t\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX:\SOH\DC2\EOT\225\ACK\STX\n\ + \\ENQ\ENQ\a\STX:\SOH\DC2\EOT\133\a\STX\n\ \\n\ \\f\n\ - \\EOT\ENQ\a\STX:\DC2\EOT\225\ACK\STX\DLE\n\ + \\EOT\ENQ\a\STX:\DC2\EOT\133\a\STX\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STX:\STX\DC2\EOT\225\ACK\r\SI\n\ + \\ENQ\ENQ\a\STX:\STX\DC2\EOT\133\a\r\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX;\SOH\DC2\EOT\226\ACK\STX\n\ + \\ENQ\ENQ\a\STX;\SOH\DC2\EOT\134\a\STX\n\ \\n\ \\f\n\ - \\EOT\ENQ\a\STX;\DC2\EOT\226\ACK\STX\DLE\n\ + \\EOT\ENQ\a\STX;\DC2\EOT\134\a\STX\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STX;\STX\DC2\EOT\226\ACK\r\SI\n\ + \\ENQ\ENQ\a\STX;\STX\DC2\EOT\134\a\r\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX<\SOH\DC2\EOT\227\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX<\SOH\DC2\EOT\135\a\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX<\DC2\EOT\227\ACK\STX\SO\n\ + \\EOT\ENQ\a\STX<\DC2\EOT\135\a\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX<\STX\DC2\EOT\227\ACK\v\r\n\ + \\ENQ\ENQ\a\STX<\STX\DC2\EOT\135\a\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX=\SOH\DC2\EOT\228\ACK\STX\b\n\ + \\ENQ\ENQ\a\STX=\SOH\DC2\EOT\136\a\STX\b\n\ \'\n\ - \\EOT\ENQ\a\STX=\DC2\EOT\228\ACK\STX\SI\"\EM https://nickel-lang.org/\n\ + \\EOT\ENQ\a\STX=\DC2\EOT\136\a\STX\SI\"\EM https://nickel-lang.org/\n\ \\r\n\ - \\ENQ\ENQ\a\STX=\STX\DC2\EOT\228\ACK\v\SO\n\ + \\ENQ\ENQ\a\STX=\STX\DC2\EOT\136\a\v\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX>\SOH\DC2\EOT\229\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STX>\SOH\DC2\EOT\137\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX>\DC2\EOT\229\ACK\STX\v\n\ + \\EOT\ENQ\a\STX>\DC2\EOT\137\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX>\STX\DC2\EOT\229\ACK\b\n\ + \\ENQ\ENQ\a\STX>\STX\DC2\EOT\137\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STX?\SOH\DC2\EOT\230\ACK\STX\a\n\ + \\ENQ\ENQ\a\STX?\SOH\DC2\EOT\138\a\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STX?\DC2\EOT\230\ACK\STX\r\n\ + \\EOT\ENQ\a\STX?\DC2\EOT\138\a\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX?\STX\DC2\EOT\230\ACK\n\ + \\ENQ\ENQ\a\STX?\STX\DC2\EOT\138\a\n\ \\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX@\SOH\DC2\EOT\231\ACK\STX\r\n\ + \\ENQ\ENQ\a\STX@\SOH\DC2\EOT\139\a\STX\r\n\ \\f\n\ - \\EOT\ENQ\a\STX@\DC2\EOT\231\ACK\STX\DC3\n\ + \\EOT\ENQ\a\STX@\DC2\EOT\139\a\STX\DC3\n\ \\r\n\ - \\ENQ\ENQ\a\STX@\STX\DC2\EOT\231\ACK\DLE\DC2\n\ + \\ENQ\ENQ\a\STX@\STX\DC2\EOT\139\a\DLE\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STXA\SOH\DC2\EOT\232\ACK\STX\SI\n\ + \\ENQ\ENQ\a\STXA\SOH\DC2\EOT\140\a\STX\SI\n\ \\f\n\ - \\EOT\ENQ\a\STXA\DC2\EOT\232\ACK\STX\NAK\n\ + \\EOT\ENQ\a\STXA\DC2\EOT\140\a\STX\NAK\n\ \\r\n\ - \\ENQ\ENQ\a\STXA\STX\DC2\EOT\232\ACK\DC2\DC4\n\ + \\ENQ\ENQ\a\STXA\STX\DC2\EOT\140\a\DC2\DC4\n\ \\r\n\ - \\ENQ\ENQ\a\STXB\SOH\DC2\EOT\233\ACK\STX\b\n\ + \\ENQ\ENQ\a\STXB\SOH\DC2\EOT\141\a\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STXB\DC2\EOT\233\ACK\STX\SO\n\ + \\EOT\ENQ\a\STXB\DC2\EOT\141\a\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXB\STX\DC2\EOT\233\ACK\v\r\n\ + \\ENQ\ENQ\a\STXB\STX\DC2\EOT\141\a\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXC\SOH\DC2\EOT\234\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STXC\SOH\DC2\EOT\142\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXC\DC2\EOT\234\ACK\STX\v\n\ + \\EOT\ENQ\a\STXC\DC2\EOT\142\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXC\STX\DC2\EOT\234\ACK\b\n\ + \\ENQ\ENQ\a\STXC\STX\DC2\EOT\142\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXD\SOH\DC2\EOT\235\ACK\STX\a\n\ + \\ENQ\ENQ\a\STXD\SOH\DC2\EOT\143\a\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STXD\DC2\EOT\235\ACK\STX\r\n\ + \\EOT\ENQ\a\STXD\DC2\EOT\143\a\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXD\STX\DC2\EOT\235\ACK\n\ + \\ENQ\ENQ\a\STXD\STX\DC2\EOT\143\a\n\ \\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXE\SOH\DC2\EOT\236\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STXE\SOH\DC2\EOT\144\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXE\DC2\EOT\236\ACK\STX\f\n\ + \\EOT\ENQ\a\STXE\DC2\EOT\144\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXE\STX\DC2\EOT\236\ACK\t\v\n\ + \\ENQ\ENQ\a\STXE\STX\DC2\EOT\144\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXF\SOH\DC2\EOT\237\ACK\STX\f\n\ + \\ENQ\ENQ\a\STXF\SOH\DC2\EOT\145\a\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STXF\DC2\EOT\237\ACK\STX\DC2\n\ + \\EOT\ENQ\a\STXF\DC2\EOT\145\a\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STXF\STX\DC2\EOT\237\ACK\SI\DC1\n\ + \\ENQ\ENQ\a\STXF\STX\DC2\EOT\145\a\SI\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STXG\SOH\DC2\EOT\238\ACK\STX\b\n\ + \\ENQ\ENQ\a\STXG\SOH\DC2\EOT\146\a\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STXG\DC2\EOT\238\ACK\STX\SO\n\ + \\EOT\ENQ\a\STXG\DC2\EOT\146\a\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXG\STX\DC2\EOT\238\ACK\v\r\n\ + \\ENQ\ENQ\a\STXG\STX\DC2\EOT\146\a\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXH\SOH\DC2\EOT\239\ACK\STX\n\ + \\ENQ\ENQ\a\STXH\SOH\DC2\EOT\147\a\STX\n\ \\n\ \\f\n\ - \\EOT\ENQ\a\STXH\DC2\EOT\239\ACK\STX\DC1\n\ + \\EOT\ENQ\a\STXH\DC2\EOT\147\a\STX\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STXH\STX\DC2\EOT\239\ACK\r\DLE\n\ + \\ENQ\ENQ\a\STXH\STX\DC2\EOT\147\a\r\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STXI\SOH\DC2\EOT\240\ACK\STX\b\n\ + \\ENQ\ENQ\a\STXI\SOH\DC2\EOT\148\a\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STXI\DC2\EOT\240\ACK\STX\SO\n\ + \\EOT\ENQ\a\STXI\DC2\EOT\148\a\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXI\STX\DC2\EOT\240\ACK\v\r\n\ + \\ENQ\ENQ\a\STXI\STX\DC2\EOT\148\a\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXJ\SOH\DC2\EOT\241\ACK\STX\ETX\n\ + \\ENQ\ENQ\a\STXJ\SOH\DC2\EOT\149\a\STX\ETX\n\ \\f\n\ - \\EOT\ENQ\a\STXJ\DC2\EOT\241\ACK\STX\t\n\ + \\EOT\ENQ\a\STXJ\DC2\EOT\149\a\STX\t\n\ \\r\n\ - \\ENQ\ENQ\a\STXJ\STX\DC2\EOT\241\ACK\ACK\b\n\ + \\ENQ\ENQ\a\STXJ\STX\DC2\EOT\149\a\ACK\b\n\ \\r\n\ - \\ENQ\ENQ\a\STXK\SOH\DC2\EOT\242\ACK\STX\b\n\ + \\ENQ\ENQ\a\STXK\SOH\DC2\EOT\150\a\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STXK\DC2\EOT\242\ACK\STX\SO\n\ + \\EOT\ENQ\a\STXK\DC2\EOT\150\a\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXK\STX\DC2\EOT\242\ACK\v\r\n\ + \\ENQ\ENQ\a\STXK\STX\DC2\EOT\150\a\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXL\SOH\DC2\EOT\243\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STXL\SOH\DC2\EOT\151\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXL\DC2\EOT\243\ACK\STX\f\n\ + \\EOT\ENQ\a\STXL\DC2\EOT\151\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXL\STX\DC2\EOT\243\ACK\t\v\n\ + \\ENQ\ENQ\a\STXL\STX\DC2\EOT\151\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXM\SOH\DC2\EOT\244\ACK\STX\a\n\ + \\ENQ\ENQ\a\STXM\SOH\DC2\EOT\152\a\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STXM\DC2\EOT\244\ACK\STX\r\n\ + \\EOT\ENQ\a\STXM\DC2\EOT\152\a\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXM\STX\DC2\EOT\244\ACK\n\ + \\ENQ\ENQ\a\STXM\STX\DC2\EOT\152\a\n\ \\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXN\SOH\DC2\EOT\245\ACK\STX\a\n\ + \\ENQ\ENQ\a\STXN\SOH\DC2\EOT\153\a\STX\a\n\ \1\n\ - \\EOT\ENQ\a\STXN\DC2\EOT\245\ACK\STX\SO\"# Internal language for testing SCIP\n\ + \\EOT\ENQ\a\STXN\DC2\EOT\153\a\STX\SO\"# Internal language for testing SCIP\n\ \\r\n\ - \\ENQ\ENQ\a\STXN\STX\DC2\EOT\245\ACK\n\ + \\ENQ\ENQ\a\STXN\STX\DC2\EOT\153\a\n\ \\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXO\SOH\DC2\EOT\246\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STXO\SOH\DC2\EOT\154\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXO\DC2\EOT\246\ACK\STX\f\n\ + \\EOT\ENQ\a\STXO\DC2\EOT\154\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXO\STX\DC2\EOT\246\ACK\t\v\n\ + \\ENQ\ENQ\a\STXO\STX\DC2\EOT\154\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXP\SOH\DC2\EOT\247\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STXP\SOH\DC2\EOT\155\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXP\DC2\EOT\247\ACK\STX\f\n\ + \\EOT\ENQ\a\STXP\DC2\EOT\155\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXP\STX\DC2\EOT\247\ACK\t\v\n\ + \\ENQ\ENQ\a\STXP\STX\DC2\EOT\155\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXQ\SOH\DC2\EOT\248\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STXQ\SOH\DC2\EOT\156\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXQ\DC2\EOT\248\ACK\STX\f\n\ + \\EOT\ENQ\a\STXQ\DC2\EOT\156\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXQ\STX\DC2\EOT\248\ACK\t\v\n\ + \\ENQ\ENQ\a\STXQ\STX\DC2\EOT\156\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXR\SOH\DC2\EOT\249\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STXR\SOH\DC2\EOT\157\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXR\DC2\EOT\249\ACK\STX\v\n\ + \\EOT\ENQ\a\STXR\DC2\EOT\157\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXR\STX\DC2\EOT\249\ACK\b\n\ + \\ENQ\ENQ\a\STXR\STX\DC2\EOT\157\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXS\SOH\DC2\EOT\250\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STXS\SOH\DC2\EOT\158\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXS\DC2\EOT\250\ACK\STX\f\n\ + \\EOT\ENQ\a\STXS\DC2\EOT\158\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXS\STX\DC2\EOT\250\ACK\t\v\n\ + \\ENQ\ENQ\a\STXS\STX\DC2\EOT\158\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXT\SOH\DC2\EOT\251\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STXT\SOH\DC2\EOT\159\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXT\DC2\EOT\251\ACK\STX\v\n\ + \\EOT\ENQ\a\STXT\DC2\EOT\159\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXT\STX\DC2\EOT\251\ACK\b\n\ + \\ENQ\ENQ\a\STXT\STX\DC2\EOT\159\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXU\SOH\DC2\EOT\252\ACK\STX\ENQ\n\ + \\ENQ\ENQ\a\STXU\SOH\DC2\EOT\160\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXU\DC2\EOT\252\ACK\STX\v\n\ + \\EOT\ENQ\a\STXU\DC2\EOT\160\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXU\STX\DC2\EOT\252\ACK\b\n\ + \\ENQ\ENQ\a\STXU\STX\DC2\EOT\160\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXV\SOH\DC2\EOT\253\ACK\STX\ACK\n\ + \\ENQ\ENQ\a\STXV\SOH\DC2\EOT\161\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXV\DC2\EOT\253\ACK\STX\f\n\ + \\EOT\ENQ\a\STXV\DC2\EOT\161\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXV\STX\DC2\EOT\253\ACK\t\v\n\ + \\ENQ\ENQ\a\STXV\STX\DC2\EOT\161\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXW\SOH\DC2\EOT\254\ACK\STX\a\n\ + \\ENQ\ENQ\a\STXW\SOH\DC2\EOT\162\a\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STXW\DC2\EOT\254\ACK\STX\f\n\ + \\EOT\ENQ\a\STXW\DC2\EOT\162\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXW\STX\DC2\EOT\254\ACK\n\ + \\ENQ\ENQ\a\STXW\STX\DC2\EOT\162\a\n\ \\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXX\SOH\DC2\EOT\255\ACK\STX\b\n\ + \\ENQ\ENQ\a\STXX\SOH\DC2\EOT\163\a\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STXX\DC2\EOT\255\ACK\STX\SO\n\ + \\EOT\ENQ\a\STXX\DC2\EOT\163\a\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXX\STX\DC2\EOT\255\ACK\v\r\n\ + \\ENQ\ENQ\a\STXX\STX\DC2\EOT\163\a\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXY\SOH\DC2\EOT\128\a\STX\r\n\ + \\ENQ\ENQ\a\STXY\SOH\DC2\EOT\164\a\STX\r\n\ \\DC3\n\ - \\EOT\ENQ\a\STXY\DC2\EOT\128\a\STX\DC3\"\ENQ Bash\n\ + \\EOT\ENQ\a\STXY\DC2\EOT\164\a\STX\DC3\"\ENQ Bash\n\ \\r\n\ - \\ENQ\ENQ\a\STXY\STX\DC2\EOT\128\a\DLE\DC2\n\ + \\ENQ\ENQ\a\STXY\STX\DC2\EOT\164\a\DLE\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STXZ\SOH\DC2\EOT\129\a\STX\t\n\ + \\ENQ\ENQ\a\STXZ\SOH\DC2\EOT\165\a\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STXZ\DC2\EOT\129\a\STX\SI\n\ + \\EOT\ENQ\a\STXZ\DC2\EOT\165\a\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STXZ\STX\DC2\EOT\129\a\f\SO\n\ + \\ENQ\ENQ\a\STXZ\STX\DC2\EOT\165\a\f\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX[\SOH\DC2\EOT\130\a\STX\a\n\ + \\ENQ\ENQ\a\STX[\SOH\DC2\EOT\166\a\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STX[\DC2\EOT\130\a\STX\SO\n\ + \\EOT\ENQ\a\STX[\DC2\EOT\166\a\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX[\STX\DC2\EOT\130\a\n\ + \\ENQ\ENQ\a\STX[\STX\DC2\EOT\166\a\n\ \\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\\\SOH\DC2\EOT\131\a\STX\n\ + \\ENQ\ENQ\a\STX\\\SOH\DC2\EOT\167\a\STX\n\ \\n\ \\f\n\ - \\EOT\ENQ\a\STX\\\DC2\EOT\131\a\STX\DLE\n\ + \\EOT\ENQ\a\STX\\\DC2\EOT\167\a\STX\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STX\\\STX\DC2\EOT\131\a\r\SI\n\ + \\ENQ\ENQ\a\STX\\\STX\DC2\EOT\167\a\r\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX]\SOH\DC2\EOT\132\a\STX\b\n\ + \\ENQ\ENQ\a\STX]\SOH\DC2\EOT\168\a\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX]\DC2\EOT\132\a\STX\SI\n\ + \\EOT\ENQ\a\STX]\DC2\EOT\168\a\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX]\STX\DC2\EOT\132\a\v\SO\n\ + \\ENQ\ENQ\a\STX]\STX\DC2\EOT\168\a\v\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX^\SOH\DC2\EOT\133\a\STX\a\n\ + \\ENQ\ENQ\a\STX^\SOH\DC2\EOT\169\a\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STX^\DC2\EOT\133\a\STX\f\n\ + \\EOT\ENQ\a\STX^\DC2\EOT\169\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX^\STX\DC2\EOT\133\a\n\ + \\ENQ\ENQ\a\STX^\STX\DC2\EOT\169\a\n\ \\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX_\SOH\DC2\EOT\134\a\STX\ENQ\n\ + \\ENQ\ENQ\a\STX_\SOH\DC2\EOT\170\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX_\DC2\EOT\134\a\STX\f\n\ + \\EOT\ENQ\a\STX_\DC2\EOT\170\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX_\STX\DC2\EOT\134\a\b\v\n\ + \\ENQ\ENQ\a\STX_\STX\DC2\EOT\170\a\b\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX`\SOH\DC2\EOT\135\a\STX\ACK\n\ + \\ENQ\ENQ\a\STX`\SOH\DC2\EOT\171\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX`\DC2\EOT\135\a\STX\f\n\ + \\EOT\ENQ\a\STX`\DC2\EOT\171\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX`\STX\DC2\EOT\135\a\t\v\n\ + \\ENQ\ENQ\a\STX`\STX\DC2\EOT\171\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXa\SOH\DC2\EOT\136\a\STX\ENQ\n\ + \\ENQ\ENQ\a\STXa\SOH\DC2\EOT\172\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXa\DC2\EOT\136\a\STX\v\n\ + \\EOT\ENQ\a\STXa\DC2\EOT\172\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXa\STX\DC2\EOT\136\a\b\n\ + \\ENQ\ENQ\a\STXa\STX\DC2\EOT\172\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXb\SOH\DC2\EOT\137\a\STX\b\n\ + \\ENQ\ENQ\a\STXb\SOH\DC2\EOT\173\a\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STXb\DC2\EOT\137\a\STX\SI\n\ + \\EOT\ENQ\a\STXb\DC2\EOT\173\a\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STXb\STX\DC2\EOT\137\a\v\SO\n\ + \\ENQ\ENQ\a\STXb\STX\DC2\EOT\173\a\v\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXc\SOH\DC2\EOT\138\a\STX\f\n\ + \\ENQ\ENQ\a\STXc\SOH\DC2\EOT\174\a\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STXc\DC2\EOT\138\a\STX\DC2\n\ + \\EOT\ENQ\a\STXc\DC2\EOT\174\a\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STXc\STX\DC2\EOT\138\a\SI\DC1\n\ + \\ENQ\ENQ\a\STXc\STX\DC2\EOT\174\a\SI\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STXd\SOH\DC2\EOT\139\a\STX\DC1\n\ + \\ENQ\ENQ\a\STXd\SOH\DC2\EOT\175\a\STX\DC1\n\ \\f\n\ - \\EOT\ENQ\a\STXd\DC2\EOT\139\a\STX\ETB\n\ + \\EOT\ENQ\a\STXd\DC2\EOT\175\a\STX\ETB\n\ \\r\n\ - \\ENQ\ENQ\a\STXd\STX\DC2\EOT\139\a\DC4\SYN\n\ + \\ENQ\ENQ\a\STXd\STX\DC2\EOT\175\a\DC4\SYN\n\ \\r\n\ - \\ENQ\ENQ\a\STXe\SOH\DC2\EOT\140\a\STX\t\n\ + \\ENQ\ENQ\a\STXe\SOH\DC2\EOT\176\a\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STXe\DC2\EOT\140\a\STX\DLE\n\ + \\EOT\ENQ\a\STXe\DC2\EOT\176\a\STX\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STXe\STX\DC2\EOT\140\a\f\SI\n\ + \\ENQ\ENQ\a\STXe\STX\DC2\EOT\176\a\f\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STXf\SOH\DC2\EOT\141\a\STX\ACK\n\ + \\ENQ\ENQ\a\STXf\SOH\DC2\EOT\177\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXf\DC2\EOT\141\a\STX\r\n\ + \\EOT\ENQ\a\STXf\DC2\EOT\177\a\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXf\STX\DC2\EOT\141\a\t\f\n\ + \\ENQ\ENQ\a\STXf\STX\DC2\EOT\177\a\t\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXg\SOH\DC2\EOT\142\a\STX\r\n\ + \\ENQ\ENQ\a\STXg\SOH\DC2\EOT\178\a\STX\r\n\ \\f\n\ - \\EOT\ENQ\a\STXg\DC2\EOT\142\a\STX\DC3\n\ + \\EOT\ENQ\a\STXg\DC2\EOT\178\a\STX\DC3\n\ \\r\n\ - \\ENQ\ENQ\a\STXg\STX\DC2\EOT\142\a\DLE\DC2\n\ + \\ENQ\ENQ\a\STXg\STX\DC2\EOT\178\a\DLE\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STXh\SOH\DC2\EOT\143\a\STX\ENQ\n\ + \\ENQ\ENQ\a\STXh\SOH\DC2\EOT\179\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXh\DC2\EOT\143\a\STX\v\n\ + \\EOT\ENQ\a\STXh\DC2\EOT\179\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXh\STX\DC2\EOT\143\a\b\n\ + \\ENQ\ENQ\a\STXh\STX\DC2\EOT\179\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXi\SOH\DC2\EOT\144\a\STX\t\n\ + \\ENQ\ENQ\a\STXi\SOH\DC2\EOT\180\a\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STXi\DC2\EOT\144\a\STX\SI\n\ + \\EOT\ENQ\a\STXi\DC2\EOT\180\a\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STXi\STX\DC2\EOT\144\a\f\SO\n\ + \\ENQ\ENQ\a\STXi\STX\DC2\EOT\180\a\f\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXj\SOH\DC2\EOT\145\a\STX\ENQ\n\ + \\ENQ\ENQ\a\STXj\SOH\DC2\EOT\181\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXj\DC2\EOT\145\a\STX\v\n\ + \\EOT\ENQ\a\STXj\DC2\EOT\181\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXj\STX\DC2\EOT\145\a\b\n\ + \\ENQ\ENQ\a\STXj\STX\DC2\EOT\181\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXk\SOH\DC2\EOT\146\a\STX\ENQ\n\ + \\ENQ\ENQ\a\STXk\SOH\DC2\EOT\182\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXk\DC2\EOT\146\a\STX\v\n\ + \\EOT\ENQ\a\STXk\DC2\EOT\182\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXk\STX\DC2\EOT\146\a\b\n\ + \\ENQ\ENQ\a\STXk\STX\DC2\EOT\182\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXl\SOH\DC2\EOT\147\a\STX\ACK\n\ + \\ENQ\ENQ\a\STXl\SOH\DC2\EOT\183\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXl\DC2\EOT\147\a\STX\f\n\ + \\EOT\ENQ\a\STXl\DC2\EOT\183\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXl\STX\DC2\EOT\147\a\t\v\n\ + \\ENQ\ENQ\a\STXl\STX\DC2\EOT\183\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXm\SOH\DC2\EOT\148\a\STX\ENQ\n\ + \\ENQ\ENQ\a\STXm\SOH\DC2\EOT\184\a\STX\ENQ\n\ \\147\ETX\n\ - \\EOT\ENQ\a\STXm\DC2\EOT\148\a\STX\v\"\132\ETX NextLanguage = 111;\n\ + \\EOT\ENQ\a\STXm\DC2\EOT\184\a\STX\v\"\132\ETX NextLanguage = 111;\n\ \ Steps add a new language:\n\ \ 1. Copy-paste the \"NextLanguage = N\" line above\n\ \ 2. Increment \"NextLanguage = N\" to \"NextLanguage = N+1\"\n\ @@ -10396,5 +10432,5 @@ packedFileDescriptor \ 5. (optional) Add a brief comment behind the language if the name is not self-explanatory\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXm\STX\DC2\EOT\148\a\b\n\ + \\ENQ\ENQ\a\STXm\STX\DC2\EOT\184\a\b\n\ \b\ACKproto3" \ No newline at end of file diff --git a/bindings/java/src/main/java/org/scip_code/scip/MultiLineRange.java b/bindings/java/src/main/java/org/scip_code/scip/MultiLineRange.java index a73aac23..5cc77605 100644 --- a/bindings/java/src/main/java/org/scip_code/scip/MultiLineRange.java +++ b/bindings/java/src/main/java/org/scip_code/scip/MultiLineRange.java @@ -8,6 +8,15 @@ /** *
  * MultiLineRange represents a half-open [start, end) range spanning multiple lines.
+ *
+ * Line numbers and characters are always 0-based. Make sure to increment them
+ * before displaying in an editor-like UI because editors conventionally use
+ * 1-based numbers. The `character` values are interpreted based on the
+ * `PositionEncoding` for the enclosing Document.
+ *
+ * Producers SHOULD use `SingleLineRange` when `start_line == end_line` to keep
+ * indexes compact, but consumers MUST accept multi-line encoding even when the
+ * range happens to fit on a single line.
  * 
* * Protobuf type {@code scip.MultiLineRange} @@ -289,6 +298,15 @@ protected Builder newBuilderForType( /** *
    * MultiLineRange represents a half-open [start, end) range spanning multiple lines.
+   *
+   * Line numbers and characters are always 0-based. Make sure to increment them
+   * before displaying in an editor-like UI because editors conventionally use
+   * 1-based numbers. The `character` values are interpreted based on the
+   * `PositionEncoding` for the enclosing Document.
+   *
+   * Producers SHOULD use `SingleLineRange` when `start_line == end_line` to keep
+   * indexes compact, but consumers MUST accept multi-line encoding even when the
+   * range happens to fit on a single line.
    * 
* * Protobuf type {@code scip.MultiLineRange} diff --git a/bindings/java/src/main/java/org/scip_code/scip/Occurrence.java b/bindings/java/src/main/java/org/scip_code/scip/Occurrence.java index 6e8cfb76..e57f348f 100644 --- a/bindings/java/src/main/java/org/scip_code/scip/Occurrence.java +++ b/bindings/java/src/main/java/org/scip_code/scip/Occurrence.java @@ -12,6 +12,21 @@ * * If possible, indexers should try to bundle logically related information * across occurrences into a single occurrence to reduce payload sizes. + * + * Range encoding: + * + * An Occurrence carries its source range in one of two ways: the deprecated + * `range` field (a `repeated int32` packed encoding kept for backward + * compatibility), or one of the typed alternatives in the `typed_range` + * oneof. New producers SHOULD set `typed_range` and SHOULD NOT set the + * deprecated `range` field. The same rule applies to `enclosing_range` and + * `typed_enclosing_range`. + * + * When both encodings are present on the same Occurrence, `typed_range` takes + * precedence over `range` (likewise `typed_enclosing_range` over + * `enclosing_range`). Producers that set both forms MUST keep them + * semantically equivalent. Consumers SHOULD prefer the typed form when + * available and fall back to the `repeated int32` form otherwise. *
* * Protobuf type {@code scip.Occurrence} @@ -159,17 +174,21 @@ public int getNumber() { * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * * * repeated int32 range = 1 [json_name = "range", deprecated = true]; * @deprecated scip.Occurrence.range is deprecated. - * See scip.proto;l=675 + * See scip.proto;l=708 * @return A list containing the range. */ @java.lang.Override @@ -185,17 +204,21 @@ public int getNumber() { * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * * * repeated int32 range = 1 [json_name = "range", deprecated = true]; * @deprecated scip.Occurrence.range is deprecated. - * See scip.proto;l=675 + * See scip.proto;l=708 * @return The count of range. */ @java.lang.Deprecated public int getRangeCount() { @@ -209,17 +232,21 @@ public int getNumber() { * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * * * repeated int32 range = 1 [json_name = "range", deprecated = true]; * @deprecated scip.Occurrence.range is deprecated. - * See scip.proto;l=675 + * See scip.proto;l=708 * @param index The index of the element to return. * @return The range at the given index. */ @@ -554,11 +581,13 @@ public org.scip_code.scip.DiagnosticOrBuilder getDiagnosticsOrBuilder( /** *
    * Deprecated: Use `typed_enclosing_range` instead.
+   *
+   * Uses the same `repeated int32` encoding as the deprecated `range` field.
    * 
* * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; * @deprecated scip.Occurrence.enclosing_range is deprecated. - * See scip.proto;l=713 + * See scip.proto;l=744 * @return A list containing the enclosingRange. */ @java.lang.Override @@ -569,11 +598,13 @@ public org.scip_code.scip.DiagnosticOrBuilder getDiagnosticsOrBuilder( /** *
    * Deprecated: Use `typed_enclosing_range` instead.
+   *
+   * Uses the same `repeated int32` encoding as the deprecated `range` field.
    * 
* * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; * @deprecated scip.Occurrence.enclosing_range is deprecated. - * See scip.proto;l=713 + * See scip.proto;l=744 * @return The count of enclosingRange. */ @java.lang.Deprecated public int getEnclosingRangeCount() { @@ -582,11 +613,13 @@ public org.scip_code.scip.DiagnosticOrBuilder getDiagnosticsOrBuilder( /** *
    * Deprecated: Use `typed_enclosing_range` instead.
+   *
+   * Uses the same `repeated int32` encoding as the deprecated `range` field.
    * 
* * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; * @deprecated scip.Occurrence.enclosing_range is deprecated. - * See scip.proto;l=713 + * See scip.proto;l=744 * @param index The index of the element to return. * @return The enclosingRange at the given index. */ @@ -597,6 +630,10 @@ public org.scip_code.scip.DiagnosticOrBuilder getDiagnosticsOrBuilder( public static final int SINGLE_LINE_ENCLOSING_RANGE_FIELD_NUMBER = 10; /** + *
+   * Enclosing range spanning a single line.
+   * 
+ * * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; * @return Whether the singleLineEnclosingRange field is set. */ @@ -605,6 +642,10 @@ public boolean hasSingleLineEnclosingRange() { return typedEnclosingRangeCase_ == 10; } /** + *
+   * Enclosing range spanning a single line.
+   * 
+ * * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; * @return The singleLineEnclosingRange. */ @@ -616,6 +657,10 @@ public org.scip_code.scip.SingleLineRange getSingleLineEnclosingRange() { return org.scip_code.scip.SingleLineRange.getDefaultInstance(); } /** + *
+   * Enclosing range spanning a single line.
+   * 
+ * * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; */ @java.lang.Override @@ -628,6 +673,10 @@ public org.scip_code.scip.SingleLineRangeOrBuilder getSingleLineEnclosingRangeOr public static final int MULTI_LINE_ENCLOSING_RANGE_FIELD_NUMBER = 11; /** + *
+   * Enclosing range spanning multiple lines.
+   * 
+ * * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; * @return Whether the multiLineEnclosingRange field is set. */ @@ -636,6 +685,10 @@ public boolean hasMultiLineEnclosingRange() { return typedEnclosingRangeCase_ == 11; } /** + *
+   * Enclosing range spanning multiple lines.
+   * 
+ * * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; * @return The multiLineEnclosingRange. */ @@ -647,6 +700,10 @@ public org.scip_code.scip.MultiLineRange getMultiLineEnclosingRange() { return org.scip_code.scip.MultiLineRange.getDefaultInstance(); } /** + *
+   * Enclosing range spanning multiple lines.
+   * 
+ * * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; */ @java.lang.Override @@ -1009,6 +1066,21 @@ protected Builder newBuilderForType( * * If possible, indexers should try to bundle logically related information * across occurrences into a single occurrence to reduce payload sizes. + * + * Range encoding: + * + * An Occurrence carries its source range in one of two ways: the deprecated + * `range` field (a `repeated int32` packed encoding kept for backward + * compatibility), or one of the typed alternatives in the `typed_range` + * oneof. New producers SHOULD set `typed_range` and SHOULD NOT set the + * deprecated `range` field. The same rule applies to `enclosing_range` and + * `typed_enclosing_range`. + * + * When both encodings are present on the same Occurrence, `typed_range` takes + * precedence over `range` (likewise `typed_enclosing_range` over + * `enclosing_range`). Producers that set both forms MUST keep them + * semantically equivalent. Consumers SHOULD prefer the typed form when + * available and fall back to the `repeated int32` form otherwise. * * * Protobuf type {@code scip.Occurrence} @@ -1455,17 +1527,21 @@ private void ensureRangeIsMutable() { * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * * * repeated int32 range = 1 [json_name = "range", deprecated = true]; * @deprecated scip.Occurrence.range is deprecated. - * See scip.proto;l=675 + * See scip.proto;l=708 * @return A list containing the range. */ @java.lang.Deprecated public java.util.List @@ -1481,17 +1557,21 @@ private void ensureRangeIsMutable() { * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * * * repeated int32 range = 1 [json_name = "range", deprecated = true]; * @deprecated scip.Occurrence.range is deprecated. - * See scip.proto;l=675 + * See scip.proto;l=708 * @return The count of range. */ @java.lang.Deprecated public int getRangeCount() { @@ -1505,17 +1585,21 @@ private void ensureRangeIsMutable() { * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * * * repeated int32 range = 1 [json_name = "range", deprecated = true]; * @deprecated scip.Occurrence.range is deprecated. - * See scip.proto;l=675 + * See scip.proto;l=708 * @param index The index of the element to return. * @return The range at the given index. */ @@ -1530,17 +1614,21 @@ private void ensureRangeIsMutable() { * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * * * repeated int32 range = 1 [json_name = "range", deprecated = true]; * @deprecated scip.Occurrence.range is deprecated. - * See scip.proto;l=675 + * See scip.proto;l=708 * @param index The index to set the value at. * @param value The range to set. * @return This builder for chaining. @@ -1562,17 +1650,21 @@ private void ensureRangeIsMutable() { * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * * * repeated int32 range = 1 [json_name = "range", deprecated = true]; * @deprecated scip.Occurrence.range is deprecated. - * See scip.proto;l=675 + * See scip.proto;l=708 * @param value The range to add. * @return This builder for chaining. */ @@ -1592,17 +1684,21 @@ private void ensureRangeIsMutable() { * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * * * repeated int32 range = 1 [json_name = "range", deprecated = true]; * @deprecated scip.Occurrence.range is deprecated. - * See scip.proto;l=675 + * See scip.proto;l=708 * @param values The range to add. * @return This builder for chaining. */ @@ -1623,17 +1719,21 @@ private void ensureRangeIsMutable() { * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * * * repeated int32 range = 1 [json_name = "range", deprecated = true]; * @deprecated scip.Occurrence.range is deprecated. - * See scip.proto;l=675 + * See scip.proto;l=708 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearRange() { @@ -2747,11 +2847,13 @@ private void ensureEnclosingRangeIsMutable() { /** *
      * Deprecated: Use `typed_enclosing_range` instead.
+     *
+     * Uses the same `repeated int32` encoding as the deprecated `range` field.
      * 
* * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; * @deprecated scip.Occurrence.enclosing_range is deprecated. - * See scip.proto;l=713 + * See scip.proto;l=744 * @return A list containing the enclosingRange. */ @java.lang.Deprecated public java.util.List @@ -2762,11 +2864,13 @@ private void ensureEnclosingRangeIsMutable() { /** *
      * Deprecated: Use `typed_enclosing_range` instead.
+     *
+     * Uses the same `repeated int32` encoding as the deprecated `range` field.
      * 
* * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; * @deprecated scip.Occurrence.enclosing_range is deprecated. - * See scip.proto;l=713 + * See scip.proto;l=744 * @return The count of enclosingRange. */ @java.lang.Deprecated public int getEnclosingRangeCount() { @@ -2775,11 +2879,13 @@ private void ensureEnclosingRangeIsMutable() { /** *
      * Deprecated: Use `typed_enclosing_range` instead.
+     *
+     * Uses the same `repeated int32` encoding as the deprecated `range` field.
      * 
* * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; * @deprecated scip.Occurrence.enclosing_range is deprecated. - * See scip.proto;l=713 + * See scip.proto;l=744 * @param index The index of the element to return. * @return The enclosingRange at the given index. */ @@ -2789,11 +2895,13 @@ private void ensureEnclosingRangeIsMutable() { /** *
      * Deprecated: Use `typed_enclosing_range` instead.
+     *
+     * Uses the same `repeated int32` encoding as the deprecated `range` field.
      * 
* * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; * @deprecated scip.Occurrence.enclosing_range is deprecated. - * See scip.proto;l=713 + * See scip.proto;l=744 * @param index The index to set the value at. * @param value The enclosingRange to set. * @return This builder for chaining. @@ -2810,11 +2918,13 @@ private void ensureEnclosingRangeIsMutable() { /** *
      * Deprecated: Use `typed_enclosing_range` instead.
+     *
+     * Uses the same `repeated int32` encoding as the deprecated `range` field.
      * 
* * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; * @deprecated scip.Occurrence.enclosing_range is deprecated. - * See scip.proto;l=713 + * See scip.proto;l=744 * @param value The enclosingRange to add. * @return This builder for chaining. */ @@ -2829,11 +2939,13 @@ private void ensureEnclosingRangeIsMutable() { /** *
      * Deprecated: Use `typed_enclosing_range` instead.
+     *
+     * Uses the same `repeated int32` encoding as the deprecated `range` field.
      * 
* * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; * @deprecated scip.Occurrence.enclosing_range is deprecated. - * See scip.proto;l=713 + * See scip.proto;l=744 * @param values The enclosingRange to add. * @return This builder for chaining. */ @@ -2849,11 +2961,13 @@ private void ensureEnclosingRangeIsMutable() { /** *
      * Deprecated: Use `typed_enclosing_range` instead.
+     *
+     * Uses the same `repeated int32` encoding as the deprecated `range` field.
      * 
* * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; * @deprecated scip.Occurrence.enclosing_range is deprecated. - * See scip.proto;l=713 + * See scip.proto;l=744 * @return This builder for chaining. */ @java.lang.Deprecated public Builder clearEnclosingRange() { @@ -2866,6 +2980,10 @@ private void ensureEnclosingRangeIsMutable() { private com.google.protobuf.SingleFieldBuilder< org.scip_code.scip.SingleLineRange, org.scip_code.scip.SingleLineRange.Builder, org.scip_code.scip.SingleLineRangeOrBuilder> singleLineEnclosingRangeBuilder_; /** + *
+     * Enclosing range spanning a single line.
+     * 
+ * * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; * @return Whether the singleLineEnclosingRange field is set. */ @@ -2874,6 +2992,10 @@ public boolean hasSingleLineEnclosingRange() { return typedEnclosingRangeCase_ == 10; } /** + *
+     * Enclosing range spanning a single line.
+     * 
+ * * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; * @return The singleLineEnclosingRange. */ @@ -2892,6 +3014,10 @@ public org.scip_code.scip.SingleLineRange getSingleLineEnclosingRange() { } } /** + *
+     * Enclosing range spanning a single line.
+     * 
+ * * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; */ public Builder setSingleLineEnclosingRange(org.scip_code.scip.SingleLineRange value) { @@ -2908,6 +3034,10 @@ public Builder setSingleLineEnclosingRange(org.scip_code.scip.SingleLineRange va return this; } /** + *
+     * Enclosing range spanning a single line.
+     * 
+ * * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; */ public Builder setSingleLineEnclosingRange( @@ -2922,6 +3052,10 @@ public Builder setSingleLineEnclosingRange( return this; } /** + *
+     * Enclosing range spanning a single line.
+     * 
+ * * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; */ public Builder mergeSingleLineEnclosingRange(org.scip_code.scip.SingleLineRange value) { @@ -2945,6 +3079,10 @@ public Builder mergeSingleLineEnclosingRange(org.scip_code.scip.SingleLineRange return this; } /** + *
+     * Enclosing range spanning a single line.
+     * 
+ * * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; */ public Builder clearSingleLineEnclosingRange() { @@ -2964,12 +3102,20 @@ public Builder clearSingleLineEnclosingRange() { return this; } /** + *
+     * Enclosing range spanning a single line.
+     * 
+ * * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; */ public org.scip_code.scip.SingleLineRange.Builder getSingleLineEnclosingRangeBuilder() { return internalGetSingleLineEnclosingRangeFieldBuilder().getBuilder(); } /** + *
+     * Enclosing range spanning a single line.
+     * 
+ * * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; */ @java.lang.Override @@ -2984,6 +3130,10 @@ public org.scip_code.scip.SingleLineRangeOrBuilder getSingleLineEnclosingRangeOr } } /** + *
+     * Enclosing range spanning a single line.
+     * 
+ * * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; */ private com.google.protobuf.SingleFieldBuilder< @@ -3008,6 +3158,10 @@ public org.scip_code.scip.SingleLineRangeOrBuilder getSingleLineEnclosingRangeOr private com.google.protobuf.SingleFieldBuilder< org.scip_code.scip.MultiLineRange, org.scip_code.scip.MultiLineRange.Builder, org.scip_code.scip.MultiLineRangeOrBuilder> multiLineEnclosingRangeBuilder_; /** + *
+     * Enclosing range spanning multiple lines.
+     * 
+ * * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; * @return Whether the multiLineEnclosingRange field is set. */ @@ -3016,6 +3170,10 @@ public boolean hasMultiLineEnclosingRange() { return typedEnclosingRangeCase_ == 11; } /** + *
+     * Enclosing range spanning multiple lines.
+     * 
+ * * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; * @return The multiLineEnclosingRange. */ @@ -3034,6 +3192,10 @@ public org.scip_code.scip.MultiLineRange getMultiLineEnclosingRange() { } } /** + *
+     * Enclosing range spanning multiple lines.
+     * 
+ * * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; */ public Builder setMultiLineEnclosingRange(org.scip_code.scip.MultiLineRange value) { @@ -3050,6 +3212,10 @@ public Builder setMultiLineEnclosingRange(org.scip_code.scip.MultiLineRange valu return this; } /** + *
+     * Enclosing range spanning multiple lines.
+     * 
+ * * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; */ public Builder setMultiLineEnclosingRange( @@ -3064,6 +3230,10 @@ public Builder setMultiLineEnclosingRange( return this; } /** + *
+     * Enclosing range spanning multiple lines.
+     * 
+ * * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; */ public Builder mergeMultiLineEnclosingRange(org.scip_code.scip.MultiLineRange value) { @@ -3087,6 +3257,10 @@ public Builder mergeMultiLineEnclosingRange(org.scip_code.scip.MultiLineRange va return this; } /** + *
+     * Enclosing range spanning multiple lines.
+     * 
+ * * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; */ public Builder clearMultiLineEnclosingRange() { @@ -3106,12 +3280,20 @@ public Builder clearMultiLineEnclosingRange() { return this; } /** + *
+     * Enclosing range spanning multiple lines.
+     * 
+ * * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; */ public org.scip_code.scip.MultiLineRange.Builder getMultiLineEnclosingRangeBuilder() { return internalGetMultiLineEnclosingRangeFieldBuilder().getBuilder(); } /** + *
+     * Enclosing range spanning multiple lines.
+     * 
+ * * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; */ @java.lang.Override @@ -3126,6 +3308,10 @@ public org.scip_code.scip.MultiLineRangeOrBuilder getMultiLineEnclosingRangeOrBu } } /** + *
+     * Enclosing range spanning multiple lines.
+     * 
+ * * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; */ private com.google.protobuf.SingleFieldBuilder< diff --git a/bindings/java/src/main/java/org/scip_code/scip/OccurrenceOrBuilder.java b/bindings/java/src/main/java/org/scip_code/scip/OccurrenceOrBuilder.java index 3a95b831..fbfa5f2b 100644 --- a/bindings/java/src/main/java/org/scip_code/scip/OccurrenceOrBuilder.java +++ b/bindings/java/src/main/java/org/scip_code/scip/OccurrenceOrBuilder.java @@ -18,17 +18,21 @@ public interface OccurrenceOrBuilder extends * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * * * repeated int32 range = 1 [json_name = "range", deprecated = true]; * @deprecated scip.Occurrence.range is deprecated. - * See scip.proto;l=675 + * See scip.proto;l=708 * @return A list containing the range. */ @java.lang.Deprecated java.util.List getRangeList(); @@ -40,17 +44,21 @@ public interface OccurrenceOrBuilder extends * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * * * repeated int32 range = 1 [json_name = "range", deprecated = true]; * @deprecated scip.Occurrence.range is deprecated. - * See scip.proto;l=675 + * See scip.proto;l=708 * @return The count of range. */ @java.lang.Deprecated int getRangeCount(); @@ -62,17 +70,21 @@ public interface OccurrenceOrBuilder extends * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * * * repeated int32 range = 1 [json_name = "range", deprecated = true]; * @deprecated scip.Occurrence.range is deprecated. - * See scip.proto;l=675 + * See scip.proto;l=708 * @param index The index of the element to return. * @return The range at the given index. */ @@ -300,64 +312,94 @@ org.scip_code.scip.DiagnosticOrBuilder getDiagnosticsOrBuilder( /** *
    * Deprecated: Use `typed_enclosing_range` instead.
+   *
+   * Uses the same `repeated int32` encoding as the deprecated `range` field.
    * 
* * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; * @deprecated scip.Occurrence.enclosing_range is deprecated. - * See scip.proto;l=713 + * See scip.proto;l=744 * @return A list containing the enclosingRange. */ @java.lang.Deprecated java.util.List getEnclosingRangeList(); /** *
    * Deprecated: Use `typed_enclosing_range` instead.
+   *
+   * Uses the same `repeated int32` encoding as the deprecated `range` field.
    * 
* * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; * @deprecated scip.Occurrence.enclosing_range is deprecated. - * See scip.proto;l=713 + * See scip.proto;l=744 * @return The count of enclosingRange. */ @java.lang.Deprecated int getEnclosingRangeCount(); /** *
    * Deprecated: Use `typed_enclosing_range` instead.
+   *
+   * Uses the same `repeated int32` encoding as the deprecated `range` field.
    * 
* * repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true]; * @deprecated scip.Occurrence.enclosing_range is deprecated. - * See scip.proto;l=713 + * See scip.proto;l=744 * @param index The index of the element to return. * @return The enclosingRange at the given index. */ @java.lang.Deprecated int getEnclosingRange(int index); /** + *
+   * Enclosing range spanning a single line.
+   * 
+ * * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; * @return Whether the singleLineEnclosingRange field is set. */ boolean hasSingleLineEnclosingRange(); /** + *
+   * Enclosing range spanning a single line.
+   * 
+ * * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; * @return The singleLineEnclosingRange. */ org.scip_code.scip.SingleLineRange getSingleLineEnclosingRange(); /** + *
+   * Enclosing range spanning a single line.
+   * 
+ * * .scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"]; */ org.scip_code.scip.SingleLineRangeOrBuilder getSingleLineEnclosingRangeOrBuilder(); /** + *
+   * Enclosing range spanning multiple lines.
+   * 
+ * * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; * @return Whether the multiLineEnclosingRange field is set. */ boolean hasMultiLineEnclosingRange(); /** + *
+   * Enclosing range spanning multiple lines.
+   * 
+ * * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; * @return The multiLineEnclosingRange. */ org.scip_code.scip.MultiLineRange getMultiLineEnclosingRange(); /** + *
+   * Enclosing range spanning multiple lines.
+   * 
+ * * .scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"]; */ org.scip_code.scip.MultiLineRangeOrBuilder getMultiLineEnclosingRangeOrBuilder(); diff --git a/bindings/java/src/main/java/org/scip_code/scip/SingleLineRange.java b/bindings/java/src/main/java/org/scip_code/scip/SingleLineRange.java index 7aea8ac1..879c655c 100644 --- a/bindings/java/src/main/java/org/scip_code/scip/SingleLineRange.java +++ b/bindings/java/src/main/java/org/scip_code/scip/SingleLineRange.java @@ -8,6 +8,11 @@ /** *
  * SingleLineRange represents a half-open [start, end) range within a single line.
+ *
+ * Line numbers and characters are always 0-based. Make sure to increment them
+ * before displaying in an editor-like UI because editors conventionally use
+ * 1-based numbers. The `character` values are interpreted based on the
+ * `PositionEncoding` for the enclosing Document.
  * 
* * Protobuf type {@code scip.SingleLineRange} @@ -267,6 +272,11 @@ protected Builder newBuilderForType( /** *
    * SingleLineRange represents a half-open [start, end) range within a single line.
+   *
+   * Line numbers and characters are always 0-based. Make sure to increment them
+   * before displaying in an editor-like UI because editors conventionally use
+   * 1-based numbers. The `character` values are interpreted based on the
+   * `PositionEncoding` for the enclosing Document.
    * 
* * Protobuf type {@code scip.SingleLineRange} diff --git a/bindings/kotlin/src/main/kotlin/org/scip_code/scip/MultiLineRangeKt.kt b/bindings/kotlin/src/main/kotlin/org/scip_code/scip/MultiLineRangeKt.kt index aa8d8744..37bc0b69 100644 --- a/bindings/kotlin/src/main/kotlin/org/scip_code/scip/MultiLineRangeKt.kt +++ b/bindings/kotlin/src/main/kotlin/org/scip_code/scip/MultiLineRangeKt.kt @@ -13,6 +13,15 @@ public inline fun multiLineRange(block: org.scip_code.scip.MultiLineRangeKt.Dsl. /** * ``` * MultiLineRange represents a half-open [start, end) range spanning multiple lines. + * + * Line numbers and characters are always 0-based. Make sure to increment them + * before displaying in an editor-like UI because editors conventionally use + * 1-based numbers. The `character` values are interpreted based on the + * `PositionEncoding` for the enclosing Document. + * + * Producers SHOULD use `SingleLineRange` when `start_line == end_line` to keep + * indexes compact, but consumers MUST accept multi-line encoding even when the + * range happens to fit on a single line. * ``` * * Protobuf type `scip.MultiLineRange` diff --git a/bindings/kotlin/src/main/kotlin/org/scip_code/scip/OccurrenceKt.kt b/bindings/kotlin/src/main/kotlin/org/scip_code/scip/OccurrenceKt.kt index 3b8f8d98..36c72bb1 100644 --- a/bindings/kotlin/src/main/kotlin/org/scip_code/scip/OccurrenceKt.kt +++ b/bindings/kotlin/src/main/kotlin/org/scip_code/scip/OccurrenceKt.kt @@ -17,6 +17,21 @@ public inline fun occurrence(block: org.scip_code.scip.OccurrenceKt.Dsl.() -> ko * * If possible, indexers should try to bundle logically related information * across occurrences into a single occurrence to reduce payload sizes. + * + * Range encoding: + * + * An Occurrence carries its source range in one of two ways: the deprecated + * `range` field (a `repeated int32` packed encoding kept for backward + * compatibility), or one of the typed alternatives in the `typed_range` + * oneof. New producers SHOULD set `typed_range` and SHOULD NOT set the + * deprecated `range` field. The same rule applies to `enclosing_range` and + * `typed_enclosing_range`. + * + * When both encodings are present on the same Occurrence, `typed_range` takes + * precedence over `range` (likewise `typed_enclosing_range` over + * `enclosing_range`). Producers that set both forms MUST keep them + * semantically equivalent. Consumers SHOULD prefer the typed form when + * available and fall back to the `repeated int32` form otherwise. * ``` * * Protobuf type `scip.Occurrence` @@ -51,12 +66,16 @@ public object OccurrenceKt { * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * ``` * * `repeated int32 range = 1 [json_name = "range", deprecated = true];` @@ -74,12 +93,16 @@ public object OccurrenceKt { * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * ``` * * `repeated int32 range = 1 [json_name = "range", deprecated = true];` @@ -97,12 +120,16 @@ public object OccurrenceKt { * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * ``` * * `repeated int32 range = 1 [json_name = "range", deprecated = true];` @@ -121,12 +148,16 @@ public object OccurrenceKt { * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * ``` * * `repeated int32 range = 1 [json_name = "range", deprecated = true];` @@ -144,12 +175,16 @@ public object OccurrenceKt { * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * ``` * * `repeated int32 range = 1 [json_name = "range", deprecated = true];` @@ -168,12 +203,16 @@ public object OccurrenceKt { * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * ``` * * `repeated int32 range = 1 [json_name = "range", deprecated = true];` @@ -192,12 +231,16 @@ public object OccurrenceKt { * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * ``` * * `repeated int32 range = 1 [json_name = "range", deprecated = true];` @@ -620,6 +663,8 @@ public object OccurrenceKt { /** * ``` * Deprecated: Use `typed_enclosing_range` instead. + * + * Uses the same `repeated int32` encoding as the deprecated `range` field. * ``` * * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true];` @@ -632,6 +677,8 @@ public object OccurrenceKt { /** * ``` * Deprecated: Use `typed_enclosing_range` instead. + * + * Uses the same `repeated int32` encoding as the deprecated `range` field. * ``` * * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true];` @@ -644,6 +691,8 @@ public object OccurrenceKt { }/** * ``` * Deprecated: Use `typed_enclosing_range` instead. + * + * Uses the same `repeated int32` encoding as the deprecated `range` field. * ``` * * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true];` @@ -657,6 +706,8 @@ public object OccurrenceKt { }/** * ``` * Deprecated: Use `typed_enclosing_range` instead. + * + * Uses the same `repeated int32` encoding as the deprecated `range` field. * ``` * * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true];` @@ -669,6 +720,8 @@ public object OccurrenceKt { }/** * ``` * Deprecated: Use `typed_enclosing_range` instead. + * + * Uses the same `repeated int32` encoding as the deprecated `range` field. * ``` * * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true];` @@ -682,6 +735,8 @@ public object OccurrenceKt { }/** * ``` * Deprecated: Use `typed_enclosing_range` instead. + * + * Uses the same `repeated int32` encoding as the deprecated `range` field. * ``` * * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true];` @@ -695,6 +750,8 @@ public object OccurrenceKt { }/** * ``` * Deprecated: Use `typed_enclosing_range` instead. + * + * Uses the same `repeated int32` encoding as the deprecated `range` field. * ``` * * `repeated int32 enclosing_range = 7 [json_name = "enclosingRange", deprecated = true];` @@ -705,6 +762,10 @@ public object OccurrenceKt { _builder.clearEnclosingRange() } /** + * ``` + * Enclosing range spanning a single line. + * ``` + * * `.scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"];` */ public var singleLineEnclosingRange: org.scip_code.scip.SingleLineRange @@ -715,12 +776,20 @@ public object OccurrenceKt { _builder.singleLineEnclosingRange = value } /** + * ``` + * Enclosing range spanning a single line. + * ``` + * * `.scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"];` */ public fun clearSingleLineEnclosingRange() { _builder.clearSingleLineEnclosingRange() } /** + * ``` + * Enclosing range spanning a single line. + * ``` + * * `.scip.SingleLineRange single_line_enclosing_range = 10 [json_name = "singleLineEnclosingRange"];` * @return Whether the singleLineEnclosingRange field is set. */ @@ -729,6 +798,10 @@ public object OccurrenceKt { } /** + * ``` + * Enclosing range spanning multiple lines. + * ``` + * * `.scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"];` */ public var multiLineEnclosingRange: org.scip_code.scip.MultiLineRange @@ -739,12 +812,20 @@ public object OccurrenceKt { _builder.multiLineEnclosingRange = value } /** + * ``` + * Enclosing range spanning multiple lines. + * ``` + * * `.scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"];` */ public fun clearMultiLineEnclosingRange() { _builder.clearMultiLineEnclosingRange() } /** + * ``` + * Enclosing range spanning multiple lines. + * ``` + * * `.scip.MultiLineRange multi_line_enclosing_range = 11 [json_name = "multiLineEnclosingRange"];` * @return Whether the multiLineEnclosingRange field is set. */ diff --git a/bindings/kotlin/src/main/kotlin/org/scip_code/scip/SingleLineRangeKt.kt b/bindings/kotlin/src/main/kotlin/org/scip_code/scip/SingleLineRangeKt.kt index 15c024cb..c9cddfdb 100644 --- a/bindings/kotlin/src/main/kotlin/org/scip_code/scip/SingleLineRangeKt.kt +++ b/bindings/kotlin/src/main/kotlin/org/scip_code/scip/SingleLineRangeKt.kt @@ -13,6 +13,11 @@ public inline fun singleLineRange(block: org.scip_code.scip.SingleLineRangeKt.Ds /** * ``` * SingleLineRange represents a half-open [start, end) range within a single line. + * + * Line numbers and characters are always 0-based. Make sure to increment them + * before displaying in an editor-like UI because editors conventionally use + * 1-based numbers. The `character` values are interpreted based on the + * `PositionEncoding` for the enclosing Document. * ``` * * Protobuf type `scip.SingleLineRange` diff --git a/bindings/rust/src/generated/scip.rs b/bindings/rust/src/generated/scip.rs index dc5bca91..eaffd711 100644 --- a/bindings/rust/src/generated/scip.rs +++ b/bindings/rust/src/generated/scip.rs @@ -2698,6 +2698,11 @@ impl ::protobuf::reflect::ProtobufValue for Relationship { } /// SingleLineRange represents a half-open [start, end) range within a single line. +/// +/// Line numbers and characters are always 0-based. Make sure to increment them +/// before displaying in an editor-like UI because editors conventionally use +/// 1-based numbers. The `character` values are interpreted based on the +/// `PositionEncoding` for the enclosing Document. // @@protoc_insertion_point(message:scip.SingleLineRange) #[derive(PartialEq,Clone,Default,Debug)] pub struct SingleLineRange { @@ -2857,6 +2862,15 @@ impl ::protobuf::reflect::ProtobufValue for SingleLineRange { } /// MultiLineRange represents a half-open [start, end) range spanning multiple lines. +/// +/// Line numbers and characters are always 0-based. Make sure to increment them +/// before displaying in an editor-like UI because editors conventionally use +/// 1-based numbers. The `character` values are interpreted based on the +/// `PositionEncoding` for the enclosing Document. +/// +/// Producers SHOULD use `SingleLineRange` when `start_line == end_line` to keep +/// indexes compact, but consumers MUST accept multi-line encoding even when the +/// range happens to fit on a single line. // @@protoc_insertion_point(message:scip.MultiLineRange) #[derive(PartialEq,Clone,Default,Debug)] pub struct MultiLineRange { @@ -3038,6 +3052,21 @@ impl ::protobuf::reflect::ProtobufValue for MultiLineRange { /// /// If possible, indexers should try to bundle logically related information /// across occurrences into a single occurrence to reduce payload sizes. +/// +/// Range encoding: +/// +/// An Occurrence carries its source range in one of two ways: the deprecated +/// `range` field (a `repeated int32` packed encoding kept for backward +/// compatibility), or one of the typed alternatives in the `typed_range` +/// oneof. New producers SHOULD set `typed_range` and SHOULD NOT set the +/// deprecated `range` field. The same rule applies to `enclosing_range` and +/// `typed_enclosing_range`. +/// +/// When both encodings are present on the same Occurrence, `typed_range` takes +/// precedence over `range` (likewise `typed_enclosing_range` over +/// `enclosing_range`). Producers that set both forms MUST keep them +/// semantically equivalent. Consumers SHOULD prefer the typed form when +/// available and fall back to the `repeated int32` form otherwise. // @@protoc_insertion_point(message:scip.Occurrence) #[derive(PartialEq,Clone,Default,Debug)] pub struct Occurrence { @@ -3048,12 +3077,16 @@ pub struct Occurrence { /// - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) /// - Four elements: `[startLine, startCharacter, endLine, endCharacter]` /// + /// The end line of a three-element range is inferred to equal the start line. + /// /// Historical note: the original draft of this schema had a `Range` message /// type with `start` and `end` fields of type `Position`, mirroring LSP. /// Benchmarks revealed that this encoding was inefficient and that we could /// reduce the total payload size of an index by 50% by using `repeated int32` /// instead. However, the lack of type safety led to the introduction of - /// `single_line_range` and `multi_line_range` as typed alternatives. + /// `single_line_range` and `multi_line_range` as typed alternatives; the + /// typed encoding's per-index size overhead is small (single-digit percent) + /// because ranges are only a fraction of a typical index payload. // @@protoc_insertion_point(field:scip.Occurrence.range) pub range: ::std::vec::Vec, /// (optional) The symbol that appears at this position. See @@ -3081,6 +3114,8 @@ pub struct Occurrence { // @@protoc_insertion_point(field:scip.Occurrence.diagnostics) pub diagnostics: ::std::vec::Vec, /// Deprecated: Use `typed_enclosing_range` instead. + /// + /// Uses the same `repeated int32` encoding as the deprecated `range` field. // @@protoc_insertion_point(field:scip.Occurrence.enclosing_range) pub enclosing_range: ::std::vec::Vec, // message oneof groups @@ -5524,7 +5559,7 @@ static file_descriptor_proto_data: &'static [u8] = b"\ \x03Vue\x10\x19\x12\x0b\n\x07Wolfram\x105\x12\x07\n\x03XML\x10\x1f\x12\ \x07\n\x03XSL\x10\x20\x12\x08\n\x04YAML\x10J\x12\x07\n\x03Zig\x10&BN\n\ \x12org.scip_code.scipB\tScipProtoP\x01Z+github.com/scip-code/scip/bindi\ - ngs/go/scip/J\xa7\xc7\x02\n\x07\x12\x05\n\0\x9c\x07\x01\n\x82\x04\n\x01\ + ngs/go/scip/J\xc2\xd5\x02\n\x07\x12\x05\n\0\xc0\x07\x01\n\x82\x04\n\x01\ \x0c\x12\x03\n\0\x122\xf7\x03\x20An\x20index\x20contains\x20one\x20or\ \x20more\x20pieces\x20of\x20information\x20about\x20a\x20given\x20piece\ \x20of\n\x20source\x20code\x20or\x20software\x20artifact.\x20Complementa\ @@ -6452,90 +6487,121 @@ static file_descriptor_proto_data: &'static [u8] = b"\ name\x20in\x20XML-like\x20tags\n\n\r\n\x05\x05\x04\x02%\x02\x12\x04\xfd\ \x04\x11\x13\n\r\n\x05\x05\x04\x02&\x01\x12\x04\xff\x04\x02\x0e\n,\n\x04\ \x05\x04\x02&\x12\x04\xff\x04\x02\x14\x1a\x1e\x20Delimiters\x20for\x20XM\ - L-like\x20tags\n\n\r\n\x05\x05\x04\x02&\x02\x12\x04\xff\x04\x11\x13\n_\n\ - \x02\x04\n\x12\x06\x83\x05\0\x87\x05\x01\x1aQ\x20SingleLineRange\x20repr\ - esents\x20a\x20half-open\x20[start,\x20end)\x20range\x20within\x20a\x20s\ - ingle\x20line.\n\n\x0b\n\x03\x04\n\x01\x12\x04\x83\x05\x08\x17\n\r\n\x05\ - \x04\n\x02\0\x05\x12\x04\x84\x05\x02\x07\n\x0c\n\x04\x04\n\x02\0\x12\x04\ - \x84\x05\x02\x11\n\r\n\x05\x04\n\x02\0\x01\x12\x04\x84\x05\x08\x0c\n\r\n\ - \x05\x04\n\x02\0\x03\x12\x04\x84\x05\x0f\x10\n\r\n\x05\x04\n\x02\x01\x05\ - \x12\x04\x85\x05\x02\x07\n\x0c\n\x04\x04\n\x02\x01\x12\x04\x85\x05\x02\ - \x1c\n\r\n\x05\x04\n\x02\x01\x01\x12\x04\x85\x05\x08\x17\n\r\n\x05\x04\n\ - \x02\x01\x03\x12\x04\x85\x05\x1a\x1b\n\r\n\x05\x04\n\x02\x02\x05\x12\x04\ - \x86\x05\x02\x07\n\x0c\n\x04\x04\n\x02\x02\x12\x04\x86\x05\x02\x1a\n\r\n\ - \x05\x04\n\x02\x02\x01\x12\x04\x86\x05\x08\x15\n\r\n\x05\x04\n\x02\x02\ - \x03\x12\x04\x86\x05\x18\x19\na\n\x02\x04\x0b\x12\x06\x8a\x05\0\x8f\x05\ - \x01\x1aS\x20MultiLineRange\x20represents\x20a\x20half-open\x20[start,\ - \x20end)\x20range\x20spanning\x20multiple\x20lines.\n\n\x0b\n\x03\x04\ - \x0b\x01\x12\x04\x8a\x05\x08\x16\n\r\n\x05\x04\x0b\x02\0\x05\x12\x04\x8b\ - \x05\x02\x07\n\x0c\n\x04\x04\x0b\x02\0\x12\x04\x8b\x05\x02\x17\n\r\n\x05\ - \x04\x0b\x02\0\x01\x12\x04\x8b\x05\x08\x12\n\r\n\x05\x04\x0b\x02\0\x03\ - \x12\x04\x8b\x05\x15\x16\n\r\n\x05\x04\x0b\x02\x01\x05\x12\x04\x8c\x05\ - \x02\x07\n\x0c\n\x04\x04\x0b\x02\x01\x12\x04\x8c\x05\x02\x1c\n\r\n\x05\ - \x04\x0b\x02\x01\x01\x12\x04\x8c\x05\x08\x17\n\r\n\x05\x04\x0b\x02\x01\ - \x03\x12\x04\x8c\x05\x1a\x1b\n\r\n\x05\x04\x0b\x02\x02\x05\x12\x04\x8d\ - \x05\x02\x07\n\x0c\n\x04\x04\x0b\x02\x02\x12\x04\x8d\x05\x02\x15\n\r\n\ - \x05\x04\x0b\x02\x02\x01\x12\x04\x8d\x05\x08\x10\n\r\n\x05\x04\x0b\x02\ - \x02\x03\x12\x04\x8d\x05\x13\x14\n\r\n\x05\x04\x0b\x02\x03\x05\x12\x04\ - \x8e\x05\x02\x07\n\x0c\n\x04\x04\x0b\x02\x03\x12\x04\x8e\x05\x02\x1a\n\r\ - \n\x05\x04\x0b\x02\x03\x01\x12\x04\x8e\x05\x08\x15\n\r\n\x05\x04\x0b\x02\ - \x03\x03\x12\x04\x8e\x05\x18\x19\n\xf9\x01\n\x02\x04\x0c\x12\x06\x96\x05\ - \0\x81\x06\x01\x1a\xea\x01\x20Occurrence\x20associates\x20a\x20source\ - \x20position\x20with\x20a\x20symbol\x20and/or\x20highlighting\n\x20infor\ - mation.\n\n\x20If\x20possible,\x20indexers\x20should\x20try\x20to\x20bun\ - dle\x20logically\x20related\x20information\n\x20across\x20occurrences\ - \x20into\x20a\x20single\x20occurrence\x20to\x20reduce\x20payload\x20size\ - s.\n\n\x0b\n\x03\x04\x0c\x01\x12\x04\x96\x05\x08\x12\n\r\n\x05\x04\x0c\ - \x02\0\x04\x12\x04\xa3\x05\x02\n\n\xe0\x05\n\x04\x04\x0c\x02\0\x12\x04\ - \xa3\x05\x02/\x1a\xd1\x05\x20Deprecated:\x20Use\x20`single_line_range`\ - \x20or\x20`multi_line_range`\x20instead.\n\n\x20Half-open\x20[start,\x20\ - end)\x20range.\x20Must\x20be\x20exactly\x20three\x20or\x20four\x20elemen\ - ts:\n\x20-\x20Three\x20elements:\x20`[startLine,\x20startCharacter,\x20e\ - ndCharacter]`\x20(single-line)\n\x20-\x20Four\x20elements:\x20`[startLin\ - e,\x20startCharacter,\x20endLine,\x20endCharacter]`\n\n\x20Historical\ - \x20note:\x20the\x20original\x20draft\x20of\x20this\x20schema\x20had\x20\ - a\x20`Range`\x20message\n\x20type\x20with\x20`start`\x20and\x20`end`\x20\ - fields\x20of\x20type\x20`Position`,\x20mirroring\x20LSP.\n\x20Benchmarks\ - \x20revealed\x20that\x20this\x20encoding\x20was\x20inefficient\x20and\ - \x20that\x20we\x20could\n\x20reduce\x20the\x20total\x20payload\x20size\ - \x20of\x20an\x20index\x20by\x2050%\x20by\x20using\x20`repeated\x20int32`\ - \n\x20instead.\x20However,\x20the\x20lack\x20of\x20type\x20safety\x20led\ - \x20to\x20the\x20introduction\x20of\n\x20`single_line_range`\x20and\x20`\ - multi_line_range`\x20as\x20typed\x20alternatives.\n\n\r\n\x05\x04\x0c\ - \x02\0\x05\x12\x04\xa3\x05\x0b\x10\n\r\n\x05\x04\x0c\x02\0\x01\x12\x04\ - \xa3\x05\x11\x16\n\r\n\x05\x04\x0c\x02\0\x03\x12\x04\xa3\x05\x19\x1a\n\r\ - \n\x05\x04\x0c\x02\0\x08\x12\x04\xa3\x05\x1b.\n\x0e\n\x06\x04\x0c\x02\0\ - \x08\x03\x12\x04\xa3\x05\x1c-\n\xa4\x03\n\x04\x04\x0c\x08\0\x12\x06\xaf\ - \x05\x02\xb4\x05\x03\x1a\x93\x03\x20Half-open\x20[start,\x20end)\x20sour\ - ce\x20range\x20of\x20this\x20occurrence.\n\n\x20It\x20is\x20allowed\x20f\ - or\x20the\x20range\x20to\x20be\x20empty\x20(i.e.\x20start==end).\n\n\x20\ - Line\x20numbers\x20and\x20characters\x20are\x20always\x200-based.\x20Mak\ - e\x20sure\x20to\x20increment\x20the\n\x20line/character\x20values\x20bef\ - ore\x20displaying\x20them\x20in\x20an\x20editor-like\x20UI\x20because\n\ - \x20editors\x20conventionally\x20use\x201-based\x20numbers.\n\n\x20The\ - \x20'character'\x20value\x20is\x20interpreted\x20based\x20on\x20the\x20P\ - ositionEncoding\x20for\n\x20the\x20Document.\n\n\r\n\x05\x04\x0c\x08\0\ - \x01\x12\x04\xaf\x05\x08\x13\n\r\n\x05\x04\x0c\x02\x01\x06\x12\x04\xb1\ - \x05\x04\x13\n-\n\x04\x04\x0c\x02\x01\x12\x04\xb1\x05\x04*\x1a\x1f\x20Ra\ + L-like\x20tags\n\n\r\n\x05\x05\x04\x02&\x02\x12\x04\xff\x04\x11\x13\n\ + \xef\x02\n\x02\x04\n\x12\x06\x88\x05\0\x8c\x05\x01\x1a\xe0\x02\x20Single\ + LineRange\x20represents\x20a\x20half-open\x20[start,\x20end)\x20range\ + \x20within\x20a\x20single\x20line.\n\n\x20Line\x20numbers\x20and\x20char\ + acters\x20are\x20always\x200-based.\x20Make\x20sure\x20to\x20increment\ + \x20them\n\x20before\x20displaying\x20in\x20an\x20editor-like\x20UI\x20b\ + ecause\x20editors\x20conventionally\x20use\n\x201-based\x20numbers.\x20T\ + he\x20`character`\x20values\x20are\x20interpreted\x20based\x20on\x20the\ + \n\x20`PositionEncoding`\x20for\x20the\x20enclosing\x20Document.\n\n\x0b\ + \n\x03\x04\n\x01\x12\x04\x88\x05\x08\x17\n\r\n\x05\x04\n\x02\0\x05\x12\ + \x04\x89\x05\x02\x07\n\x0c\n\x04\x04\n\x02\0\x12\x04\x89\x05\x02\x11\n\r\ + \n\x05\x04\n\x02\0\x01\x12\x04\x89\x05\x08\x0c\n\r\n\x05\x04\n\x02\0\x03\ + \x12\x04\x89\x05\x0f\x10\n\r\n\x05\x04\n\x02\x01\x05\x12\x04\x8a\x05\x02\ + \x07\n\x0c\n\x04\x04\n\x02\x01\x12\x04\x8a\x05\x02\x1c\n\r\n\x05\x04\n\ + \x02\x01\x01\x12\x04\x8a\x05\x08\x17\n\r\n\x05\x04\n\x02\x01\x03\x12\x04\ + \x8a\x05\x1a\x1b\n\r\n\x05\x04\n\x02\x02\x05\x12\x04\x8b\x05\x02\x07\n\ + \x0c\n\x04\x04\n\x02\x02\x12\x04\x8b\x05\x02\x1a\n\r\n\x05\x04\n\x02\x02\ + \x01\x12\x04\x8b\x05\x08\x15\n\r\n\x05\x04\n\x02\x02\x03\x12\x04\x8b\x05\ + \x18\x19\n\xb6\x04\n\x02\x04\x0b\x12\x06\x98\x05\0\x9d\x05\x01\x1a\xa7\ + \x04\x20MultiLineRange\x20represents\x20a\x20half-open\x20[start,\x20end\ + )\x20range\x20spanning\x20multiple\x20lines.\n\n\x20Line\x20numbers\x20a\ + nd\x20characters\x20are\x20always\x200-based.\x20Make\x20sure\x20to\x20i\ + ncrement\x20them\n\x20before\x20displaying\x20in\x20an\x20editor-like\ + \x20UI\x20because\x20editors\x20conventionally\x20use\n\x201-based\x20nu\ + mbers.\x20The\x20`character`\x20values\x20are\x20interpreted\x20based\ + \x20on\x20the\n\x20`PositionEncoding`\x20for\x20the\x20enclosing\x20Docu\ + ment.\n\n\x20Producers\x20SHOULD\x20use\x20`SingleLineRange`\x20when\x20\ + `start_line\x20==\x20end_line`\x20to\x20keep\n\x20indexes\x20compact,\ + \x20but\x20consumers\x20MUST\x20accept\x20multi-line\x20encoding\x20even\ + \x20when\x20the\n\x20range\x20happens\x20to\x20fit\x20on\x20a\x20single\ + \x20line.\n\n\x0b\n\x03\x04\x0b\x01\x12\x04\x98\x05\x08\x16\n\r\n\x05\ + \x04\x0b\x02\0\x05\x12\x04\x99\x05\x02\x07\n\x0c\n\x04\x04\x0b\x02\0\x12\ + \x04\x99\x05\x02\x17\n\r\n\x05\x04\x0b\x02\0\x01\x12\x04\x99\x05\x08\x12\ + \n\r\n\x05\x04\x0b\x02\0\x03\x12\x04\x99\x05\x15\x16\n\r\n\x05\x04\x0b\ + \x02\x01\x05\x12\x04\x9a\x05\x02\x07\n\x0c\n\x04\x04\x0b\x02\x01\x12\x04\ + \x9a\x05\x02\x1c\n\r\n\x05\x04\x0b\x02\x01\x01\x12\x04\x9a\x05\x08\x17\n\ + \r\n\x05\x04\x0b\x02\x01\x03\x12\x04\x9a\x05\x1a\x1b\n\r\n\x05\x04\x0b\ + \x02\x02\x05\x12\x04\x9b\x05\x02\x07\n\x0c\n\x04\x04\x0b\x02\x02\x12\x04\ + \x9b\x05\x02\x15\n\r\n\x05\x04\x0b\x02\x02\x01\x12\x04\x9b\x05\x08\x10\n\ + \r\n\x05\x04\x0b\x02\x02\x03\x12\x04\x9b\x05\x13\x14\n\r\n\x05\x04\x0b\ + \x02\x03\x05\x12\x04\x9c\x05\x02\x07\n\x0c\n\x04\x04\x0b\x02\x03\x12\x04\ + \x9c\x05\x02\x1a\n\r\n\x05\x04\x0b\x02\x03\x01\x12\x04\x9c\x05\x08\x15\n\ + \r\n\x05\x04\x0b\x02\x03\x03\x12\x04\x9c\x05\x18\x19\n\xe4\x07\n\x02\x04\ + \x0c\x12\x06\xb3\x05\0\xa5\x06\x01\x1a\xd5\x07\x20Occurrence\x20associat\ + es\x20a\x20source\x20position\x20with\x20a\x20symbol\x20and/or\x20highli\ + ghting\n\x20information.\n\n\x20If\x20possible,\x20indexers\x20should\ + \x20try\x20to\x20bundle\x20logically\x20related\x20information\n\x20acro\ + ss\x20occurrences\x20into\x20a\x20single\x20occurrence\x20to\x20reduce\ + \x20payload\x20sizes.\n\n\x20Range\x20encoding:\n\n\x20An\x20Occurrence\ + \x20carries\x20its\x20source\x20range\x20in\x20one\x20of\x20two\x20ways:\ + \x20the\x20deprecated\n\x20`range`\x20field\x20(a\x20`repeated\x20int32`\ + \x20packed\x20encoding\x20kept\x20for\x20backward\n\x20compatibility),\ + \x20or\x20one\x20of\x20the\x20typed\x20alternatives\x20in\x20the\x20`typ\ + ed_range`\n\x20oneof.\x20New\x20producers\x20SHOULD\x20set\x20`typed_ran\ + ge`\x20and\x20SHOULD\x20NOT\x20set\x20the\n\x20deprecated\x20`range`\x20\ + field.\x20The\x20same\x20rule\x20applies\x20to\x20`enclosing_range`\x20a\ + nd\n\x20`typed_enclosing_range`.\n\n\x20When\x20both\x20encodings\x20are\ + \x20present\x20on\x20the\x20same\x20Occurrence,\x20`typed_range`\x20take\ + s\n\x20precedence\x20over\x20`range`\x20(likewise\x20`typed_enclosing_ra\ + nge`\x20over\n\x20`enclosing_range`).\x20Producers\x20that\x20set\x20bot\ + h\x20forms\x20MUST\x20keep\x20them\n\x20semantically\x20equivalent.\x20C\ + onsumers\x20SHOULD\x20prefer\x20the\x20typed\x20form\x20when\n\x20availa\ + ble\x20and\x20fall\x20back\x20to\x20the\x20`repeated\x20int32`\x20form\ + \x20otherwise.\n\n\x0b\n\x03\x04\x0c\x01\x12\x04\xb3\x05\x08\x12\n\r\n\ + \x05\x04\x0c\x02\0\x04\x12\x04\xc4\x05\x02\n\n\xbb\x07\n\x04\x04\x0c\x02\ + \0\x12\x04\xc4\x05\x02/\x1a\xac\x07\x20Deprecated:\x20Use\x20`single_lin\ + e_range`\x20or\x20`multi_line_range`\x20instead.\n\n\x20Half-open\x20[st\ + art,\x20end)\x20range.\x20Must\x20be\x20exactly\x20three\x20or\x20four\ + \x20elements:\n\x20-\x20Three\x20elements:\x20`[startLine,\x20startChara\ + cter,\x20endCharacter]`\x20(single-line)\n\x20-\x20Four\x20elements:\x20\ + `[startLine,\x20startCharacter,\x20endLine,\x20endCharacter]`\n\n\x20The\ + \x20end\x20line\x20of\x20a\x20three-element\x20range\x20is\x20inferred\ + \x20to\x20equal\x20the\x20start\x20line.\n\n\x20Historical\x20note:\x20t\ + he\x20original\x20draft\x20of\x20this\x20schema\x20had\x20a\x20`Range`\ + \x20message\n\x20type\x20with\x20`start`\x20and\x20`end`\x20fields\x20of\ + \x20type\x20`Position`,\x20mirroring\x20LSP.\n\x20Benchmarks\x20revealed\ + \x20that\x20this\x20encoding\x20was\x20inefficient\x20and\x20that\x20we\ + \x20could\n\x20reduce\x20the\x20total\x20payload\x20size\x20of\x20an\x20\ + index\x20by\x2050%\x20by\x20using\x20`repeated\x20int32`\n\x20instead.\ + \x20However,\x20the\x20lack\x20of\x20type\x20safety\x20led\x20to\x20the\ + \x20introduction\x20of\n\x20`single_line_range`\x20and\x20`multi_line_ra\ + nge`\x20as\x20typed\x20alternatives;\x20the\n\x20typed\x20encoding's\x20\ + per-index\x20size\x20overhead\x20is\x20small\x20(single-digit\x20percent\ + )\n\x20because\x20ranges\x20are\x20only\x20a\x20fraction\x20of\x20a\x20t\ + ypical\x20index\x20payload.\n\n\r\n\x05\x04\x0c\x02\0\x05\x12\x04\xc4\ + \x05\x0b\x10\n\r\n\x05\x04\x0c\x02\0\x01\x12\x04\xc4\x05\x11\x16\n\r\n\ + \x05\x04\x0c\x02\0\x03\x12\x04\xc4\x05\x19\x1a\n\r\n\x05\x04\x0c\x02\0\ + \x08\x12\x04\xc4\x05\x1b.\n\x0e\n\x06\x04\x0c\x02\0\x08\x03\x12\x04\xc4\ + \x05\x1c-\n\xec\x01\n\x04\x04\x0c\x08\0\x12\x06\xcc\x05\x02\xd1\x05\x03\ + \x1a\xdb\x01\x20Half-open\x20[start,\x20end)\x20source\x20range\x20of\ + \x20this\x20occurrence.\n\n\x20It\x20is\x20allowed\x20for\x20the\x20rang\ + e\x20to\x20be\x20empty\x20(i.e.\x20start==end).\n\n\x20When\x20both\x20`\ + typed_range`\x20and\x20the\x20deprecated\x20`range`\x20field\x20are\x20s\ + et,\n\x20`typed_range`\x20takes\x20precedence.\n\n\r\n\x05\x04\x0c\x08\0\ + \x01\x12\x04\xcc\x05\x08\x13\n\r\n\x05\x04\x0c\x02\x01\x06\x12\x04\xce\ + \x05\x04\x13\n-\n\x04\x04\x0c\x02\x01\x12\x04\xce\x05\x04*\x1a\x1f\x20Ra\ nge\x20spanning\x20a\x20single\x20line.\n\n\r\n\x05\x04\x0c\x02\x01\x01\ - \x12\x04\xb1\x05\x14%\n\r\n\x05\x04\x0c\x02\x01\x03\x12\x04\xb1\x05()\n\ - \r\n\x05\x04\x0c\x02\x02\x06\x12\x04\xb3\x05\x04\x12\n.\n\x04\x04\x0c\ - \x02\x02\x12\x04\xb3\x05\x04(\x1a\x20\x20Range\x20spanning\x20multiple\ - \x20lines.\n\n\r\n\x05\x04\x0c\x02\x02\x01\x12\x04\xb3\x05\x13#\n\r\n\ - \x05\x04\x0c\x02\x02\x03\x12\x04\xb3\x05&'\n\r\n\x05\x04\x0c\x02\x03\x05\ - \x12\x04\xb7\x05\x02\x08\n\x8a\x01\n\x04\x04\x0c\x02\x03\x12\x04\xb7\x05\ + \x12\x04\xce\x05\x14%\n\r\n\x05\x04\x0c\x02\x01\x03\x12\x04\xce\x05()\n\ + \r\n\x05\x04\x0c\x02\x02\x06\x12\x04\xd0\x05\x04\x12\n.\n\x04\x04\x0c\ + \x02\x02\x12\x04\xd0\x05\x04(\x1a\x20\x20Range\x20spanning\x20multiple\ + \x20lines.\n\n\r\n\x05\x04\x0c\x02\x02\x01\x12\x04\xd0\x05\x13#\n\r\n\ + \x05\x04\x0c\x02\x02\x03\x12\x04\xd0\x05&'\n\r\n\x05\x04\x0c\x02\x03\x05\ + \x12\x04\xd4\x05\x02\x08\n\x8a\x01\n\x04\x04\x0c\x02\x03\x12\x04\xd4\x05\ \x02\x14\x1a|\x20(optional)\x20The\x20symbol\x20that\x20appears\x20at\ \x20this\x20position.\x20See\n\x20`SymbolInformation.symbol`\x20for\x20h\ ow\x20to\x20format\x20symbols\x20as\x20strings.\n\n\r\n\x05\x04\x0c\x02\ - \x03\x01\x12\x04\xb7\x05\t\x0f\n\r\n\x05\x04\x0c\x02\x03\x03\x12\x04\xb7\ - \x05\x12\x13\n\r\n\x05\x04\x0c\x02\x04\x05\x12\x04\xba\x05\x02\x07\n\x97\ - \x01\n\x04\x04\x0c\x02\x04\x12\x04\xba\x05\x02\x19\x1a\x88\x01\x20(optio\ + \x03\x01\x12\x04\xd4\x05\t\x0f\n\r\n\x05\x04\x0c\x02\x03\x03\x12\x04\xd4\ + \x05\x12\x13\n\r\n\x05\x04\x0c\x02\x04\x05\x12\x04\xd7\x05\x02\x07\n\x97\ + \x01\n\x04\x04\x0c\x02\x04\x12\x04\xd7\x05\x02\x19\x1a\x88\x01\x20(optio\ nal)\x20Bitset\x20containing\x20`SymbolRole`s\x20in\x20this\x20occurrenc\ e.\n\x20See\x20`SymbolRole`'s\x20documentation\x20for\x20how\x20to\x20re\ ad\x20and\x20write\x20this\x20field.\n\n\r\n\x05\x04\x0c\x02\x04\x01\x12\ - \x04\xba\x05\x08\x14\n\r\n\x05\x04\x0c\x02\x04\x03\x12\x04\xba\x05\x17\ - \x18\n\r\n\x05\x04\x0c\x02\x05\x04\x12\x04\xc3\x05\x02\n\n\xf1\x03\n\x04\ - \x04\x0c\x02\x05\x12\x04\xc3\x05\x02-\x1a\xe2\x03\x20(optional)\x20Commo\ + \x04\xd7\x05\x08\x14\n\r\n\x05\x04\x0c\x02\x04\x03\x12\x04\xd7\x05\x17\ + \x18\n\r\n\x05\x04\x0c\x02\x05\x04\x12\x04\xe0\x05\x02\n\n\xf1\x03\n\x04\ + \x04\x0c\x02\x05\x12\x04\xe0\x05\x02-\x1a\xe2\x03\x20(optional)\x20Commo\ nMark-formatted\x20documentation\x20for\x20this\x20specific\x20range.\ \x20If\n\x20empty,\x20the\x20`Symbol.documentation`\x20field\x20is\x20us\ ed\x20instead.\x20One\x20example\n\x20where\x20this\x20field\x20might\ @@ -6546,370 +6612,375 @@ static file_descriptor_proto_data: &'static [u8] = b"\ s\x20field\x20can\x20also\x20be\x20used\x20for\x20dynamically\x20or\x20g\ radually\x20typed\x20languages,\n\x20which\x20commonly\x20allow\x20for\ \x20type-changing\x20assignment.\n\n\r\n\x05\x04\x0c\x02\x05\x05\x12\x04\ - \xc3\x05\x0b\x11\n\r\n\x05\x04\x0c\x02\x05\x01\x12\x04\xc3\x05\x12(\n\r\ - \n\x05\x04\x0c\x02\x05\x03\x12\x04\xc3\x05+,\n\r\n\x05\x04\x0c\x02\x06\ - \x06\x12\x04\xc5\x05\x02\x0c\nX\n\x04\x04\x0c\x02\x06\x12\x04\xc5\x05\ + \xe0\x05\x0b\x11\n\r\n\x05\x04\x0c\x02\x05\x01\x12\x04\xe0\x05\x12(\n\r\ + \n\x05\x04\x0c\x02\x05\x03\x12\x04\xe0\x05+,\n\r\n\x05\x04\x0c\x02\x06\ + \x06\x12\x04\xe2\x05\x02\x0c\nX\n\x04\x04\x0c\x02\x06\x12\x04\xe2\x05\ \x02\x1d\x1aJ\x20(optional)\x20What\x20syntax\x20highlighting\x20class\ \x20should\x20be\x20used\x20for\x20this\x20range?\n\n\r\n\x05\x04\x0c\ - \x02\x06\x01\x12\x04\xc5\x05\r\x18\n\r\n\x05\x04\x0c\x02\x06\x03\x12\x04\ - \xc5\x05\x1b\x1c\n\r\n\x05\x04\x0c\x02\x07\x04\x12\x04\xc7\x05\x02\n\nW\ - \n\x04\x04\x0c\x02\x07\x12\x04\xc7\x05\x02&\x1aI\x20(optional)\x20Diagno\ + \x02\x06\x01\x12\x04\xe2\x05\r\x18\n\r\n\x05\x04\x0c\x02\x06\x03\x12\x04\ + \xe2\x05\x1b\x1c\n\r\n\x05\x04\x0c\x02\x07\x04\x12\x04\xe4\x05\x02\n\nW\ + \n\x04\x04\x0c\x02\x07\x12\x04\xe4\x05\x02&\x1aI\x20(optional)\x20Diagno\ stics\x20that\x20have\x20been\x20reported\x20for\x20this\x20specific\x20\ - range.\n\n\r\n\x05\x04\x0c\x02\x07\x06\x12\x04\xc7\x05\x0b\x15\n\r\n\x05\ - \x04\x0c\x02\x07\x01\x12\x04\xc7\x05\x16!\n\r\n\x05\x04\x0c\x02\x07\x03\ - \x12\x04\xc7\x05$%\n\r\n\x05\x04\x0c\x02\x08\x04\x12\x04\xc9\x05\x02\n\n\ - @\n\x04\x04\x0c\x02\x08\x12\x04\xc9\x05\x029\x1a2\x20Deprecated:\x20Use\ - \x20`typed_enclosing_range`\x20instead.\n\n\r\n\x05\x04\x0c\x02\x08\x05\ - \x12\x04\xc9\x05\x0b\x10\n\r\n\x05\x04\x0c\x02\x08\x01\x12\x04\xc9\x05\ - \x11\x20\n\r\n\x05\x04\x0c\x02\x08\x03\x12\x04\xc9\x05#$\n\r\n\x05\x04\ - \x0c\x02\x08\x08\x12\x04\xc9\x05%8\n\x0e\n\x06\x04\x0c\x02\x08\x08\x03\ - \x12\x04\xc9\x05&7\n\xd9\r\n\x04\x04\x0c\x08\x01\x12\x06\xfd\x05\x02\x80\ - \x06\x03\x1a\xc8\r\x20(optional)\x20Half-open\x20source\x20range\x20of\ - \x20the\x20nearest\x20non-trivial\x20enclosing\x20AST\n\x20node.\x20This\ - \x20range\x20must\x20enclose\x20the\x20occurrence\x20range.\x20Example\ - \x20applications:\n\n\x20-\x20Call\x20hierarchies:\x20to\x20determine\ - \x20what\x20symbols\x20are\x20referenced\x20from\x20the\x20body\n\x20\ - \x20\x20of\x20a\x20function\n\x20-\x20Symbol\x20outline:\x20to\x20displa\ - y\x20breadcrumbs\x20from\x20the\x20cursor\x20position\x20to\x20the\n\x20\ - \x20\x20root\x20of\x20the\x20file\n\x20-\x20Expand\x20selection:\x20to\ - \x20select\x20the\x20nearest\x20enclosing\x20AST\x20node.\n\x20-\x20High\ - light\x20range:\x20to\x20indicate\x20the\x20AST\x20expression\x20that\ - \x20is\x20associated\x20with\x20a\n\x20\x20\x20hover\x20popover\n\n\x20F\ - or\x20definition\x20occurrences,\x20the\x20enclosing\x20range\x20should\ - \x20indicate\x20the\n\x20start/end\x20bounds\x20of\x20the\x20entire\x20d\ - efinition\x20AST\x20node,\x20including\n\x20documentation.\n\x20```\n\ - \x20const\x20n\x20=\x203\n\x20\x20\x20\x20\x20\x20\x20^\x20range\n\x20^^\ - ^^^^^^^^^\x20enclosing_range\n\n\x20/**\x20Parses\x20the\x20string\x20in\ - to\x20something\x20*/\n\x20^\x20enclosing_range\x20start\x20------------\ - --------------------------|\n\x20function\x20parse(input\x20string):\x20\ - string\x20{\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ - \x20\x20\x20\x20\x20\x20\x20\x20\x20|\n\x20\x20\x20\x20\x20\x20\x20\x20\ - \x20\x20^^^^^\x20range\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ + range.\n\n\r\n\x05\x04\x0c\x02\x07\x06\x12\x04\xe4\x05\x0b\x15\n\r\n\x05\ + \x04\x0c\x02\x07\x01\x12\x04\xe4\x05\x16!\n\r\n\x05\x04\x0c\x02\x07\x03\ + \x12\x04\xe4\x05$%\n\r\n\x05\x04\x0c\x02\x08\x04\x12\x04\xe8\x05\x02\n\n\ + \x8b\x01\n\x04\x04\x0c\x02\x08\x12\x04\xe8\x05\x029\x1a}\x20Deprecated:\ + \x20Use\x20`typed_enclosing_range`\x20instead.\n\n\x20Uses\x20the\x20sam\ + e\x20`repeated\x20int32`\x20encoding\x20as\x20the\x20deprecated\x20`rang\ + e`\x20field.\n\n\r\n\x05\x04\x0c\x02\x08\x05\x12\x04\xe8\x05\x0b\x10\n\r\ + \n\x05\x04\x0c\x02\x08\x01\x12\x04\xe8\x05\x11\x20\n\r\n\x05\x04\x0c\x02\ + \x08\x03\x12\x04\xe8\x05#$\n\r\n\x05\x04\x0c\x02\x08\x08\x12\x04\xe8\x05\ + %8\n\x0e\n\x06\x04\x0c\x02\x08\x08\x03\x12\x04\xe8\x05&7\n\xdc\x0e\n\x04\ + \x04\x0c\x08\x01\x12\x06\x9f\x06\x02\xa4\x06\x03\x1a\xcb\x0e\x20(optiona\ + l)\x20Half-open\x20source\x20range\x20of\x20the\x20nearest\x20non-trivia\ + l\x20enclosing\x20AST\n\x20node.\x20This\x20range\x20must\x20enclose\x20\ + the\x20occurrence\x20range.\x20Example\x20applications:\n\n\x20-\x20Call\ + \x20hierarchies:\x20to\x20determine\x20what\x20symbols\x20are\x20referen\ + ced\x20from\x20the\x20body\n\x20\x20\x20of\x20a\x20function\n\x20-\x20Sy\ + mbol\x20outline:\x20to\x20display\x20breadcrumbs\x20from\x20the\x20curso\ + r\x20position\x20to\x20the\n\x20\x20\x20root\x20of\x20the\x20file\n\x20-\ + \x20Expand\x20selection:\x20to\x20select\x20the\x20nearest\x20enclosing\ + \x20AST\x20node.\n\x20-\x20Highlight\x20range:\x20to\x20indicate\x20the\ + \x20AST\x20expression\x20that\x20is\x20associated\x20with\x20a\n\x20\x20\ + \x20hover\x20popover\n\n\x20For\x20definition\x20occurrences,\x20the\x20\ + enclosing\x20range\x20should\x20indicate\x20the\n\x20start/end\x20bounds\ + \x20of\x20the\x20entire\x20definition\x20AST\x20node,\x20including\n\x20\ + documentation.\n\x20```\n\x20const\x20n\x20=\x203\n\x20\x20\x20\x20\x20\ + \x20\x20^\x20range\n\x20^^^^^^^^^^^\x20enclosing_range\n\n\x20/**\x20Par\ + ses\x20the\x20string\x20into\x20something\x20*/\n\x20^\x20enclosing_rang\ + e\x20start\x20--------------------------------------|\n\x20function\x20p\ + arse(input\x20string):\x20string\x20{\x20\x20\x20\x20\x20\x20\x20\x20\ + \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20|\n\x20\ + \x20\x20\x20\x20\x20\x20\x20\x20\x20^^^^^\x20range\x20\x20\x20\x20\x20\ + \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ + \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ + \x20|\n\x20\x20\x20\x20\x20return\x20input.slice(n)\x20\x20\x20\x20\x20\ + \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ + \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20|\n\x20}\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ - \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20|\n\x20\x20\x20\x20\x20r\ - eturn\x20input.slice(n)\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ - \x20\x20\x20\x20\x20\x20\x20|\n\x20}\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ + \x20\x20\x20\x20\x20|\n\x20^\x20enclosing_range\x20end\x20<-------------\ + --------------------------|\n\x20```\n\n\x20Any\x20attributes/decorators\ + /attached\x20macros\x20should\x20also\x20be\x20part\x20of\x20the\n\x20en\ + closing\x20range.\n\n\x20```python\n\x20@cache\n\x20^\x20enclosing_range\ + \x20start---------------------|\n\x20def\x20factorial(n):\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ - \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20|\n\x20^\ - \x20enclosing_range\x20end\x20<---------------------------------------|\ - \n\x20```\n\n\x20Any\x20attributes/decorators/attached\x20macros\x20shou\ - ld\x20also\x20be\x20part\x20of\x20the\n\x20enclosing\x20range.\n\n\x20``\ - `python\n\x20@cache\n\x20^\x20enclosing_range\x20start------------------\ - ---|\n\x20def\x20factorial(n):\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ - \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20|\n\ - \x20\x20\x20\x20\x20return\x20n\x20*\x20factorial(n-1)\x20if\x20n\x20els\ - e\x201\x20\x20\x20|\n\x20<\x20enclosing_range\x20end--------------------\ - ---|\n\n\x20```\n\n\x20For\x20reference\x20occurrences,\x20the\x20enclos\ - ing\x20range\x20should\x20indicate\x20the\x20start/end\n\x20bounds\x20of\ - \x20the\x20parent\x20expression.\n\x20```\n\x20const\x20a\x20=\x20a.b\n\ - \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20^\x20range\n\x20\x20\ - \x20\x20\x20\x20\x20\x20\x20\x20\x20^^^\x20enclosing_range\n\x20const\ - \x20b\x20=\x20a.b(41).f(42).g(43)\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\ - \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20^\x20range\n\x20\x20\x20\x20\x20\ - \x20\x20\x20\x20\x20\x20^^^^^^^^^^^^^\x20enclosing_range\n\x20```\n\n\r\ - \n\x05\x04\x0c\x08\x01\x01\x12\x04\xfd\x05\x08\x1d\n\r\n\x05\x04\x0c\x02\ - \t\x06\x12\x04\xfe\x05\x04\x13\n\x0c\n\x04\x04\x0c\x02\t\x12\x04\xfe\x05\ - \x045\n\r\n\x05\x04\x0c\x02\t\x01\x12\x04\xfe\x05\x14/\n\r\n\x05\x04\x0c\ - \x02\t\x03\x12\x04\xfe\x0524\n\r\n\x05\x04\x0c\x02\n\x06\x12\x04\xff\x05\ - \x04\x12\n\x0c\n\x04\x04\x0c\x02\n\x12\x04\xff\x05\x043\n\r\n\x05\x04\ - \x0c\x02\n\x01\x12\x04\xff\x05\x13-\n\r\n\x05\x04\x0c\x02\n\x03\x12\x04\ - \xff\x0502\nw\n\x02\x04\r\x12\x06\x85\x06\0\x90\x06\x01\x1ai\x20Represen\ - ts\x20a\x20diagnostic,\x20such\x20as\x20a\x20compiler\x20error\x20or\x20\ - warning,\x20which\x20should\x20be\n\x20reported\x20for\x20a\x20document.\ - \n\n\x0b\n\x03\x04\r\x01\x12\x04\x85\x06\x08\x12\n\r\n\x05\x04\r\x02\0\ - \x06\x12\x04\x87\x06\x02\n\nW\n\x04\x04\r\x02\0\x12\x04\x87\x06\x02\x18\ - \x1aI\x20Should\x20this\x20diagnostic\x20be\x20reported\x20as\x20an\x20e\ - rror,\x20warning,\x20info,\x20or\x20hint?\n\n\r\n\x05\x04\r\x02\0\x01\ - \x12\x04\x87\x06\x0b\x13\n\r\n\x05\x04\r\x02\0\x03\x12\x04\x87\x06\x16\ - \x17\n\r\n\x05\x04\r\x02\x01\x05\x12\x04\x89\x06\x02\x08\n]\n\x04\x04\r\ - \x02\x01\x12\x04\x89\x06\x02\x12\x1aO\x20(optional)\x20Code\x20of\x20thi\ - s\x20diagnostic,\x20which\x20might\x20appear\x20in\x20the\x20user\x20int\ - erface.\n\n\r\n\x05\x04\r\x02\x01\x01\x12\x04\x89\x06\t\r\n\r\n\x05\x04\ - \r\x02\x01\x03\x12\x04\x89\x06\x10\x11\n\r\n\x05\x04\r\x02\x02\x05\x12\ - \x04\x8b\x06\x02\x08\n+\n\x04\x04\r\x02\x02\x12\x04\x8b\x06\x02\x15\x1a\ - \x1d\x20Message\x20of\x20this\x20diagnostic.\n\n\r\n\x05\x04\r\x02\x02\ - \x01\x12\x04\x8b\x06\t\x10\n\r\n\x05\x04\r\x02\x02\x03\x12\x04\x8b\x06\ - \x13\x14\n\r\n\x05\x04\r\x02\x03\x05\x12\x04\x8e\x06\x02\x08\n~\n\x04\ - \x04\r\x02\x03\x12\x04\x8e\x06\x02\x14\x1ap\x20(optional)\x20Human-reada\ - ble\x20string\x20describing\x20the\x20source\x20of\x20this\x20diagnostic\ - ,\x20e.g.\n\x20'typescript'\x20or\x20'super\x20lint'.\n\n\r\n\x05\x04\r\ - \x02\x03\x01\x12\x04\x8e\x06\t\x0f\n\r\n\x05\x04\r\x02\x03\x03\x12\x04\ - \x8e\x06\x12\x13\n\r\n\x05\x04\r\x02\x04\x04\x12\x04\x8f\x06\x02\n\n\x0c\ - \n\x04\x04\r\x02\x04\x12\x04\x8f\x06\x02\"\n\r\n\x05\x04\r\x02\x04\x06\ - \x12\x04\x8f\x06\x0b\x18\n\r\n\x05\x04\r\x02\x04\x01\x12\x04\x8f\x06\x19\ - \x1d\n\r\n\x05\x04\r\x02\x04\x03\x12\x04\x8f\x06\x20!\n\x0c\n\x02\x05\ - \x05\x12\x06\x92\x06\0\x98\x06\x01\n\x0b\n\x03\x05\x05\x01\x12\x04\x92\ - \x06\x05\r\n\r\n\x05\x05\x05\x02\0\x01\x12\x04\x93\x06\x02\x15\n\x0c\n\ - \x04\x05\x05\x02\0\x12\x04\x93\x06\x02\x1a\n\r\n\x05\x05\x05\x02\0\x02\ - \x12\x04\x93\x06\x18\x19\n\r\n\x05\x05\x05\x02\x01\x01\x12\x04\x94\x06\ - \x02\x07\n\x0c\n\x04\x05\x05\x02\x01\x12\x04\x94\x06\x02\x0c\n\r\n\x05\ - \x05\x05\x02\x01\x02\x12\x04\x94\x06\n\x0b\n\r\n\x05\x05\x05\x02\x02\x01\ - \x12\x04\x95\x06\x02\t\n\x0c\n\x04\x05\x05\x02\x02\x12\x04\x95\x06\x02\ - \x0e\n\r\n\x05\x05\x05\x02\x02\x02\x12\x04\x95\x06\x0c\r\n\r\n\x05\x05\ - \x05\x02\x03\x01\x12\x04\x96\x06\x02\r\n\x0c\n\x04\x05\x05\x02\x03\x12\ - \x04\x96\x06\x02\x12\n\r\n\x05\x05\x05\x02\x03\x02\x12\x04\x96\x06\x10\ - \x11\n\r\n\x05\x05\x05\x02\x04\x01\x12\x04\x97\x06\x02\x06\n\x0c\n\x04\ - \x05\x05\x02\x04\x12\x04\x97\x06\x02\x0b\n\r\n\x05\x05\x05\x02\x04\x02\ - \x12\x04\x97\x06\t\n\n\x0c\n\x02\x05\x06\x12\x06\x9a\x06\0\x9e\x06\x01\n\ - \x0b\n\x03\x05\x06\x01\x12\x04\x9a\x06\x05\x12\n\r\n\x05\x05\x06\x02\0\ - \x01\x12\x04\x9b\x06\x02\x1a\n\x0c\n\x04\x05\x06\x02\0\x12\x04\x9b\x06\ - \x02\x1f\n\r\n\x05\x05\x06\x02\0\x02\x12\x04\x9b\x06\x1d\x1e\n\r\n\x05\ - \x05\x06\x02\x01\x01\x12\x04\x9c\x06\x02\r\n\x0c\n\x04\x05\x06\x02\x01\ - \x12\x04\x9c\x06\x02\x12\n\r\n\x05\x05\x06\x02\x01\x02\x12\x04\x9c\x06\ - \x10\x11\n\r\n\x05\x05\x06\x02\x02\x01\x12\x04\x9d\x06\x02\x0c\n\x0c\n\ - \x04\x05\x06\x02\x02\x12\x04\x9d\x06\x02\x11\n\r\n\x05\x05\x06\x02\x02\ - \x02\x12\x04\x9d\x06\x0f\x10\n\xd0\x03\n\x02\x05\x07\x12\x06\xa6\x06\0\ - \x9c\x07\x01\x1a\xc1\x03\x20Language\x20standardises\x20names\x20of\x20c\ - ommon\x20programming\x20languages\x20that\x20can\x20be\x20used\n\x20for\ - \x20the\x20`Document.language`\x20field.\x20The\x20primary\x20purpose\ - \x20of\x20this\x20enum\x20is\x20to\n\x20prevent\x20a\x20situation\x20whe\ - re\x20we\x20have\x20a\x20single\x20programming\x20language\x20ends\x20up\ - \x20with\n\x20multiple\x20string\x20representations.\x20For\x20example,\ - \x20the\x20C++\x20language\x20uses\x20the\x20name\n\x20\"CPP\"\x20in\x20\ - this\x20enum\x20and\x20other\x20names\x20such\x20as\x20\"cpp\"\x20are\ - \x20incompatible.\n\x20Feel\x20free\x20to\x20send\x20a\x20pull-request\ - \x20to\x20add\x20missing\x20programming\x20languages.\n\n\x0b\n\x03\x05\ - \x07\x01\x12\x04\xa6\x06\x05\r\n\r\n\x05\x05\x07\x02\0\x01\x12\x04\xa7\ - \x06\x02\x15\n\x0c\n\x04\x05\x07\x02\0\x12\x04\xa7\x06\x02\x1a\n\r\n\x05\ - \x05\x07\x02\0\x02\x12\x04\xa7\x06\x18\x19\n\r\n\x05\x05\x07\x02\x01\x01\ - \x12\x04\xa8\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\x01\x12\x04\xa8\x06\x02\ - \x0c\n\r\n\x05\x05\x07\x02\x01\x02\x12\x04\xa8\x06\t\x0b\n\r\n\x05\x05\ - \x07\x02\x02\x01\x12\x04\xa9\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\x02\x12\ - \x04\xa9\x06\x02\x0c\n\r\n\x05\x05\x07\x02\x02\x02\x12\x04\xa9\x06\t\x0b\ - \n\r\n\x05\x05\x07\x02\x03\x01\x12\x04\xaa\x06\x02\x05\n\x0c\n\x04\x05\ - \x07\x02\x03\x12\x04\xaa\x06\x02\x0b\n\r\n\x05\x05\x07\x02\x03\x02\x12\ - \x04\xaa\x06\x08\n\n\r\n\x05\x05\x07\x02\x04\x01\x12\x04\xab\x06\x02\x05\ - \n\x0c\n\x04\x05\x07\x02\x04\x12\x04\xab\x06\x02\x0b\n\r\n\x05\x05\x07\ - \x02\x04\x02\x12\x04\xab\x06\x08\n\n\r\n\x05\x05\x07\x02\x05\x01\x12\x04\ - \xac\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\x05\x12\x04\xac\x06\x02\x0c\n\r\ - \n\x05\x05\x07\x02\x05\x02\x12\x04\xac\x06\t\x0b\n\r\n\x05\x05\x07\x02\ - \x06\x01\x12\x04\xad\x06\x02\n\n\x0c\n\x04\x05\x07\x02\x06\x12\x04\xad\ - \x06\x02\x10\n\r\n\x05\x05\x07\x02\x06\x02\x12\x04\xad\x06\r\x0f\n\r\n\ - \x05\x05\x07\x02\x07\x01\x12\x04\xae\x06\x02\n\n\x0c\n\x04\x05\x07\x02\ - \x07\x12\x04\xae\x06\x02\x10\n\r\n\x05\x05\x07\x02\x07\x02\x12\x04\xae\ - \x06\r\x0f\n\r\n\x05\x05\x07\x02\x08\x01\x12\x04\xaf\x06\x02\x05\n\x0c\n\ - \x04\x05\x07\x02\x08\x12\x04\xaf\x06\x02\x0b\n\r\n\x05\x05\x07\x02\x08\ - \x02\x12\x04\xaf\x06\x08\n\n\r\n\x05\x05\x07\x02\t\x01\x12\x04\xb0\x06\ - \x02\x05\n\x0c\n\x04\x05\x07\x02\t\x12\x04\xb0\x06\x02\x0b\n\r\n\x05\x05\ - \x07\x02\t\x02\x12\x04\xb0\x06\x08\n\n\r\n\x05\x05\x07\x02\n\x01\x12\x04\ - \xb1\x06\x02\x08\n\x0c\n\x04\x05\x07\x02\n\x12\x04\xb1\x06\x02\x0e\n\r\n\ - \x05\x05\x07\x02\n\x02\x12\x04\xb1\x06\x0b\r\n\r\n\x05\x05\x07\x02\x0b\ - \x01\x12\x04\xb2\x06\x02\x03\n\x0c\n\x04\x05\x07\x02\x0b\x12\x04\xb2\x06\ - \x02\t\n\r\n\x05\x05\x07\x02\x0b\x02\x12\x04\xb2\x06\x06\x08\n\r\n\x05\ - \x05\x07\x02\x0c\x01\x12\x04\xb3\x06\x02\x07\n\x0c\n\x04\x05\x07\x02\x0c\ - \x12\x04\xb3\x06\x02\r\n\r\n\x05\x05\x07\x02\x0c\x02\x12\x04\xb3\x06\n\ - \x0c\n\r\n\x05\x05\x07\x02\r\x01\x12\x04\xb4\x06\x02\x05\nG\n\x04\x05\ - \x07\x02\r\x12\x04\xb4\x06\x02\x0b\"9\x20C++\x20(the\x20name\x20\"CPP\"\ + \x20\x20\x20\x20\x20\x20|\n\x20\x20\x20\x20\x20return\x20n\x20*\x20facto\ + rial(n-1)\x20if\x20n\x20else\x201\x20\x20\x20|\n\x20<\x20enclosing_range\ + \x20end-----------------------|\n\n\x20```\n\n\x20For\x20reference\x20oc\ + currences,\x20the\x20enclosing\x20range\x20should\x20indicate\x20the\x20\ + start/end\n\x20bounds\x20of\x20the\x20parent\x20expression.\n\x20```\n\ + \x20const\x20a\x20=\x20a.b\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ + \x20\x20^\x20range\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20^^^\x20e\ + nclosing_range\n\x20const\x20b\x20=\x20a.b(41).f(42).g(43)\n\x20\x20\x20\ + \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20^\x20ran\ + ge\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20^^^^^^^^^^^^^\x20enclosi\ + ng_range\n\x20```\n\n\x20When\x20both\x20`typed_enclosing_range`\x20and\ + \x20the\x20deprecated\x20`enclosing_range`\n\x20field\x20are\x20set,\x20\ + `typed_enclosing_range`\x20takes\x20precedence.\n\n\r\n\x05\x04\x0c\x08\ + \x01\x01\x12\x04\x9f\x06\x08\x1d\n\r\n\x05\x04\x0c\x02\t\x06\x12\x04\xa1\ + \x06\x04\x13\n7\n\x04\x04\x0c\x02\t\x12\x04\xa1\x06\x045\x1a)\x20Enclosi\ + ng\x20range\x20spanning\x20a\x20single\x20line.\n\n\r\n\x05\x04\x0c\x02\ + \t\x01\x12\x04\xa1\x06\x14/\n\r\n\x05\x04\x0c\x02\t\x03\x12\x04\xa1\x062\ + 4\n\r\n\x05\x04\x0c\x02\n\x06\x12\x04\xa3\x06\x04\x12\n8\n\x04\x04\x0c\ + \x02\n\x12\x04\xa3\x06\x043\x1a*\x20Enclosing\x20range\x20spanning\x20mu\ + ltiple\x20lines.\n\n\r\n\x05\x04\x0c\x02\n\x01\x12\x04\xa3\x06\x13-\n\r\ + \n\x05\x04\x0c\x02\n\x03\x12\x04\xa3\x0602\nw\n\x02\x04\r\x12\x06\xa9\ + \x06\0\xb4\x06\x01\x1ai\x20Represents\x20a\x20diagnostic,\x20such\x20as\ + \x20a\x20compiler\x20error\x20or\x20warning,\x20which\x20should\x20be\n\ + \x20reported\x20for\x20a\x20document.\n\n\x0b\n\x03\x04\r\x01\x12\x04\ + \xa9\x06\x08\x12\n\r\n\x05\x04\r\x02\0\x06\x12\x04\xab\x06\x02\n\nW\n\ + \x04\x04\r\x02\0\x12\x04\xab\x06\x02\x18\x1aI\x20Should\x20this\x20diagn\ + ostic\x20be\x20reported\x20as\x20an\x20error,\x20warning,\x20info,\x20or\ + \x20hint?\n\n\r\n\x05\x04\r\x02\0\x01\x12\x04\xab\x06\x0b\x13\n\r\n\x05\ + \x04\r\x02\0\x03\x12\x04\xab\x06\x16\x17\n\r\n\x05\x04\r\x02\x01\x05\x12\ + \x04\xad\x06\x02\x08\n]\n\x04\x04\r\x02\x01\x12\x04\xad\x06\x02\x12\x1aO\ + \x20(optional)\x20Code\x20of\x20this\x20diagnostic,\x20which\x20might\ + \x20appear\x20in\x20the\x20user\x20interface.\n\n\r\n\x05\x04\r\x02\x01\ + \x01\x12\x04\xad\x06\t\r\n\r\n\x05\x04\r\x02\x01\x03\x12\x04\xad\x06\x10\ + \x11\n\r\n\x05\x04\r\x02\x02\x05\x12\x04\xaf\x06\x02\x08\n+\n\x04\x04\r\ + \x02\x02\x12\x04\xaf\x06\x02\x15\x1a\x1d\x20Message\x20of\x20this\x20dia\ + gnostic.\n\n\r\n\x05\x04\r\x02\x02\x01\x12\x04\xaf\x06\t\x10\n\r\n\x05\ + \x04\r\x02\x02\x03\x12\x04\xaf\x06\x13\x14\n\r\n\x05\x04\r\x02\x03\x05\ + \x12\x04\xb2\x06\x02\x08\n~\n\x04\x04\r\x02\x03\x12\x04\xb2\x06\x02\x14\ + \x1ap\x20(optional)\x20Human-readable\x20string\x20describing\x20the\x20\ + source\x20of\x20this\x20diagnostic,\x20e.g.\n\x20'typescript'\x20or\x20'\ + super\x20lint'.\n\n\r\n\x05\x04\r\x02\x03\x01\x12\x04\xb2\x06\t\x0f\n\r\ + \n\x05\x04\r\x02\x03\x03\x12\x04\xb2\x06\x12\x13\n\r\n\x05\x04\r\x02\x04\ + \x04\x12\x04\xb3\x06\x02\n\n\x0c\n\x04\x04\r\x02\x04\x12\x04\xb3\x06\x02\ + \"\n\r\n\x05\x04\r\x02\x04\x06\x12\x04\xb3\x06\x0b\x18\n\r\n\x05\x04\r\ + \x02\x04\x01\x12\x04\xb3\x06\x19\x1d\n\r\n\x05\x04\r\x02\x04\x03\x12\x04\ + \xb3\x06\x20!\n\x0c\n\x02\x05\x05\x12\x06\xb6\x06\0\xbc\x06\x01\n\x0b\n\ + \x03\x05\x05\x01\x12\x04\xb6\x06\x05\r\n\r\n\x05\x05\x05\x02\0\x01\x12\ + \x04\xb7\x06\x02\x15\n\x0c\n\x04\x05\x05\x02\0\x12\x04\xb7\x06\x02\x1a\n\ + \r\n\x05\x05\x05\x02\0\x02\x12\x04\xb7\x06\x18\x19\n\r\n\x05\x05\x05\x02\ + \x01\x01\x12\x04\xb8\x06\x02\x07\n\x0c\n\x04\x05\x05\x02\x01\x12\x04\xb8\ + \x06\x02\x0c\n\r\n\x05\x05\x05\x02\x01\x02\x12\x04\xb8\x06\n\x0b\n\r\n\ + \x05\x05\x05\x02\x02\x01\x12\x04\xb9\x06\x02\t\n\x0c\n\x04\x05\x05\x02\ + \x02\x12\x04\xb9\x06\x02\x0e\n\r\n\x05\x05\x05\x02\x02\x02\x12\x04\xb9\ + \x06\x0c\r\n\r\n\x05\x05\x05\x02\x03\x01\x12\x04\xba\x06\x02\r\n\x0c\n\ + \x04\x05\x05\x02\x03\x12\x04\xba\x06\x02\x12\n\r\n\x05\x05\x05\x02\x03\ + \x02\x12\x04\xba\x06\x10\x11\n\r\n\x05\x05\x05\x02\x04\x01\x12\x04\xbb\ + \x06\x02\x06\n\x0c\n\x04\x05\x05\x02\x04\x12\x04\xbb\x06\x02\x0b\n\r\n\ + \x05\x05\x05\x02\x04\x02\x12\x04\xbb\x06\t\n\n\x0c\n\x02\x05\x06\x12\x06\ + \xbe\x06\0\xc2\x06\x01\n\x0b\n\x03\x05\x06\x01\x12\x04\xbe\x06\x05\x12\n\ + \r\n\x05\x05\x06\x02\0\x01\x12\x04\xbf\x06\x02\x1a\n\x0c\n\x04\x05\x06\ + \x02\0\x12\x04\xbf\x06\x02\x1f\n\r\n\x05\x05\x06\x02\0\x02\x12\x04\xbf\ + \x06\x1d\x1e\n\r\n\x05\x05\x06\x02\x01\x01\x12\x04\xc0\x06\x02\r\n\x0c\n\ + \x04\x05\x06\x02\x01\x12\x04\xc0\x06\x02\x12\n\r\n\x05\x05\x06\x02\x01\ + \x02\x12\x04\xc0\x06\x10\x11\n\r\n\x05\x05\x06\x02\x02\x01\x12\x04\xc1\ + \x06\x02\x0c\n\x0c\n\x04\x05\x06\x02\x02\x12\x04\xc1\x06\x02\x11\n\r\n\ + \x05\x05\x06\x02\x02\x02\x12\x04\xc1\x06\x0f\x10\n\xd0\x03\n\x02\x05\x07\ + \x12\x06\xca\x06\0\xc0\x07\x01\x1a\xc1\x03\x20Language\x20standardises\ + \x20names\x20of\x20common\x20programming\x20languages\x20that\x20can\x20\ + be\x20used\n\x20for\x20the\x20`Document.language`\x20field.\x20The\x20pr\ + imary\x20purpose\x20of\x20this\x20enum\x20is\x20to\n\x20prevent\x20a\x20\ + situation\x20where\x20we\x20have\x20a\x20single\x20programming\x20langua\ + ge\x20ends\x20up\x20with\n\x20multiple\x20string\x20representations.\x20\ + For\x20example,\x20the\x20C++\x20language\x20uses\x20the\x20name\n\x20\"\ + CPP\"\x20in\x20this\x20enum\x20and\x20other\x20names\x20such\x20as\x20\"\ + cpp\"\x20are\x20incompatible.\n\x20Feel\x20free\x20to\x20send\x20a\x20pu\ + ll-request\x20to\x20add\x20missing\x20programming\x20languages.\n\n\x0b\ + \n\x03\x05\x07\x01\x12\x04\xca\x06\x05\r\n\r\n\x05\x05\x07\x02\0\x01\x12\ + \x04\xcb\x06\x02\x15\n\x0c\n\x04\x05\x07\x02\0\x12\x04\xcb\x06\x02\x1a\n\ + \r\n\x05\x05\x07\x02\0\x02\x12\x04\xcb\x06\x18\x19\n\r\n\x05\x05\x07\x02\ + \x01\x01\x12\x04\xcc\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\x01\x12\x04\xcc\ + \x06\x02\x0c\n\r\n\x05\x05\x07\x02\x01\x02\x12\x04\xcc\x06\t\x0b\n\r\n\ + \x05\x05\x07\x02\x02\x01\x12\x04\xcd\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\ + \x02\x12\x04\xcd\x06\x02\x0c\n\r\n\x05\x05\x07\x02\x02\x02\x12\x04\xcd\ + \x06\t\x0b\n\r\n\x05\x05\x07\x02\x03\x01\x12\x04\xce\x06\x02\x05\n\x0c\n\ + \x04\x05\x07\x02\x03\x12\x04\xce\x06\x02\x0b\n\r\n\x05\x05\x07\x02\x03\ + \x02\x12\x04\xce\x06\x08\n\n\r\n\x05\x05\x07\x02\x04\x01\x12\x04\xcf\x06\ + \x02\x05\n\x0c\n\x04\x05\x07\x02\x04\x12\x04\xcf\x06\x02\x0b\n\r\n\x05\ + \x05\x07\x02\x04\x02\x12\x04\xcf\x06\x08\n\n\r\n\x05\x05\x07\x02\x05\x01\ + \x12\x04\xd0\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\x05\x12\x04\xd0\x06\x02\ + \x0c\n\r\n\x05\x05\x07\x02\x05\x02\x12\x04\xd0\x06\t\x0b\n\r\n\x05\x05\ + \x07\x02\x06\x01\x12\x04\xd1\x06\x02\n\n\x0c\n\x04\x05\x07\x02\x06\x12\ + \x04\xd1\x06\x02\x10\n\r\n\x05\x05\x07\x02\x06\x02\x12\x04\xd1\x06\r\x0f\ + \n\r\n\x05\x05\x07\x02\x07\x01\x12\x04\xd2\x06\x02\n\n\x0c\n\x04\x05\x07\ + \x02\x07\x12\x04\xd2\x06\x02\x10\n\r\n\x05\x05\x07\x02\x07\x02\x12\x04\ + \xd2\x06\r\x0f\n\r\n\x05\x05\x07\x02\x08\x01\x12\x04\xd3\x06\x02\x05\n\ + \x0c\n\x04\x05\x07\x02\x08\x12\x04\xd3\x06\x02\x0b\n\r\n\x05\x05\x07\x02\ + \x08\x02\x12\x04\xd3\x06\x08\n\n\r\n\x05\x05\x07\x02\t\x01\x12\x04\xd4\ + \x06\x02\x05\n\x0c\n\x04\x05\x07\x02\t\x12\x04\xd4\x06\x02\x0b\n\r\n\x05\ + \x05\x07\x02\t\x02\x12\x04\xd4\x06\x08\n\n\r\n\x05\x05\x07\x02\n\x01\x12\ + \x04\xd5\x06\x02\x08\n\x0c\n\x04\x05\x07\x02\n\x12\x04\xd5\x06\x02\x0e\n\ + \r\n\x05\x05\x07\x02\n\x02\x12\x04\xd5\x06\x0b\r\n\r\n\x05\x05\x07\x02\ + \x0b\x01\x12\x04\xd6\x06\x02\x03\n\x0c\n\x04\x05\x07\x02\x0b\x12\x04\xd6\ + \x06\x02\t\n\r\n\x05\x05\x07\x02\x0b\x02\x12\x04\xd6\x06\x06\x08\n\r\n\ + \x05\x05\x07\x02\x0c\x01\x12\x04\xd7\x06\x02\x07\n\x0c\n\x04\x05\x07\x02\ + \x0c\x12\x04\xd7\x06\x02\r\n\r\n\x05\x05\x07\x02\x0c\x02\x12\x04\xd7\x06\ + \n\x0c\n\r\n\x05\x05\x07\x02\r\x01\x12\x04\xd8\x06\x02\x05\nG\n\x04\x05\ + \x07\x02\r\x12\x04\xd8\x06\x02\x0b\"9\x20C++\x20(the\x20name\x20\"CPP\"\ \x20was\x20chosen\x20for\x20consistency\x20with\x20LSP)\n\r\n\x05\x05\ - \x07\x02\r\x02\x12\x04\xb4\x06\x08\n\n\r\n\x05\x05\x07\x02\x0e\x01\x12\ - \x04\xb5\x06\x02\x05\n\x0c\n\x04\x05\x07\x02\x0e\x12\x04\xb5\x06\x02\x0b\ - \n\r\n\x05\x05\x07\x02\x0e\x02\x12\x04\xb5\x06\x08\n\n\r\n\x05\x05\x07\ - \x02\x0f\x01\x12\x04\xb6\x06\x02\x08\n\x0c\n\x04\x05\x07\x02\x0f\x12\x04\ - \xb6\x06\x02\r\n\r\n\x05\x05\x07\x02\x0f\x02\x12\x04\xb6\x06\x0b\x0c\n\r\ - \n\x05\x05\x07\x02\x10\x01\x12\x04\xb7\x06\x02\t\n\x0c\n\x04\x05\x07\x02\ - \x10\x12\x04\xb7\x06\x02\x0e\n\r\n\x05\x05\x07\x02\x10\x02\x12\x04\xb7\ - \x06\x0c\r\n\r\n\x05\x05\x07\x02\x11\x01\x12\x04\xb8\x06\x02\x0e\n\x0c\n\ - \x04\x05\x07\x02\x11\x12\x04\xb8\x06\x02\x14\n\r\n\x05\x05\x07\x02\x11\ - \x02\x12\x04\xb8\x06\x11\x13\n\r\n\x05\x05\x07\x02\x12\x01\x12\x04\xb9\ - \x06\x02\x0c\n\x0c\n\x04\x05\x07\x02\x12\x12\x04\xb9\x06\x02\x11\n\r\n\ - \x05\x05\x07\x02\x12\x02\x12\x04\xb9\x06\x0f\x10\n\r\n\x05\x05\x07\x02\ - \x13\x01\x12\x04\xba\x06\x02\x05\n\x0c\n\x04\x05\x07\x02\x13\x12\x04\xba\ - \x06\x02\x0b\n\r\n\x05\x05\x07\x02\x13\x02\x12\x04\xba\x06\x08\n\n\r\n\ - \x05\x05\x07\x02\x14\x01\x12\x04\xbb\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\ - \x14\x12\x04\xbb\x06\x02\x0c\n\r\n\x05\x05\x07\x02\x14\x02\x12\x04\xbb\ - \x06\t\x0b\n\r\n\x05\x05\x07\x02\x15\x01\x12\x04\xbc\x06\x02\x06\n\x0c\n\ - \x04\x05\x07\x02\x15\x12\x04\xbc\x06\x02\x0b\n\r\n\x05\x05\x07\x02\x15\ - \x02\x12\x04\xbc\x06\t\n\n\r\n\x05\x05\x07\x02\x16\x01\x12\x04\xbd\x06\ - \x02\x08\n\x0c\n\x04\x05\x07\x02\x16\x12\x04\xbd\x06\x02\x0e\n\r\n\x05\ - \x05\x07\x02\x16\x02\x12\x04\xbd\x06\x0b\r\n\r\n\x05\x05\x07\x02\x17\x01\ - \x12\x04\xbe\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\x17\x12\x04\xbe\x06\x02\ - \x0c\n\r\n\x05\x05\x07\x02\x17\x02\x12\x04\xbe\x06\t\x0b\n\r\n\x05\x05\ - \x07\x02\x18\x01\x12\x04\xbf\x06\x02\x0c\n\x0c\n\x04\x05\x07\x02\x18\x12\ - \x04\xbf\x06\x02\x12\n\r\n\x05\x05\x07\x02\x18\x02\x12\x04\xbf\x06\x0f\ - \x11\n\r\n\x05\x05\x07\x02\x19\x01\x12\x04\xc0\x06\x02\x08\n\x0c\n\x04\ - \x05\x07\x02\x19\x12\x04\xc0\x06\x02\x0e\n\r\n\x05\x05\x07\x02\x19\x02\ - \x12\x04\xc0\x06\x0b\r\n\r\n\x05\x05\x07\x02\x1a\x01\x12\x04\xc1\x06\x02\ - \x08\n\x0c\n\x04\x05\x07\x02\x1a\x12\x04\xc1\x06\x02\x0e\n\r\n\x05\x05\ - \x07\x02\x1a\x02\x12\x04\xc1\x06\x0b\r\n\r\n\x05\x05\x07\x02\x1b\x01\x12\ - \x04\xc2\x06\x02\x08\n\x0c\n\x04\x05\x07\x02\x1b\x12\x04\xc2\x06\x02\x0e\ - \n\r\n\x05\x05\x07\x02\x1b\x02\x12\x04\xc2\x06\x0b\r\n\r\n\x05\x05\x07\ - \x02\x1c\x01\x12\x04\xc3\x06\x02\x08\n\x0c\n\x04\x05\x07\x02\x1c\x12\x04\ - \xc3\x06\x02\x0e\n\r\n\x05\x05\x07\x02\x1c\x02\x12\x04\xc3\x06\x0b\r\n\r\ - \n\x05\x05\x07\x02\x1d\x01\x12\x04\xc4\x06\x02\x06\n\x0c\n\x04\x05\x07\ - \x02\x1d\x12\x04\xc4\x06\x02\x0c\n\r\n\x05\x05\x07\x02\x1d\x02\x12\x04\ - \xc4\x06\t\x0b\n\r\n\x05\x05\x07\x02\x1e\x01\x12\x04\xc5\x06\x02\x06\n\ - \x0c\n\x04\x05\x07\x02\x1e\x12\x04\xc5\x06\x02\x0c\n\r\n\x05\x05\x07\x02\ - \x1e\x02\x12\x04\xc5\x06\t\x0b\n\r\n\x05\x05\x07\x02\x1f\x01\x12\x04\xc6\ - \x06\x02\t\n\x0c\n\x04\x05\x07\x02\x1f\x12\x04\xc6\x06\x02\x0f\n\r\n\x05\ - \x05\x07\x02\x1f\x02\x12\x04\xc6\x06\x0c\x0e\n\r\n\x05\x05\x07\x02\x20\ - \x01\x12\x04\xc7\x06\x02\x0c\n\x0c\n\x04\x05\x07\x02\x20\x12\x04\xc7\x06\ - \x02\x12\n\r\n\x05\x05\x07\x02\x20\x02\x12\x04\xc7\x06\x0f\x11\n\r\n\x05\ - \x05\x07\x02!\x01\x12\x04\xc8\x06\x02\x0c\n\x0c\n\x04\x05\x07\x02!\x12\ - \x04\xc8\x06\x02\x12\n\r\n\x05\x05\x07\x02!\x02\x12\x04\xc8\x06\x0f\x11\ - \n\r\n\x05\x05\x07\x02\"\x01\x12\x04\xc9\x06\x02\x0c\n\x0c\n\x04\x05\x07\ - \x02\"\x12\x04\xc9\x06\x02\x12\n\r\n\x05\x05\x07\x02\"\x02\x12\x04\xc9\ - \x06\x0f\x11\n\r\n\x05\x05\x07\x02#\x01\x12\x04\xca\x06\x02\x04\n\x0c\n\ - \x04\x05\x07\x02#\x12\x04\xca\x06\x02\n\n\r\n\x05\x05\x07\x02#\x02\x12\ - \x04\xca\x06\x07\t\n\r\n\x05\x05\x07\x02$\x01\x12\x04\xcb\x06\x02\t\n\ - \x0c\n\x04\x05\x07\x02$\x12\x04\xcb\x06\x02\x0f\n\r\n\x05\x05\x07\x02$\ - \x02\x12\x04\xcb\x06\x0c\x0e\n\r\n\x05\x05\x07\x02%\x01\x12\x04\xcc\x06\ - \x02\x08\n\x0c\n\x04\x05\x07\x02%\x12\x04\xcc\x06\x02\r\n\r\n\x05\x05\ - \x07\x02%\x02\x12\x04\xcc\x06\x0b\x0c\n\r\n\x05\x05\x07\x02&\x01\x12\x04\ - \xcd\x06\x02\x06\n\x0c\n\x04\x05\x07\x02&\x12\x04\xcd\x06\x02\x0c\n\r\n\ - \x05\x05\x07\x02&\x02\x12\x04\xcd\x06\t\x0b\n\r\n\x05\x05\x07\x02'\x01\ - \x12\x04\xce\x06\x02\x06\n\x0c\n\x04\x05\x07\x02'\x12\x04\xce\x06\x02\ - \x0c\n\r\n\x05\x05\x07\x02'\x02\x12\x04\xce\x06\t\x0b\n\r\n\x05\x05\x07\ - \x02(\x01\x12\x04\xcf\x06\x02\x0c\n\x0c\n\x04\x05\x07\x02(\x12\x04\xcf\ - \x06\x02\x12\n\r\n\x05\x05\x07\x02(\x02\x12\x04\xcf\x06\x0f\x11\n\r\n\ - \x05\x05\x07\x02)\x01\x12\x04\xd0\x06\x02\t\n\x0c\n\x04\x05\x07\x02)\x12\ - \x04\xd0\x06\x02\x0f\n\r\n\x05\x05\x07\x02)\x02\x12\x04\xd0\x06\x0c\x0e\ - \n\r\n\x05\x05\x07\x02*\x01\x12\x04\xd1\x06\x02\x07\n\x0c\n\x04\x05\x07\ - \x02*\x12\x04\xd1\x06\x02\r\n\r\n\x05\x05\x07\x02*\x02\x12\x04\xd1\x06\n\ - \x0c\n\r\n\x05\x05\x07\x02+\x01\x12\x04\xd2\x06\x02\x05\n\x0c\n\x04\x05\ - \x07\x02+\x12\x04\xd2\x06\x02\x0b\n\r\n\x05\x05\x07\x02+\x02\x12\x04\xd2\ - \x06\x08\n\n\r\n\x05\x05\x07\x02,\x01\x12\x04\xd3\x06\x02\x03\n\x0c\n\ - \x04\x05\x07\x02,\x12\x04\xd3\x06\x02\t\n\r\n\x05\x05\x07\x02,\x02\x12\ - \x04\xd3\x06\x06\x08\n\r\n\x05\x05\x07\x02-\x01\x12\x04\xd4\x06\x02\x06\ - \n\x0c\n\x04\x05\x07\x02-\x12\x04\xd4\x06\x02\x0c\n\r\n\x05\x05\x07\x02-\ - \x02\x12\x04\xd4\x06\t\x0b\n\r\n\x05\x05\x07\x02.\x01\x12\x04\xd5\x06\ - \x02\x06\n\x0c\n\x04\x05\x07\x02.\x12\x04\xd5\x06\x02\x0b\n\r\n\x05\x05\ - \x07\x02.\x02\x12\x04\xd5\x06\t\n\n\r\n\x05\x05\x07\x02/\x01\x12\x04\xd6\ - \x06\x02\x0c\n\x0c\n\x04\x05\x07\x02/\x12\x04\xd6\x06\x02\x12\n\r\n\x05\ - \x05\x07\x02/\x02\x12\x04\xd6\x06\x0f\x11\n\r\n\x05\x05\x07\x020\x01\x12\ - \x04\xd7\x06\x02\x11\n\x0c\n\x04\x05\x07\x020\x12\x04\xd7\x06\x02\x17\n\ - \r\n\x05\x05\x07\x020\x02\x12\x04\xd7\x06\x14\x16\n\r\n\x05\x05\x07\x021\ - \x01\x12\x04\xd8\x06\x02\t\n\x0c\n\x04\x05\x07\x021\x12\x04\xd8\x06\x02\ - \x0f\n\r\n\x05\x05\x07\x021\x02\x12\x04\xd8\x06\x0c\x0e\n\r\n\x05\x05\ - \x07\x022\x01\x12\x04\xd9\x06\x02\x07\n\x0c\n\x04\x05\x07\x022\x12\x04\ - \xd9\x06\x02\r\n\r\n\x05\x05\x07\x022\x02\x12\x04\xd9\x06\n\x0c\n\r\n\ - \x05\x05\x07\x023\x01\x12\x04\xda\x06\x02\n\n\x0c\n\x04\x05\x07\x023\x12\ - \x04\xda\x06\x02\x11\n\r\n\x05\x05\x07\x023\x02\x12\x04\xda\x06\r\x10\n\ - \r\n\x05\x05\x07\x024\x01\x12\x04\xdb\x06\x02\x08\n\x0c\n\x04\x05\x07\ - \x024\x12\x04\xdb\x06\x02\r\n\r\n\x05\x05\x07\x024\x02\x12\x04\xdb\x06\ - \x0b\x0c\n\r\n\x05\x05\x07\x025\x01\x12\x04\xdc\x06\x02\x07\n\x0c\n\x04\ - \x05\x07\x025\x12\x04\xdc\x06\x02\r\n\r\n\x05\x05\x07\x025\x02\x12\x04\ - \xdc\x06\n\x0c\n\r\n\x05\x05\x07\x026\x01\x12\x04\xdd\x06\x02\x06\n\x0c\ - \n\x04\x05\x07\x026\x12\x04\xdd\x06\x02\x0c\n\r\n\x05\x05\x07\x026\x02\ - \x12\x04\xdd\x06\t\x0b\n\r\n\x05\x05\x07\x027\x01\x12\x04\xde\x06\x02\ - \x06\n\x0c\n\x04\x05\x07\x027\x12\x04\xde\x06\x02\x0c\n\r\n\x05\x05\x07\ - \x027\x02\x12\x04\xde\x06\t\x0b\n\r\n\x05\x05\x07\x028\x01\x12\x04\xdf\ - \x06\x02\x05\n\x0c\n\x04\x05\x07\x028\x12\x04\xdf\x06\x02\x0b\n\r\n\x05\ - \x05\x07\x028\x02\x12\x04\xdf\x06\x08\n\n\r\n\x05\x05\x07\x029\x01\x12\ - \x04\xe0\x06\x02\x06\n\x0c\n\x04\x05\x07\x029\x12\x04\xe0\x06\x02\r\n\r\ - \n\x05\x05\x07\x029\x02\x12\x04\xe0\x06\t\x0c\n\r\n\x05\x05\x07\x02:\x01\ - \x12\x04\xe1\x06\x02\n\n\x0c\n\x04\x05\x07\x02:\x12\x04\xe1\x06\x02\x10\ - \n\r\n\x05\x05\x07\x02:\x02\x12\x04\xe1\x06\r\x0f\n\r\n\x05\x05\x07\x02;\ - \x01\x12\x04\xe2\x06\x02\n\n\x0c\n\x04\x05\x07\x02;\x12\x04\xe2\x06\x02\ - \x10\n\r\n\x05\x05\x07\x02;\x02\x12\x04\xe2\x06\r\x0f\n\r\n\x05\x05\x07\ - \x02<\x01\x12\x04\xe3\x06\x02\x08\n\x0c\n\x04\x05\x07\x02<\x12\x04\xe3\ - \x06\x02\x0e\n\r\n\x05\x05\x07\x02<\x02\x12\x04\xe3\x06\x0b\r\n\r\n\x05\ - \x05\x07\x02=\x01\x12\x04\xe4\x06\x02\x08\n'\n\x04\x05\x07\x02=\x12\x04\ - \xe4\x06\x02\x0f\"\x19\x20https://nickel-lang.org/\n\r\n\x05\x05\x07\x02\ - =\x02\x12\x04\xe4\x06\x0b\x0e\n\r\n\x05\x05\x07\x02>\x01\x12\x04\xe5\x06\ - \x02\x05\n\x0c\n\x04\x05\x07\x02>\x12\x04\xe5\x06\x02\x0b\n\r\n\x05\x05\ - \x07\x02>\x02\x12\x04\xe5\x06\x08\n\n\r\n\x05\x05\x07\x02?\x01\x12\x04\ - \xe6\x06\x02\x07\n\x0c\n\x04\x05\x07\x02?\x12\x04\xe6\x06\x02\r\n\r\n\ - \x05\x05\x07\x02?\x02\x12\x04\xe6\x06\n\x0c\n\r\n\x05\x05\x07\x02@\x01\ - \x12\x04\xe7\x06\x02\r\n\x0c\n\x04\x05\x07\x02@\x12\x04\xe7\x06\x02\x13\ - \n\r\n\x05\x05\x07\x02@\x02\x12\x04\xe7\x06\x10\x12\n\r\n\x05\x05\x07\ - \x02A\x01\x12\x04\xe8\x06\x02\x0f\n\x0c\n\x04\x05\x07\x02A\x12\x04\xe8\ - \x06\x02\x15\n\r\n\x05\x05\x07\x02A\x02\x12\x04\xe8\x06\x12\x14\n\r\n\ - \x05\x05\x07\x02B\x01\x12\x04\xe9\x06\x02\x08\n\x0c\n\x04\x05\x07\x02B\ - \x12\x04\xe9\x06\x02\x0e\n\r\n\x05\x05\x07\x02B\x02\x12\x04\xe9\x06\x0b\ - \r\n\r\n\x05\x05\x07\x02C\x01\x12\x04\xea\x06\x02\x05\n\x0c\n\x04\x05\ - \x07\x02C\x12\x04\xea\x06\x02\x0b\n\r\n\x05\x05\x07\x02C\x02\x12\x04\xea\ - \x06\x08\n\n\r\n\x05\x05\x07\x02D\x01\x12\x04\xeb\x06\x02\x07\n\x0c\n\ - \x04\x05\x07\x02D\x12\x04\xeb\x06\x02\r\n\r\n\x05\x05\x07\x02D\x02\x12\ - \x04\xeb\x06\n\x0c\n\r\n\x05\x05\x07\x02E\x01\x12\x04\xec\x06\x02\x06\n\ - \x0c\n\x04\x05\x07\x02E\x12\x04\xec\x06\x02\x0c\n\r\n\x05\x05\x07\x02E\ - \x02\x12\x04\xec\x06\t\x0b\n\r\n\x05\x05\x07\x02F\x01\x12\x04\xed\x06\ - \x02\x0c\n\x0c\n\x04\x05\x07\x02F\x12\x04\xed\x06\x02\x12\n\r\n\x05\x05\ - \x07\x02F\x02\x12\x04\xed\x06\x0f\x11\n\r\n\x05\x05\x07\x02G\x01\x12\x04\ - \xee\x06\x02\x08\n\x0c\n\x04\x05\x07\x02G\x12\x04\xee\x06\x02\x0e\n\r\n\ - \x05\x05\x07\x02G\x02\x12\x04\xee\x06\x0b\r\n\r\n\x05\x05\x07\x02H\x01\ - \x12\x04\xef\x06\x02\n\n\x0c\n\x04\x05\x07\x02H\x12\x04\xef\x06\x02\x11\ - \n\r\n\x05\x05\x07\x02H\x02\x12\x04\xef\x06\r\x10\n\r\n\x05\x05\x07\x02I\ - \x01\x12\x04\xf0\x06\x02\x08\n\x0c\n\x04\x05\x07\x02I\x12\x04\xf0\x06\ - \x02\x0e\n\r\n\x05\x05\x07\x02I\x02\x12\x04\xf0\x06\x0b\r\n\r\n\x05\x05\ - \x07\x02J\x01\x12\x04\xf1\x06\x02\x03\n\x0c\n\x04\x05\x07\x02J\x12\x04\ - \xf1\x06\x02\t\n\r\n\x05\x05\x07\x02J\x02\x12\x04\xf1\x06\x06\x08\n\r\n\ - \x05\x05\x07\x02K\x01\x12\x04\xf2\x06\x02\x08\n\x0c\n\x04\x05\x07\x02K\ - \x12\x04\xf2\x06\x02\x0e\n\r\n\x05\x05\x07\x02K\x02\x12\x04\xf2\x06\x0b\ - \r\n\r\n\x05\x05\x07\x02L\x01\x12\x04\xf3\x06\x02\x06\n\x0c\n\x04\x05\ - \x07\x02L\x12\x04\xf3\x06\x02\x0c\n\r\n\x05\x05\x07\x02L\x02\x12\x04\xf3\ - \x06\t\x0b\n\r\n\x05\x05\x07\x02M\x01\x12\x04\xf4\x06\x02\x07\n\x0c\n\ - \x04\x05\x07\x02M\x12\x04\xf4\x06\x02\r\n\r\n\x05\x05\x07\x02M\x02\x12\ - \x04\xf4\x06\n\x0c\n\r\n\x05\x05\x07\x02N\x01\x12\x04\xf5\x06\x02\x07\n1\ - \n\x04\x05\x07\x02N\x12\x04\xf5\x06\x02\x0e\"#\x20Internal\x20language\ - \x20for\x20testing\x20SCIP\n\r\n\x05\x05\x07\x02N\x02\x12\x04\xf5\x06\n\ - \r\n\r\n\x05\x05\x07\x02O\x01\x12\x04\xf6\x06\x02\x06\n\x0c\n\x04\x05\ - \x07\x02O\x12\x04\xf6\x06\x02\x0c\n\r\n\x05\x05\x07\x02O\x02\x12\x04\xf6\ - \x06\t\x0b\n\r\n\x05\x05\x07\x02P\x01\x12\x04\xf7\x06\x02\x06\n\x0c\n\ - \x04\x05\x07\x02P\x12\x04\xf7\x06\x02\x0c\n\r\n\x05\x05\x07\x02P\x02\x12\ - \x04\xf7\x06\t\x0b\n\r\n\x05\x05\x07\x02Q\x01\x12\x04\xf8\x06\x02\x06\n\ - \x0c\n\x04\x05\x07\x02Q\x12\x04\xf8\x06\x02\x0c\n\r\n\x05\x05\x07\x02Q\ - \x02\x12\x04\xf8\x06\t\x0b\n\r\n\x05\x05\x07\x02R\x01\x12\x04\xf9\x06\ - \x02\x05\n\x0c\n\x04\x05\x07\x02R\x12\x04\xf9\x06\x02\x0b\n\r\n\x05\x05\ - \x07\x02R\x02\x12\x04\xf9\x06\x08\n\n\r\n\x05\x05\x07\x02S\x01\x12\x04\ - \xfa\x06\x02\x06\n\x0c\n\x04\x05\x07\x02S\x12\x04\xfa\x06\x02\x0c\n\r\n\ - \x05\x05\x07\x02S\x02\x12\x04\xfa\x06\t\x0b\n\r\n\x05\x05\x07\x02T\x01\ - \x12\x04\xfb\x06\x02\x05\n\x0c\n\x04\x05\x07\x02T\x12\x04\xfb\x06\x02\ - \x0b\n\r\n\x05\x05\x07\x02T\x02\x12\x04\xfb\x06\x08\n\n\r\n\x05\x05\x07\ - \x02U\x01\x12\x04\xfc\x06\x02\x05\n\x0c\n\x04\x05\x07\x02U\x12\x04\xfc\ - \x06\x02\x0b\n\r\n\x05\x05\x07\x02U\x02\x12\x04\xfc\x06\x08\n\n\r\n\x05\ - \x05\x07\x02V\x01\x12\x04\xfd\x06\x02\x06\n\x0c\n\x04\x05\x07\x02V\x12\ - \x04\xfd\x06\x02\x0c\n\r\n\x05\x05\x07\x02V\x02\x12\x04\xfd\x06\t\x0b\n\ - \r\n\x05\x05\x07\x02W\x01\x12\x04\xfe\x06\x02\x07\n\x0c\n\x04\x05\x07\ - \x02W\x12\x04\xfe\x06\x02\x0c\n\r\n\x05\x05\x07\x02W\x02\x12\x04\xfe\x06\ - \n\x0b\n\r\n\x05\x05\x07\x02X\x01\x12\x04\xff\x06\x02\x08\n\x0c\n\x04\ - \x05\x07\x02X\x12\x04\xff\x06\x02\x0e\n\r\n\x05\x05\x07\x02X\x02\x12\x04\ - \xff\x06\x0b\r\n\r\n\x05\x05\x07\x02Y\x01\x12\x04\x80\x07\x02\r\n\x13\n\ - \x04\x05\x07\x02Y\x12\x04\x80\x07\x02\x13\"\x05\x20Bash\n\r\n\x05\x05\ - \x07\x02Y\x02\x12\x04\x80\x07\x10\x12\n\r\n\x05\x05\x07\x02Z\x01\x12\x04\ - \x81\x07\x02\t\n\x0c\n\x04\x05\x07\x02Z\x12\x04\x81\x07\x02\x0f\n\r\n\ - \x05\x05\x07\x02Z\x02\x12\x04\x81\x07\x0c\x0e\n\r\n\x05\x05\x07\x02[\x01\ - \x12\x04\x82\x07\x02\x07\n\x0c\n\x04\x05\x07\x02[\x12\x04\x82\x07\x02\ - \x0e\n\r\n\x05\x05\x07\x02[\x02\x12\x04\x82\x07\n\r\n\r\n\x05\x05\x07\ - \x02\\\x01\x12\x04\x83\x07\x02\n\n\x0c\n\x04\x05\x07\x02\\\x12\x04\x83\ - \x07\x02\x10\n\r\n\x05\x05\x07\x02\\\x02\x12\x04\x83\x07\r\x0f\n\r\n\x05\ - \x05\x07\x02]\x01\x12\x04\x84\x07\x02\x08\n\x0c\n\x04\x05\x07\x02]\x12\ - \x04\x84\x07\x02\x0f\n\r\n\x05\x05\x07\x02]\x02\x12\x04\x84\x07\x0b\x0e\ - \n\r\n\x05\x05\x07\x02^\x01\x12\x04\x85\x07\x02\x07\n\x0c\n\x04\x05\x07\ - \x02^\x12\x04\x85\x07\x02\x0c\n\r\n\x05\x05\x07\x02^\x02\x12\x04\x85\x07\ - \n\x0b\n\r\n\x05\x05\x07\x02_\x01\x12\x04\x86\x07\x02\x05\n\x0c\n\x04\ - \x05\x07\x02_\x12\x04\x86\x07\x02\x0c\n\r\n\x05\x05\x07\x02_\x02\x12\x04\ - \x86\x07\x08\x0b\n\r\n\x05\x05\x07\x02`\x01\x12\x04\x87\x07\x02\x06\n\ - \x0c\n\x04\x05\x07\x02`\x12\x04\x87\x07\x02\x0c\n\r\n\x05\x05\x07\x02`\ - \x02\x12\x04\x87\x07\t\x0b\n\r\n\x05\x05\x07\x02a\x01\x12\x04\x88\x07\ - \x02\x05\n\x0c\n\x04\x05\x07\x02a\x12\x04\x88\x07\x02\x0b\n\r\n\x05\x05\ - \x07\x02a\x02\x12\x04\x88\x07\x08\n\n\r\n\x05\x05\x07\x02b\x01\x12\x04\ - \x89\x07\x02\x08\n\x0c\n\x04\x05\x07\x02b\x12\x04\x89\x07\x02\x0f\n\r\n\ - \x05\x05\x07\x02b\x02\x12\x04\x89\x07\x0b\x0e\n\r\n\x05\x05\x07\x02c\x01\ - \x12\x04\x8a\x07\x02\x0c\n\x0c\n\x04\x05\x07\x02c\x12\x04\x8a\x07\x02\ - \x12\n\r\n\x05\x05\x07\x02c\x02\x12\x04\x8a\x07\x0f\x11\n\r\n\x05\x05\ - \x07\x02d\x01\x12\x04\x8b\x07\x02\x11\n\x0c\n\x04\x05\x07\x02d\x12\x04\ - \x8b\x07\x02\x17\n\r\n\x05\x05\x07\x02d\x02\x12\x04\x8b\x07\x14\x16\n\r\ - \n\x05\x05\x07\x02e\x01\x12\x04\x8c\x07\x02\t\n\x0c\n\x04\x05\x07\x02e\ - \x12\x04\x8c\x07\x02\x10\n\r\n\x05\x05\x07\x02e\x02\x12\x04\x8c\x07\x0c\ - \x0f\n\r\n\x05\x05\x07\x02f\x01\x12\x04\x8d\x07\x02\x06\n\x0c\n\x04\x05\ - \x07\x02f\x12\x04\x8d\x07\x02\r\n\r\n\x05\x05\x07\x02f\x02\x12\x04\x8d\ - \x07\t\x0c\n\r\n\x05\x05\x07\x02g\x01\x12\x04\x8e\x07\x02\r\n\x0c\n\x04\ - \x05\x07\x02g\x12\x04\x8e\x07\x02\x13\n\r\n\x05\x05\x07\x02g\x02\x12\x04\ - \x8e\x07\x10\x12\n\r\n\x05\x05\x07\x02h\x01\x12\x04\x8f\x07\x02\x05\n\ - \x0c\n\x04\x05\x07\x02h\x12\x04\x8f\x07\x02\x0b\n\r\n\x05\x05\x07\x02h\ - \x02\x12\x04\x8f\x07\x08\n\n\r\n\x05\x05\x07\x02i\x01\x12\x04\x90\x07\ - \x02\t\n\x0c\n\x04\x05\x07\x02i\x12\x04\x90\x07\x02\x0f\n\r\n\x05\x05\ - \x07\x02i\x02\x12\x04\x90\x07\x0c\x0e\n\r\n\x05\x05\x07\x02j\x01\x12\x04\ - \x91\x07\x02\x05\n\x0c\n\x04\x05\x07\x02j\x12\x04\x91\x07\x02\x0b\n\r\n\ - \x05\x05\x07\x02j\x02\x12\x04\x91\x07\x08\n\n\r\n\x05\x05\x07\x02k\x01\ - \x12\x04\x92\x07\x02\x05\n\x0c\n\x04\x05\x07\x02k\x12\x04\x92\x07\x02\ - \x0b\n\r\n\x05\x05\x07\x02k\x02\x12\x04\x92\x07\x08\n\n\r\n\x05\x05\x07\ - \x02l\x01\x12\x04\x93\x07\x02\x06\n\x0c\n\x04\x05\x07\x02l\x12\x04\x93\ - \x07\x02\x0c\n\r\n\x05\x05\x07\x02l\x02\x12\x04\x93\x07\t\x0b\n\r\n\x05\ - \x05\x07\x02m\x01\x12\x04\x94\x07\x02\x05\n\x93\x03\n\x04\x05\x07\x02m\ - \x12\x04\x94\x07\x02\x0b\"\x84\x03\x20NextLanguage\x20=\x20111;\n\x20Ste\ + \x07\x02\r\x02\x12\x04\xd8\x06\x08\n\n\r\n\x05\x05\x07\x02\x0e\x01\x12\ + \x04\xd9\x06\x02\x05\n\x0c\n\x04\x05\x07\x02\x0e\x12\x04\xd9\x06\x02\x0b\ + \n\r\n\x05\x05\x07\x02\x0e\x02\x12\x04\xd9\x06\x08\n\n\r\n\x05\x05\x07\ + \x02\x0f\x01\x12\x04\xda\x06\x02\x08\n\x0c\n\x04\x05\x07\x02\x0f\x12\x04\ + \xda\x06\x02\r\n\r\n\x05\x05\x07\x02\x0f\x02\x12\x04\xda\x06\x0b\x0c\n\r\ + \n\x05\x05\x07\x02\x10\x01\x12\x04\xdb\x06\x02\t\n\x0c\n\x04\x05\x07\x02\ + \x10\x12\x04\xdb\x06\x02\x0e\n\r\n\x05\x05\x07\x02\x10\x02\x12\x04\xdb\ + \x06\x0c\r\n\r\n\x05\x05\x07\x02\x11\x01\x12\x04\xdc\x06\x02\x0e\n\x0c\n\ + \x04\x05\x07\x02\x11\x12\x04\xdc\x06\x02\x14\n\r\n\x05\x05\x07\x02\x11\ + \x02\x12\x04\xdc\x06\x11\x13\n\r\n\x05\x05\x07\x02\x12\x01\x12\x04\xdd\ + \x06\x02\x0c\n\x0c\n\x04\x05\x07\x02\x12\x12\x04\xdd\x06\x02\x11\n\r\n\ + \x05\x05\x07\x02\x12\x02\x12\x04\xdd\x06\x0f\x10\n\r\n\x05\x05\x07\x02\ + \x13\x01\x12\x04\xde\x06\x02\x05\n\x0c\n\x04\x05\x07\x02\x13\x12\x04\xde\ + \x06\x02\x0b\n\r\n\x05\x05\x07\x02\x13\x02\x12\x04\xde\x06\x08\n\n\r\n\ + \x05\x05\x07\x02\x14\x01\x12\x04\xdf\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\ + \x14\x12\x04\xdf\x06\x02\x0c\n\r\n\x05\x05\x07\x02\x14\x02\x12\x04\xdf\ + \x06\t\x0b\n\r\n\x05\x05\x07\x02\x15\x01\x12\x04\xe0\x06\x02\x06\n\x0c\n\ + \x04\x05\x07\x02\x15\x12\x04\xe0\x06\x02\x0b\n\r\n\x05\x05\x07\x02\x15\ + \x02\x12\x04\xe0\x06\t\n\n\r\n\x05\x05\x07\x02\x16\x01\x12\x04\xe1\x06\ + \x02\x08\n\x0c\n\x04\x05\x07\x02\x16\x12\x04\xe1\x06\x02\x0e\n\r\n\x05\ + \x05\x07\x02\x16\x02\x12\x04\xe1\x06\x0b\r\n\r\n\x05\x05\x07\x02\x17\x01\ + \x12\x04\xe2\x06\x02\x06\n\x0c\n\x04\x05\x07\x02\x17\x12\x04\xe2\x06\x02\ + \x0c\n\r\n\x05\x05\x07\x02\x17\x02\x12\x04\xe2\x06\t\x0b\n\r\n\x05\x05\ + \x07\x02\x18\x01\x12\x04\xe3\x06\x02\x0c\n\x0c\n\x04\x05\x07\x02\x18\x12\ + \x04\xe3\x06\x02\x12\n\r\n\x05\x05\x07\x02\x18\x02\x12\x04\xe3\x06\x0f\ + \x11\n\r\n\x05\x05\x07\x02\x19\x01\x12\x04\xe4\x06\x02\x08\n\x0c\n\x04\ + \x05\x07\x02\x19\x12\x04\xe4\x06\x02\x0e\n\r\n\x05\x05\x07\x02\x19\x02\ + \x12\x04\xe4\x06\x0b\r\n\r\n\x05\x05\x07\x02\x1a\x01\x12\x04\xe5\x06\x02\ + \x08\n\x0c\n\x04\x05\x07\x02\x1a\x12\x04\xe5\x06\x02\x0e\n\r\n\x05\x05\ + \x07\x02\x1a\x02\x12\x04\xe5\x06\x0b\r\n\r\n\x05\x05\x07\x02\x1b\x01\x12\ + \x04\xe6\x06\x02\x08\n\x0c\n\x04\x05\x07\x02\x1b\x12\x04\xe6\x06\x02\x0e\ + \n\r\n\x05\x05\x07\x02\x1b\x02\x12\x04\xe6\x06\x0b\r\n\r\n\x05\x05\x07\ + \x02\x1c\x01\x12\x04\xe7\x06\x02\x08\n\x0c\n\x04\x05\x07\x02\x1c\x12\x04\ + \xe7\x06\x02\x0e\n\r\n\x05\x05\x07\x02\x1c\x02\x12\x04\xe7\x06\x0b\r\n\r\ + \n\x05\x05\x07\x02\x1d\x01\x12\x04\xe8\x06\x02\x06\n\x0c\n\x04\x05\x07\ + \x02\x1d\x12\x04\xe8\x06\x02\x0c\n\r\n\x05\x05\x07\x02\x1d\x02\x12\x04\ + \xe8\x06\t\x0b\n\r\n\x05\x05\x07\x02\x1e\x01\x12\x04\xe9\x06\x02\x06\n\ + \x0c\n\x04\x05\x07\x02\x1e\x12\x04\xe9\x06\x02\x0c\n\r\n\x05\x05\x07\x02\ + \x1e\x02\x12\x04\xe9\x06\t\x0b\n\r\n\x05\x05\x07\x02\x1f\x01\x12\x04\xea\ + \x06\x02\t\n\x0c\n\x04\x05\x07\x02\x1f\x12\x04\xea\x06\x02\x0f\n\r\n\x05\ + \x05\x07\x02\x1f\x02\x12\x04\xea\x06\x0c\x0e\n\r\n\x05\x05\x07\x02\x20\ + \x01\x12\x04\xeb\x06\x02\x0c\n\x0c\n\x04\x05\x07\x02\x20\x12\x04\xeb\x06\ + \x02\x12\n\r\n\x05\x05\x07\x02\x20\x02\x12\x04\xeb\x06\x0f\x11\n\r\n\x05\ + \x05\x07\x02!\x01\x12\x04\xec\x06\x02\x0c\n\x0c\n\x04\x05\x07\x02!\x12\ + \x04\xec\x06\x02\x12\n\r\n\x05\x05\x07\x02!\x02\x12\x04\xec\x06\x0f\x11\ + \n\r\n\x05\x05\x07\x02\"\x01\x12\x04\xed\x06\x02\x0c\n\x0c\n\x04\x05\x07\ + \x02\"\x12\x04\xed\x06\x02\x12\n\r\n\x05\x05\x07\x02\"\x02\x12\x04\xed\ + \x06\x0f\x11\n\r\n\x05\x05\x07\x02#\x01\x12\x04\xee\x06\x02\x04\n\x0c\n\ + \x04\x05\x07\x02#\x12\x04\xee\x06\x02\n\n\r\n\x05\x05\x07\x02#\x02\x12\ + \x04\xee\x06\x07\t\n\r\n\x05\x05\x07\x02$\x01\x12\x04\xef\x06\x02\t\n\ + \x0c\n\x04\x05\x07\x02$\x12\x04\xef\x06\x02\x0f\n\r\n\x05\x05\x07\x02$\ + \x02\x12\x04\xef\x06\x0c\x0e\n\r\n\x05\x05\x07\x02%\x01\x12\x04\xf0\x06\ + \x02\x08\n\x0c\n\x04\x05\x07\x02%\x12\x04\xf0\x06\x02\r\n\r\n\x05\x05\ + \x07\x02%\x02\x12\x04\xf0\x06\x0b\x0c\n\r\n\x05\x05\x07\x02&\x01\x12\x04\ + \xf1\x06\x02\x06\n\x0c\n\x04\x05\x07\x02&\x12\x04\xf1\x06\x02\x0c\n\r\n\ + \x05\x05\x07\x02&\x02\x12\x04\xf1\x06\t\x0b\n\r\n\x05\x05\x07\x02'\x01\ + \x12\x04\xf2\x06\x02\x06\n\x0c\n\x04\x05\x07\x02'\x12\x04\xf2\x06\x02\ + \x0c\n\r\n\x05\x05\x07\x02'\x02\x12\x04\xf2\x06\t\x0b\n\r\n\x05\x05\x07\ + \x02(\x01\x12\x04\xf3\x06\x02\x0c\n\x0c\n\x04\x05\x07\x02(\x12\x04\xf3\ + \x06\x02\x12\n\r\n\x05\x05\x07\x02(\x02\x12\x04\xf3\x06\x0f\x11\n\r\n\ + \x05\x05\x07\x02)\x01\x12\x04\xf4\x06\x02\t\n\x0c\n\x04\x05\x07\x02)\x12\ + \x04\xf4\x06\x02\x0f\n\r\n\x05\x05\x07\x02)\x02\x12\x04\xf4\x06\x0c\x0e\ + \n\r\n\x05\x05\x07\x02*\x01\x12\x04\xf5\x06\x02\x07\n\x0c\n\x04\x05\x07\ + \x02*\x12\x04\xf5\x06\x02\r\n\r\n\x05\x05\x07\x02*\x02\x12\x04\xf5\x06\n\ + \x0c\n\r\n\x05\x05\x07\x02+\x01\x12\x04\xf6\x06\x02\x05\n\x0c\n\x04\x05\ + \x07\x02+\x12\x04\xf6\x06\x02\x0b\n\r\n\x05\x05\x07\x02+\x02\x12\x04\xf6\ + \x06\x08\n\n\r\n\x05\x05\x07\x02,\x01\x12\x04\xf7\x06\x02\x03\n\x0c\n\ + \x04\x05\x07\x02,\x12\x04\xf7\x06\x02\t\n\r\n\x05\x05\x07\x02,\x02\x12\ + \x04\xf7\x06\x06\x08\n\r\n\x05\x05\x07\x02-\x01\x12\x04\xf8\x06\x02\x06\ + \n\x0c\n\x04\x05\x07\x02-\x12\x04\xf8\x06\x02\x0c\n\r\n\x05\x05\x07\x02-\ + \x02\x12\x04\xf8\x06\t\x0b\n\r\n\x05\x05\x07\x02.\x01\x12\x04\xf9\x06\ + \x02\x06\n\x0c\n\x04\x05\x07\x02.\x12\x04\xf9\x06\x02\x0b\n\r\n\x05\x05\ + \x07\x02.\x02\x12\x04\xf9\x06\t\n\n\r\n\x05\x05\x07\x02/\x01\x12\x04\xfa\ + \x06\x02\x0c\n\x0c\n\x04\x05\x07\x02/\x12\x04\xfa\x06\x02\x12\n\r\n\x05\ + \x05\x07\x02/\x02\x12\x04\xfa\x06\x0f\x11\n\r\n\x05\x05\x07\x020\x01\x12\ + \x04\xfb\x06\x02\x11\n\x0c\n\x04\x05\x07\x020\x12\x04\xfb\x06\x02\x17\n\ + \r\n\x05\x05\x07\x020\x02\x12\x04\xfb\x06\x14\x16\n\r\n\x05\x05\x07\x021\ + \x01\x12\x04\xfc\x06\x02\t\n\x0c\n\x04\x05\x07\x021\x12\x04\xfc\x06\x02\ + \x0f\n\r\n\x05\x05\x07\x021\x02\x12\x04\xfc\x06\x0c\x0e\n\r\n\x05\x05\ + \x07\x022\x01\x12\x04\xfd\x06\x02\x07\n\x0c\n\x04\x05\x07\x022\x12\x04\ + \xfd\x06\x02\r\n\r\n\x05\x05\x07\x022\x02\x12\x04\xfd\x06\n\x0c\n\r\n\ + \x05\x05\x07\x023\x01\x12\x04\xfe\x06\x02\n\n\x0c\n\x04\x05\x07\x023\x12\ + \x04\xfe\x06\x02\x11\n\r\n\x05\x05\x07\x023\x02\x12\x04\xfe\x06\r\x10\n\ + \r\n\x05\x05\x07\x024\x01\x12\x04\xff\x06\x02\x08\n\x0c\n\x04\x05\x07\ + \x024\x12\x04\xff\x06\x02\r\n\r\n\x05\x05\x07\x024\x02\x12\x04\xff\x06\ + \x0b\x0c\n\r\n\x05\x05\x07\x025\x01\x12\x04\x80\x07\x02\x07\n\x0c\n\x04\ + \x05\x07\x025\x12\x04\x80\x07\x02\r\n\r\n\x05\x05\x07\x025\x02\x12\x04\ + \x80\x07\n\x0c\n\r\n\x05\x05\x07\x026\x01\x12\x04\x81\x07\x02\x06\n\x0c\ + \n\x04\x05\x07\x026\x12\x04\x81\x07\x02\x0c\n\r\n\x05\x05\x07\x026\x02\ + \x12\x04\x81\x07\t\x0b\n\r\n\x05\x05\x07\x027\x01\x12\x04\x82\x07\x02\ + \x06\n\x0c\n\x04\x05\x07\x027\x12\x04\x82\x07\x02\x0c\n\r\n\x05\x05\x07\ + \x027\x02\x12\x04\x82\x07\t\x0b\n\r\n\x05\x05\x07\x028\x01\x12\x04\x83\ + \x07\x02\x05\n\x0c\n\x04\x05\x07\x028\x12\x04\x83\x07\x02\x0b\n\r\n\x05\ + \x05\x07\x028\x02\x12\x04\x83\x07\x08\n\n\r\n\x05\x05\x07\x029\x01\x12\ + \x04\x84\x07\x02\x06\n\x0c\n\x04\x05\x07\x029\x12\x04\x84\x07\x02\r\n\r\ + \n\x05\x05\x07\x029\x02\x12\x04\x84\x07\t\x0c\n\r\n\x05\x05\x07\x02:\x01\ + \x12\x04\x85\x07\x02\n\n\x0c\n\x04\x05\x07\x02:\x12\x04\x85\x07\x02\x10\ + \n\r\n\x05\x05\x07\x02:\x02\x12\x04\x85\x07\r\x0f\n\r\n\x05\x05\x07\x02;\ + \x01\x12\x04\x86\x07\x02\n\n\x0c\n\x04\x05\x07\x02;\x12\x04\x86\x07\x02\ + \x10\n\r\n\x05\x05\x07\x02;\x02\x12\x04\x86\x07\r\x0f\n\r\n\x05\x05\x07\ + \x02<\x01\x12\x04\x87\x07\x02\x08\n\x0c\n\x04\x05\x07\x02<\x12\x04\x87\ + \x07\x02\x0e\n\r\n\x05\x05\x07\x02<\x02\x12\x04\x87\x07\x0b\r\n\r\n\x05\ + \x05\x07\x02=\x01\x12\x04\x88\x07\x02\x08\n'\n\x04\x05\x07\x02=\x12\x04\ + \x88\x07\x02\x0f\"\x19\x20https://nickel-lang.org/\n\r\n\x05\x05\x07\x02\ + =\x02\x12\x04\x88\x07\x0b\x0e\n\r\n\x05\x05\x07\x02>\x01\x12\x04\x89\x07\ + \x02\x05\n\x0c\n\x04\x05\x07\x02>\x12\x04\x89\x07\x02\x0b\n\r\n\x05\x05\ + \x07\x02>\x02\x12\x04\x89\x07\x08\n\n\r\n\x05\x05\x07\x02?\x01\x12\x04\ + \x8a\x07\x02\x07\n\x0c\n\x04\x05\x07\x02?\x12\x04\x8a\x07\x02\r\n\r\n\ + \x05\x05\x07\x02?\x02\x12\x04\x8a\x07\n\x0c\n\r\n\x05\x05\x07\x02@\x01\ + \x12\x04\x8b\x07\x02\r\n\x0c\n\x04\x05\x07\x02@\x12\x04\x8b\x07\x02\x13\ + \n\r\n\x05\x05\x07\x02@\x02\x12\x04\x8b\x07\x10\x12\n\r\n\x05\x05\x07\ + \x02A\x01\x12\x04\x8c\x07\x02\x0f\n\x0c\n\x04\x05\x07\x02A\x12\x04\x8c\ + \x07\x02\x15\n\r\n\x05\x05\x07\x02A\x02\x12\x04\x8c\x07\x12\x14\n\r\n\ + \x05\x05\x07\x02B\x01\x12\x04\x8d\x07\x02\x08\n\x0c\n\x04\x05\x07\x02B\ + \x12\x04\x8d\x07\x02\x0e\n\r\n\x05\x05\x07\x02B\x02\x12\x04\x8d\x07\x0b\ + \r\n\r\n\x05\x05\x07\x02C\x01\x12\x04\x8e\x07\x02\x05\n\x0c\n\x04\x05\ + \x07\x02C\x12\x04\x8e\x07\x02\x0b\n\r\n\x05\x05\x07\x02C\x02\x12\x04\x8e\ + \x07\x08\n\n\r\n\x05\x05\x07\x02D\x01\x12\x04\x8f\x07\x02\x07\n\x0c\n\ + \x04\x05\x07\x02D\x12\x04\x8f\x07\x02\r\n\r\n\x05\x05\x07\x02D\x02\x12\ + \x04\x8f\x07\n\x0c\n\r\n\x05\x05\x07\x02E\x01\x12\x04\x90\x07\x02\x06\n\ + \x0c\n\x04\x05\x07\x02E\x12\x04\x90\x07\x02\x0c\n\r\n\x05\x05\x07\x02E\ + \x02\x12\x04\x90\x07\t\x0b\n\r\n\x05\x05\x07\x02F\x01\x12\x04\x91\x07\ + \x02\x0c\n\x0c\n\x04\x05\x07\x02F\x12\x04\x91\x07\x02\x12\n\r\n\x05\x05\ + \x07\x02F\x02\x12\x04\x91\x07\x0f\x11\n\r\n\x05\x05\x07\x02G\x01\x12\x04\ + \x92\x07\x02\x08\n\x0c\n\x04\x05\x07\x02G\x12\x04\x92\x07\x02\x0e\n\r\n\ + \x05\x05\x07\x02G\x02\x12\x04\x92\x07\x0b\r\n\r\n\x05\x05\x07\x02H\x01\ + \x12\x04\x93\x07\x02\n\n\x0c\n\x04\x05\x07\x02H\x12\x04\x93\x07\x02\x11\ + \n\r\n\x05\x05\x07\x02H\x02\x12\x04\x93\x07\r\x10\n\r\n\x05\x05\x07\x02I\ + \x01\x12\x04\x94\x07\x02\x08\n\x0c\n\x04\x05\x07\x02I\x12\x04\x94\x07\ + \x02\x0e\n\r\n\x05\x05\x07\x02I\x02\x12\x04\x94\x07\x0b\r\n\r\n\x05\x05\ + \x07\x02J\x01\x12\x04\x95\x07\x02\x03\n\x0c\n\x04\x05\x07\x02J\x12\x04\ + \x95\x07\x02\t\n\r\n\x05\x05\x07\x02J\x02\x12\x04\x95\x07\x06\x08\n\r\n\ + \x05\x05\x07\x02K\x01\x12\x04\x96\x07\x02\x08\n\x0c\n\x04\x05\x07\x02K\ + \x12\x04\x96\x07\x02\x0e\n\r\n\x05\x05\x07\x02K\x02\x12\x04\x96\x07\x0b\ + \r\n\r\n\x05\x05\x07\x02L\x01\x12\x04\x97\x07\x02\x06\n\x0c\n\x04\x05\ + \x07\x02L\x12\x04\x97\x07\x02\x0c\n\r\n\x05\x05\x07\x02L\x02\x12\x04\x97\ + \x07\t\x0b\n\r\n\x05\x05\x07\x02M\x01\x12\x04\x98\x07\x02\x07\n\x0c\n\ + \x04\x05\x07\x02M\x12\x04\x98\x07\x02\r\n\r\n\x05\x05\x07\x02M\x02\x12\ + \x04\x98\x07\n\x0c\n\r\n\x05\x05\x07\x02N\x01\x12\x04\x99\x07\x02\x07\n1\ + \n\x04\x05\x07\x02N\x12\x04\x99\x07\x02\x0e\"#\x20Internal\x20language\ + \x20for\x20testing\x20SCIP\n\r\n\x05\x05\x07\x02N\x02\x12\x04\x99\x07\n\ + \r\n\r\n\x05\x05\x07\x02O\x01\x12\x04\x9a\x07\x02\x06\n\x0c\n\x04\x05\ + \x07\x02O\x12\x04\x9a\x07\x02\x0c\n\r\n\x05\x05\x07\x02O\x02\x12\x04\x9a\ + \x07\t\x0b\n\r\n\x05\x05\x07\x02P\x01\x12\x04\x9b\x07\x02\x06\n\x0c\n\ + \x04\x05\x07\x02P\x12\x04\x9b\x07\x02\x0c\n\r\n\x05\x05\x07\x02P\x02\x12\ + \x04\x9b\x07\t\x0b\n\r\n\x05\x05\x07\x02Q\x01\x12\x04\x9c\x07\x02\x06\n\ + \x0c\n\x04\x05\x07\x02Q\x12\x04\x9c\x07\x02\x0c\n\r\n\x05\x05\x07\x02Q\ + \x02\x12\x04\x9c\x07\t\x0b\n\r\n\x05\x05\x07\x02R\x01\x12\x04\x9d\x07\ + \x02\x05\n\x0c\n\x04\x05\x07\x02R\x12\x04\x9d\x07\x02\x0b\n\r\n\x05\x05\ + \x07\x02R\x02\x12\x04\x9d\x07\x08\n\n\r\n\x05\x05\x07\x02S\x01\x12\x04\ + \x9e\x07\x02\x06\n\x0c\n\x04\x05\x07\x02S\x12\x04\x9e\x07\x02\x0c\n\r\n\ + \x05\x05\x07\x02S\x02\x12\x04\x9e\x07\t\x0b\n\r\n\x05\x05\x07\x02T\x01\ + \x12\x04\x9f\x07\x02\x05\n\x0c\n\x04\x05\x07\x02T\x12\x04\x9f\x07\x02\ + \x0b\n\r\n\x05\x05\x07\x02T\x02\x12\x04\x9f\x07\x08\n\n\r\n\x05\x05\x07\ + \x02U\x01\x12\x04\xa0\x07\x02\x05\n\x0c\n\x04\x05\x07\x02U\x12\x04\xa0\ + \x07\x02\x0b\n\r\n\x05\x05\x07\x02U\x02\x12\x04\xa0\x07\x08\n\n\r\n\x05\ + \x05\x07\x02V\x01\x12\x04\xa1\x07\x02\x06\n\x0c\n\x04\x05\x07\x02V\x12\ + \x04\xa1\x07\x02\x0c\n\r\n\x05\x05\x07\x02V\x02\x12\x04\xa1\x07\t\x0b\n\ + \r\n\x05\x05\x07\x02W\x01\x12\x04\xa2\x07\x02\x07\n\x0c\n\x04\x05\x07\ + \x02W\x12\x04\xa2\x07\x02\x0c\n\r\n\x05\x05\x07\x02W\x02\x12\x04\xa2\x07\ + \n\x0b\n\r\n\x05\x05\x07\x02X\x01\x12\x04\xa3\x07\x02\x08\n\x0c\n\x04\ + \x05\x07\x02X\x12\x04\xa3\x07\x02\x0e\n\r\n\x05\x05\x07\x02X\x02\x12\x04\ + \xa3\x07\x0b\r\n\r\n\x05\x05\x07\x02Y\x01\x12\x04\xa4\x07\x02\r\n\x13\n\ + \x04\x05\x07\x02Y\x12\x04\xa4\x07\x02\x13\"\x05\x20Bash\n\r\n\x05\x05\ + \x07\x02Y\x02\x12\x04\xa4\x07\x10\x12\n\r\n\x05\x05\x07\x02Z\x01\x12\x04\ + \xa5\x07\x02\t\n\x0c\n\x04\x05\x07\x02Z\x12\x04\xa5\x07\x02\x0f\n\r\n\ + \x05\x05\x07\x02Z\x02\x12\x04\xa5\x07\x0c\x0e\n\r\n\x05\x05\x07\x02[\x01\ + \x12\x04\xa6\x07\x02\x07\n\x0c\n\x04\x05\x07\x02[\x12\x04\xa6\x07\x02\ + \x0e\n\r\n\x05\x05\x07\x02[\x02\x12\x04\xa6\x07\n\r\n\r\n\x05\x05\x07\ + \x02\\\x01\x12\x04\xa7\x07\x02\n\n\x0c\n\x04\x05\x07\x02\\\x12\x04\xa7\ + \x07\x02\x10\n\r\n\x05\x05\x07\x02\\\x02\x12\x04\xa7\x07\r\x0f\n\r\n\x05\ + \x05\x07\x02]\x01\x12\x04\xa8\x07\x02\x08\n\x0c\n\x04\x05\x07\x02]\x12\ + \x04\xa8\x07\x02\x0f\n\r\n\x05\x05\x07\x02]\x02\x12\x04\xa8\x07\x0b\x0e\ + \n\r\n\x05\x05\x07\x02^\x01\x12\x04\xa9\x07\x02\x07\n\x0c\n\x04\x05\x07\ + \x02^\x12\x04\xa9\x07\x02\x0c\n\r\n\x05\x05\x07\x02^\x02\x12\x04\xa9\x07\ + \n\x0b\n\r\n\x05\x05\x07\x02_\x01\x12\x04\xaa\x07\x02\x05\n\x0c\n\x04\ + \x05\x07\x02_\x12\x04\xaa\x07\x02\x0c\n\r\n\x05\x05\x07\x02_\x02\x12\x04\ + \xaa\x07\x08\x0b\n\r\n\x05\x05\x07\x02`\x01\x12\x04\xab\x07\x02\x06\n\ + \x0c\n\x04\x05\x07\x02`\x12\x04\xab\x07\x02\x0c\n\r\n\x05\x05\x07\x02`\ + \x02\x12\x04\xab\x07\t\x0b\n\r\n\x05\x05\x07\x02a\x01\x12\x04\xac\x07\ + \x02\x05\n\x0c\n\x04\x05\x07\x02a\x12\x04\xac\x07\x02\x0b\n\r\n\x05\x05\ + \x07\x02a\x02\x12\x04\xac\x07\x08\n\n\r\n\x05\x05\x07\x02b\x01\x12\x04\ + \xad\x07\x02\x08\n\x0c\n\x04\x05\x07\x02b\x12\x04\xad\x07\x02\x0f\n\r\n\ + \x05\x05\x07\x02b\x02\x12\x04\xad\x07\x0b\x0e\n\r\n\x05\x05\x07\x02c\x01\ + \x12\x04\xae\x07\x02\x0c\n\x0c\n\x04\x05\x07\x02c\x12\x04\xae\x07\x02\ + \x12\n\r\n\x05\x05\x07\x02c\x02\x12\x04\xae\x07\x0f\x11\n\r\n\x05\x05\ + \x07\x02d\x01\x12\x04\xaf\x07\x02\x11\n\x0c\n\x04\x05\x07\x02d\x12\x04\ + \xaf\x07\x02\x17\n\r\n\x05\x05\x07\x02d\x02\x12\x04\xaf\x07\x14\x16\n\r\ + \n\x05\x05\x07\x02e\x01\x12\x04\xb0\x07\x02\t\n\x0c\n\x04\x05\x07\x02e\ + \x12\x04\xb0\x07\x02\x10\n\r\n\x05\x05\x07\x02e\x02\x12\x04\xb0\x07\x0c\ + \x0f\n\r\n\x05\x05\x07\x02f\x01\x12\x04\xb1\x07\x02\x06\n\x0c\n\x04\x05\ + \x07\x02f\x12\x04\xb1\x07\x02\r\n\r\n\x05\x05\x07\x02f\x02\x12\x04\xb1\ + \x07\t\x0c\n\r\n\x05\x05\x07\x02g\x01\x12\x04\xb2\x07\x02\r\n\x0c\n\x04\ + \x05\x07\x02g\x12\x04\xb2\x07\x02\x13\n\r\n\x05\x05\x07\x02g\x02\x12\x04\ + \xb2\x07\x10\x12\n\r\n\x05\x05\x07\x02h\x01\x12\x04\xb3\x07\x02\x05\n\ + \x0c\n\x04\x05\x07\x02h\x12\x04\xb3\x07\x02\x0b\n\r\n\x05\x05\x07\x02h\ + \x02\x12\x04\xb3\x07\x08\n\n\r\n\x05\x05\x07\x02i\x01\x12\x04\xb4\x07\ + \x02\t\n\x0c\n\x04\x05\x07\x02i\x12\x04\xb4\x07\x02\x0f\n\r\n\x05\x05\ + \x07\x02i\x02\x12\x04\xb4\x07\x0c\x0e\n\r\n\x05\x05\x07\x02j\x01\x12\x04\ + \xb5\x07\x02\x05\n\x0c\n\x04\x05\x07\x02j\x12\x04\xb5\x07\x02\x0b\n\r\n\ + \x05\x05\x07\x02j\x02\x12\x04\xb5\x07\x08\n\n\r\n\x05\x05\x07\x02k\x01\ + \x12\x04\xb6\x07\x02\x05\n\x0c\n\x04\x05\x07\x02k\x12\x04\xb6\x07\x02\ + \x0b\n\r\n\x05\x05\x07\x02k\x02\x12\x04\xb6\x07\x08\n\n\r\n\x05\x05\x07\ + \x02l\x01\x12\x04\xb7\x07\x02\x06\n\x0c\n\x04\x05\x07\x02l\x12\x04\xb7\ + \x07\x02\x0c\n\r\n\x05\x05\x07\x02l\x02\x12\x04\xb7\x07\t\x0b\n\r\n\x05\ + \x05\x07\x02m\x01\x12\x04\xb8\x07\x02\x05\n\x93\x03\n\x04\x05\x07\x02m\ + \x12\x04\xb8\x07\x02\x0b\"\x84\x03\x20NextLanguage\x20=\x20111;\n\x20Ste\ ps\x20add\x20a\x20new\x20language:\n\x201.\x20Copy-paste\x20the\x20\"Nex\ tLanguage\x20=\x20N\"\x20line\x20above\n\x202.\x20Increment\x20\"NextLan\ guage\x20=\x20N\"\x20to\x20\"NextLanguage\x20=\x20N+1\"\n\x203.\x20Repla\ @@ -6918,7 +6989,7 @@ static file_descriptor_proto_data: &'static [u8] = b"\ \x20correct\x20line\x20above\x20using\x20alphabetical\x20order\n\x205.\ \x20(optional)\x20Add\x20a\x20brief\x20comment\x20behind\x20the\x20langu\ age\x20if\x20the\x20name\x20is\x20not\x20self-explanatory\n\n\r\n\x05\ - \x05\x07\x02m\x02\x12\x04\x94\x07\x08\nb\x06proto3\ + \x05\x07\x02m\x02\x12\x04\xb8\x07\x08\nb\x06proto3\ "; /// `FileDescriptorProto` object which was a source for this generated file diff --git a/bindings/typescript/scip_pb.ts b/bindings/typescript/scip_pb.ts index 19f94ec0..d0689e79 100644 --- a/bindings/typescript/scip_pb.ts +++ b/bindings/typescript/scip_pb.ts @@ -1232,6 +1232,11 @@ export const RelationshipSchema: GenMessage = /*@__PURE__*/ /** * SingleLineRange represents a half-open [start, end) range within a single line. * + * Line numbers and characters are always 0-based. Make sure to increment them + * before displaying in an editor-like UI because editors conventionally use + * 1-based numbers. The `character` values are interpreted based on the + * `PositionEncoding` for the enclosing Document. + * * @generated from message scip.SingleLineRange */ export type SingleLineRange = Message<"scip.SingleLineRange"> & { @@ -1261,6 +1266,15 @@ export const SingleLineRangeSchema: GenMessage = /*@__PURE__*/ /** * MultiLineRange represents a half-open [start, end) range spanning multiple lines. * + * Line numbers and characters are always 0-based. Make sure to increment them + * before displaying in an editor-like UI because editors conventionally use + * 1-based numbers. The `character` values are interpreted based on the + * `PositionEncoding` for the enclosing Document. + * + * Producers SHOULD use `SingleLineRange` when `start_line == end_line` to keep + * indexes compact, but consumers MUST accept multi-line encoding even when the + * range happens to fit on a single line. + * * @generated from message scip.MultiLineRange */ export type MultiLineRange = Message<"scip.MultiLineRange"> & { @@ -1299,6 +1313,21 @@ export const MultiLineRangeSchema: GenMessage = /*@__PURE__*/ * If possible, indexers should try to bundle logically related information * across occurrences into a single occurrence to reduce payload sizes. * + * Range encoding: + * + * An Occurrence carries its source range in one of two ways: the deprecated + * `range` field (a `repeated int32` packed encoding kept for backward + * compatibility), or one of the typed alternatives in the `typed_range` + * oneof. New producers SHOULD set `typed_range` and SHOULD NOT set the + * deprecated `range` field. The same rule applies to `enclosing_range` and + * `typed_enclosing_range`. + * + * When both encodings are present on the same Occurrence, `typed_range` takes + * precedence over `range` (likewise `typed_enclosing_range` over + * `enclosing_range`). Producers that set both forms MUST keep them + * semantically equivalent. Consumers SHOULD prefer the typed form when + * available and fall back to the `repeated int32` form otherwise. + * * @generated from message scip.Occurrence */ export type Occurrence = Message<"scip.Occurrence"> & { @@ -1309,12 +1338,16 @@ export type Occurrence = Message<"scip.Occurrence"> & { * - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) * - Four elements: `[startLine, startCharacter, endLine, endCharacter]` * + * The end line of a three-element range is inferred to equal the start line. + * * Historical note: the original draft of this schema had a `Range` message * type with `start` and `end` fields of type `Position`, mirroring LSP. * Benchmarks revealed that this encoding was inefficient and that we could * reduce the total payload size of an index by 50% by using `repeated int32` * instead. However, the lack of type safety led to the introduction of - * `single_line_range` and `multi_line_range` as typed alternatives. + * `single_line_range` and `multi_line_range` as typed alternatives; the + * typed encoding's per-index size overhead is small (single-digit percent) + * because ranges are only a fraction of a typical index payload. * * @generated from field: repeated int32 range = 1 [deprecated = true]; * @deprecated @@ -1326,12 +1359,8 @@ export type Occurrence = Message<"scip.Occurrence"> & { * * It is allowed for the range to be empty (i.e. start==end). * - * Line numbers and characters are always 0-based. Make sure to increment the - * line/character values before displaying them in an editor-like UI because - * editors conventionally use 1-based numbers. - * - * The 'character' value is interpreted based on the PositionEncoding for - * the Document. + * When both `typed_range` and the deprecated `range` field are set, + * `typed_range` takes precedence. * * @generated from oneof scip.Occurrence.typed_range */ @@ -1400,6 +1429,8 @@ export type Occurrence = Message<"scip.Occurrence"> & { /** * Deprecated: Use `typed_enclosing_range` instead. * + * Uses the same `repeated int32` encoding as the deprecated `range` field. + * * @generated from field: repeated int32 enclosing_range = 7 [deprecated = true]; * @deprecated */ @@ -1457,16 +1488,23 @@ export type Occurrence = Message<"scip.Occurrence"> & { * ^^^^^^^^^^^^^ enclosing_range * ``` * + * When both `typed_enclosing_range` and the deprecated `enclosing_range` + * field are set, `typed_enclosing_range` takes precedence. + * * @generated from oneof scip.Occurrence.typed_enclosing_range */ typedEnclosingRange: { /** + * Enclosing range spanning a single line. + * * @generated from field: scip.SingleLineRange single_line_enclosing_range = 10; */ value: SingleLineRange; case: "singleLineEnclosingRange"; } | { /** + * Enclosing range spanning multiple lines. + * * @generated from field: scip.MultiLineRange multi_line_enclosing_range = 11; */ value: MultiLineRange; diff --git a/docs/scip.md b/docs/scip.md index c36a02ed..49dfd030 100644 --- a/docs/scip.md +++ b/docs/scip.md @@ -153,6 +153,15 @@ function in `IndexVisitor` and update `ParseStreaming`. MultiLineRange represents a half-open [start, end) range spanning multiple lines. +Line numbers and characters are always 0-based. Make sure to increment them +before displaying in an editor-like UI because editors conventionally use +1-based numbers. The `character` values are interpreted based on the +`PositionEncoding` for the enclosing Document. + +Producers SHOULD use `SingleLineRange` when `start_line == end_line` to keep +indexes compact, but consumers MUST accept multi-line encoding even when the +range happens to fit on a single line. + | Name | Type | Description | | ---- | ---- | ----------- | | **start_line** | int32 | @@ -171,6 +180,21 @@ information. If possible, indexers should try to bundle logically related information across occurrences into a single occurrence to reduce payload sizes. +Range encoding: + +An Occurrence carries its source range in one of two ways: the deprecated +`range` field (a `repeated int32` packed encoding kept for backward +compatibility), or one of the typed alternatives in the `typed_range` +oneof. New producers SHOULD set `typed_range` and SHOULD NOT set the +deprecated `range` field. The same rule applies to `enclosing_range` and +`typed_enclosing_range`. + +When both encodings are present on the same Occurrence, `typed_range` takes +precedence over `range` (likewise `typed_enclosing_range` over +`enclosing_range`). Producers that set both forms MUST keep them +semantically equivalent. Consumers SHOULD prefer the typed form when +available and fall back to the `repeated int32` form otherwise. + | Name | Type | Description | | ---- | ---- | ----------- | | repeated **range** | int32 | Deprecated: Use `single_line_range` or `multi_line_range` instead. @@ -182,8 +206,8 @@ across occurrences into a single occurrence to reduce payload sizes. | **syntax_kind** | SyntaxKind | (optional) What syntax highlighting class should be used for this range? | repeated **diagnostics** | Diagnostic | (optional) Diagnostics that have been reported for this specific range. | repeated **enclosing_range** | int32 | Deprecated: Use `typed_enclosing_range` instead. -| **single_line_enclosing_range** | SingleLineRange | -| **multi_line_enclosing_range** | MultiLineRange | +| **single_line_enclosing_range** | SingleLineRange | Enclosing range spanning a single line. +| **multi_line_enclosing_range** | MultiLineRange | Enclosing range spanning multiple lines. Additional notes on **range**: @@ -193,12 +217,16 @@ Half-open [start, end) range. Must be exactly three or four elements: - Three elements: `[startLine, startCharacter, endCharacter]` (single-line) - Four elements: `[startLine, startCharacter, endLine, endCharacter]` +The end line of a three-element range is inferred to equal the start line. + Historical note: the original draft of this schema had a `Range` message type with `start` and `end` fields of type `Position`, mirroring LSP. Benchmarks revealed that this encoding was inefficient and that we could reduce the total payload size of an index by 50% by using `repeated int32` instead. However, the lack of type safety led to the introduction of -`single_line_range` and `multi_line_range` as typed alternatives. +`single_line_range` and `multi_line_range` as typed alternatives; the +typed encoding's per-index size overhead is small (single-digit percent) +because ranges are only a fraction of a typical index payload. @@ -219,6 +247,12 @@ which commonly allow for type-changing assignment. +Additional notes on **enclosing_range**: + +Deprecated: Use `typed_enclosing_range` instead. + +Uses the same `repeated int32` encoding as the deprecated `range` field. + ### Package @@ -287,6 +321,11 @@ signatures using the Document message type. SingleLineRange represents a half-open [start, end) range within a single line. +Line numbers and characters are always 0-based. Make sure to increment them +before displaying in an editor-like UI because editors conventionally use +1-based numbers. The `character` values are interpreted based on the +`PositionEncoding` for the enclosing Document. + | Name | Type | Description | | ---- | ---- | ----------- | | **line** | int32 | From 435ff55d3b7b9279277e76bdf9bcb77a909eee48 Mon Sep 17 00:00:00 2001 From: jupblb Date: Wed, 3 Jun 2026 22:11:31 +0200 Subject: [PATCH 05/12] go: add OccurrenceRange helpers and migrate callers to typed range --- bindings/go/scip/canonicalize.go | 16 ++- bindings/go/scip/flatten.go | 2 +- bindings/go/scip/occurrence_range_test.go | 149 ++++++++++++++++++++++ bindings/go/scip/position.go | 145 ++++++++++++++++++++- bindings/go/scip/sort.go | 31 ++--- bindings/go/scip/testutil/format.go | 31 +---- bindings/go/scip/testutil/format_test.go | 33 ----- bindings/go/scip/testutil/test_runner.go | 8 +- cmd/scip/convert.go | 22 ++-- cmd/scip/lint.go | 11 +- reprolang/repro/scip.go | 5 +- 11 files changed, 348 insertions(+), 105 deletions(-) create mode 100644 bindings/go/scip/occurrence_range_test.go delete mode 100644 bindings/go/scip/testutil/format_test.go diff --git a/bindings/go/scip/canonicalize.go b/bindings/go/scip/canonicalize.go index ae6877b0..0fa6adb5 100644 --- a/bindings/go/scip/canonicalize.go +++ b/bindings/go/scip/canonicalize.go @@ -3,8 +3,7 @@ package scip // CanonicalizeDocument deterministically sorts and merges fields of the given document. // // Post-conditions: -// 1. The Occurrences field only contains those with well-formed ranges -// (length 3 or 4, potentially empty). +// 1. The Occurrences field only contains those with well-formed ranges. // 2. The Occurrences field is sorted in ascending order of ranges based on // Range.CompareStrict // 3. The Symbols field is sorted in ascending order based on the symbol name, @@ -31,7 +30,7 @@ func CanonicalizeOccurrences(occurrences []*Occurrence) []*Occurrence { func RemoveIllegalOccurrences(occurrences []*Occurrence) []*Occurrence { filtered := occurrences[:0] for _, occurrence := range occurrences { - if len(occurrence.Range) != 3 && len(occurrence.Range) != 4 { + if !HasOccurrenceRange(occurrence) { continue } @@ -42,9 +41,16 @@ func RemoveIllegalOccurrences(occurrences []*Occurrence) []*Occurrence { } // CanonicalizeOccurrence deterministically re-orders the fields of the given occurrence. +// +// It normalizes the occurrence's range encoding so that occurrences carrying +// only the deprecated `repeated int32 range` field are re-emitted with the +// most compact three-element form. Occurrences that carry a typed range are +// left unchanged. func CanonicalizeOccurrence(occurrence *Occurrence) *Occurrence { - // Express ranges as three-components if possible - occurrence.Range = NewRangeUnchecked(occurrence.Range).SCIPRange() + if occurrence.GetTypedRange() == nil && len(occurrence.Range) > 0 { + // Express ranges as three-components if possible + occurrence.Range = NewRangeUnchecked(occurrence.Range).SCIPRange() + } occurrence.Diagnostics = CanonicalizeDiagnostics(occurrence.Diagnostics) return occurrence } diff --git a/bindings/go/scip/flatten.go b/bindings/go/scip/flatten.go index 116a147d..4584d01f 100644 --- a/bindings/go/scip/flatten.go +++ b/bindings/go/scip/flatten.go @@ -64,7 +64,7 @@ func FlattenOccurrences(occurrences []*Occurrence) []*Occurrence { for _, occurrence := range occurrences[1:] { top := flattened[len(flattened)-1] - if !rawRangesEqual(top.Range, occurrence.Range) { + if !occurrenceRangesEqual(top, occurrence) { flattened = append(flattened, occurrence) continue } diff --git a/bindings/go/scip/occurrence_range_test.go b/bindings/go/scip/occurrence_range_test.go new file mode 100644 index 00000000..d28cbce3 --- /dev/null +++ b/bindings/go/scip/occurrence_range_test.go @@ -0,0 +1,149 @@ +package scip + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestOccurrenceRange_TypedSingleLine(t *testing.T) { + occ := &Occurrence{ + TypedRange: &Occurrence_SingleLineRange{ + SingleLineRange: &SingleLineRange{Line: 5, StartCharacter: 2, EndCharacter: 7}, + }, + } + r, err := OccurrenceRange(occ) + require.NoError(t, err) + require.Equal(t, Range{Start: Position{5, 2}, End: Position{5, 7}}, r) + require.True(t, HasOccurrenceRange(occ)) +} + +func TestOccurrenceRange_TypedMultiLine(t *testing.T) { + occ := &Occurrence{ + TypedRange: &Occurrence_MultiLineRange{ + MultiLineRange: &MultiLineRange{StartLine: 1, StartCharacter: 2, EndLine: 3, EndCharacter: 4}, + }, + } + r, err := OccurrenceRange(occ) + require.NoError(t, err) + require.Equal(t, Range{Start: Position{1, 2}, End: Position{3, 4}}, r) +} + +func TestOccurrenceRange_DeprecatedFallback(t *testing.T) { + occ := &Occurrence{Range: []int32{2, 3, 5}} + r, err := OccurrenceRange(occ) + require.NoError(t, err) + require.Equal(t, Range{Start: Position{2, 3}, End: Position{2, 5}}, r) +} + +func TestOccurrenceRange_TypedTakesPrecedenceOverDeprecated(t *testing.T) { + // Per scip.proto, when both encodings are present the typed form wins. + occ := &Occurrence{ + Range: []int32{100, 100, 100}, // deliberately disagrees + TypedRange: &Occurrence_SingleLineRange{ + SingleLineRange: &SingleLineRange{Line: 5, StartCharacter: 2, EndCharacter: 7}, + }, + } + r, err := OccurrenceRange(occ) + require.NoError(t, err) + require.Equal(t, Range{Start: Position{5, 2}, End: Position{5, 7}}, r) + + require.Equal(t, Range{Start: Position{5, 2}, End: Position{5, 7}}, OccurrenceRangeUnchecked(occ)) +} + +func TestOccurrenceRange_Missing(t *testing.T) { + occ := &Occurrence{} + _, err := OccurrenceRange(occ) + require.ErrorIs(t, err, ErrMissingRange) + require.False(t, HasOccurrenceRange(occ)) + require.Equal(t, Range{}, OccurrenceRangeUnchecked(occ)) +} + +func TestOccurrenceRange_DeprecatedMalformed(t *testing.T) { + occ := &Occurrence{Range: []int32{1, 2}} + _, err := OccurrenceRange(occ) + require.Error(t, err) +} + +func TestOccurrenceEnclosingRange_TypedSingleLine(t *testing.T) { + occ := &Occurrence{ + TypedEnclosingRange: &Occurrence_SingleLineEnclosingRange{ + SingleLineEnclosingRange: &SingleLineRange{Line: 5, StartCharacter: 0, EndCharacter: 10}, + }, + } + r, ok, err := OccurrenceEnclosingRange(occ) + require.NoError(t, err) + require.True(t, ok) + require.Equal(t, Range{Start: Position{5, 0}, End: Position{5, 10}}, r) +} + +func TestOccurrenceEnclosingRange_TypedMultiLine(t *testing.T) { + occ := &Occurrence{ + TypedEnclosingRange: &Occurrence_MultiLineEnclosingRange{ + MultiLineEnclosingRange: &MultiLineRange{StartLine: 1, StartCharacter: 0, EndLine: 9, EndCharacter: 1}, + }, + } + r, ok, err := OccurrenceEnclosingRange(occ) + require.NoError(t, err) + require.True(t, ok) + require.Equal(t, Range{Start: Position{1, 0}, End: Position{9, 1}}, r) +} + +func TestOccurrenceEnclosingRange_DeprecatedFallback(t *testing.T) { + occ := &Occurrence{EnclosingRange: []int32{2, 0, 5, 1}} + r, ok, err := OccurrenceEnclosingRange(occ) + require.NoError(t, err) + require.True(t, ok) + require.Equal(t, Range{Start: Position{2, 0}, End: Position{5, 1}}, r) +} + +func TestOccurrenceEnclosingRange_TypedTakesPrecedence(t *testing.T) { + occ := &Occurrence{ + EnclosingRange: []int32{100, 100, 100}, + TypedEnclosingRange: &Occurrence_SingleLineEnclosingRange{ + SingleLineEnclosingRange: &SingleLineRange{Line: 5, StartCharacter: 0, EndCharacter: 10}, + }, + } + r, ok, err := OccurrenceEnclosingRange(occ) + require.NoError(t, err) + require.True(t, ok) + require.Equal(t, Range{Start: Position{5, 0}, End: Position{5, 10}}, r) +} + +func TestOccurrenceEnclosingRange_Missing(t *testing.T) { + occ := &Occurrence{} + r, ok, err := OccurrenceEnclosingRange(occ) + require.NoError(t, err) + require.False(t, ok) + require.Equal(t, Range{}, r) +} + +func TestSetOccurrenceRange_SingleLine(t *testing.T) { + occ := &Occurrence{Range: []int32{99, 99, 99}} + SetOccurrenceRange(occ, Range{Start: Position{3, 1}, End: Position{3, 8}}) + require.Nil(t, occ.Range) + tr, ok := occ.TypedRange.(*Occurrence_SingleLineRange) + require.True(t, ok) + require.Equal(t, &SingleLineRange{Line: 3, StartCharacter: 1, EndCharacter: 8}, tr.SingleLineRange) + + r, err := OccurrenceRange(occ) + require.NoError(t, err) + require.Equal(t, Range{Start: Position{3, 1}, End: Position{3, 8}}, r) +} + +func TestSetOccurrenceRange_MultiLine(t *testing.T) { + occ := &Occurrence{} + SetOccurrenceRange(occ, Range{Start: Position{1, 0}, End: Position{4, 2}}) + tr, ok := occ.TypedRange.(*Occurrence_MultiLineRange) + require.True(t, ok) + require.Equal(t, &MultiLineRange{StartLine: 1, StartCharacter: 0, EndLine: 4, EndCharacter: 2}, tr.MultiLineRange) +} + +func TestSetOccurrenceEnclosingRange(t *testing.T) { + occ := &Occurrence{EnclosingRange: []int32{99, 99, 99}} + SetOccurrenceEnclosingRange(occ, Range{Start: Position{1, 0}, End: Position{5, 1}}) + require.Nil(t, occ.EnclosingRange) + tr, ok := occ.TypedEnclosingRange.(*Occurrence_MultiLineEnclosingRange) + require.True(t, ok) + require.Equal(t, &MultiLineRange{StartLine: 1, StartCharacter: 0, EndLine: 5, EndCharacter: 1}, tr.MultiLineEnclosingRange) +} diff --git a/bindings/go/scip/position.go b/bindings/go/scip/position.go index 6457a349..83c3dcc6 100644 --- a/bindings/go/scip/position.go +++ b/bindings/go/scip/position.go @@ -1,6 +1,9 @@ package scip -import "fmt" +import ( + "errors" + "fmt" +) // Range represents [start, end) between two offset positions. type Range struct { @@ -195,3 +198,143 @@ func (r Range) LessStrict(other Range) bool { func (r Range) String() string { return fmt.Sprintf("%d:%d-%d:%d", r.Start.Line, r.Start.Character, r.End.Line, r.End.Character) } + +// ToSingleLineRange returns this range as a SingleLineRange. +// +// Pre-condition: r.IsSingleLine() must be true. +func (r Range) ToSingleLineRange() *SingleLineRange { + return &SingleLineRange{ + Line: r.Start.Line, + StartCharacter: r.Start.Character, + EndCharacter: r.End.Character, + } +} + +// ToMultiLineRange returns this range as a MultiLineRange. +func (r Range) ToMultiLineRange() *MultiLineRange { + return &MultiLineRange{ + StartLine: r.Start.Line, + StartCharacter: r.Start.Character, + EndLine: r.End.Line, + EndCharacter: r.End.Character, + } +} + +// rangeFromSingleLine constructs a Range from a SingleLineRange without +// validation. Used by Occurrence helpers where the typed message has already +// been produced by a proto decoder. +func rangeFromSingleLine(sr *SingleLineRange) Range { + return Range{ + Start: Position{Line: sr.Line, Character: sr.StartCharacter}, + End: Position{Line: sr.Line, Character: sr.EndCharacter}, + } +} + +// rangeFromMultiLine constructs a Range from a MultiLineRange without +// validation. +func rangeFromMultiLine(mr *MultiLineRange) Range { + return Range{ + Start: Position{Line: mr.StartLine, Character: mr.StartCharacter}, + End: Position{Line: mr.EndLine, Character: mr.EndCharacter}, + } +} + +// ErrMissingRange is returned by OccurrenceRange when an occurrence has +// neither typed_range nor the deprecated repeated-int32 range field set. +var ErrMissingRange = errors.New("occurrence has no range") + +// OccurrenceRange returns the source range of an occurrence. It reads +// `typed_range` if present (taking precedence per the schema), and otherwise +// falls back to the deprecated `repeated int32 range` field. +// +// Returns ErrMissingRange if neither encoding is set, or a RangeError if the +// deprecated field is present but malformed. +func OccurrenceRange(occ *Occurrence) (Range, error) { + switch tr := occ.GetTypedRange().(type) { + case *Occurrence_SingleLineRange: + return rangeFromSingleLine(tr.SingleLineRange), nil + case *Occurrence_MultiLineRange: + return rangeFromMultiLine(tr.MultiLineRange), nil + } + if len(occ.Range) == 0 { + return Range{}, ErrMissingRange + } + return NewRange(occ.Range) +} + +// OccurrenceRangeUnchecked returns the source range of an occurrence without +// validating the input. Like OccurrenceRange, `typed_range` takes precedence +// over the deprecated `range` field. +// +// Pre-condition: the occurrence must carry a range in one of the two +// encodings. Calling this on an occurrence with no range will return a +// zero-valued Range. +func OccurrenceRangeUnchecked(occ *Occurrence) Range { + switch tr := occ.GetTypedRange().(type) { + case *Occurrence_SingleLineRange: + return rangeFromSingleLine(tr.SingleLineRange) + case *Occurrence_MultiLineRange: + return rangeFromMultiLine(tr.MultiLineRange) + } + if len(occ.Range) == 0 { + return Range{} + } + return NewRangeUnchecked(occ.Range) +} + +// OccurrenceEnclosingRange returns the enclosing range of an occurrence, if +// any. Returns (zero, false, nil) when no enclosing range is set, (range, +// true, nil) on success, and (zero, true, err) when a deprecated +// repeated-int32 enclosing range is present but malformed. +// +// `typed_enclosing_range` takes precedence over the deprecated +// `enclosing_range` field. +func OccurrenceEnclosingRange(occ *Occurrence) (Range, bool, error) { + switch tr := occ.GetTypedEnclosingRange().(type) { + case *Occurrence_SingleLineEnclosingRange: + return rangeFromSingleLine(tr.SingleLineEnclosingRange), true, nil + case *Occurrence_MultiLineEnclosingRange: + return rangeFromMultiLine(tr.MultiLineEnclosingRange), true, nil + } + if len(occ.EnclosingRange) == 0 { + return Range{}, false, nil + } + r, err := NewRange(occ.EnclosingRange) + if err != nil { + return Range{}, true, err + } + return r, true, nil +} + +// HasOccurrenceRange reports whether an occurrence carries a source range in +// either encoding. +func HasOccurrenceRange(occ *Occurrence) bool { + if occ.GetTypedRange() != nil { + return true + } + return len(occ.Range) == 3 || len(occ.Range) == 4 +} + +// SetOccurrenceRange stores r on occ using the typed `typed_range` encoding, +// choosing SingleLineRange when r is single-line and MultiLineRange +// otherwise. The deprecated `range` field is cleared. +func SetOccurrenceRange(occ *Occurrence, r Range) { + occ.Range = nil + if r.IsSingleLine() { + occ.TypedRange = &Occurrence_SingleLineRange{SingleLineRange: r.ToSingleLineRange()} + return + } + occ.TypedRange = &Occurrence_MultiLineRange{MultiLineRange: r.ToMultiLineRange()} +} + +// SetOccurrenceEnclosingRange stores r on occ using the typed +// `typed_enclosing_range` encoding. The deprecated `enclosing_range` field is +// cleared. +func SetOccurrenceEnclosingRange(occ *Occurrence, r Range) { + occ.EnclosingRange = nil + if r.IsSingleLine() { + occ.TypedEnclosingRange = &Occurrence_SingleLineEnclosingRange{SingleLineEnclosingRange: r.ToSingleLineRange()} + return + } + occ.TypedEnclosingRange = &Occurrence_MultiLineEnclosingRange{MultiLineEnclosingRange: r.ToMultiLineRange()} +} diff --git a/bindings/go/scip/sort.go b/bindings/go/scip/sort.go index 6ef135e6..cca51466 100644 --- a/bindings/go/scip/sort.go +++ b/bindings/go/scip/sort.go @@ -49,14 +49,14 @@ func FindOccurrences(occurrences []*Occurrence, targetLine, targetCharacter int3 var filtered []*Occurrence pos := Position{targetLine, targetCharacter} for _, occurrence := range occurrences { - if NewRangeUnchecked(occurrence.Range).Contains(pos) { + if OccurrenceRangeUnchecked(occurrence).Contains(pos) { filtered = append(filtered, occurrence) } } sort.Slice(filtered, func(i, j int) bool { // Ordered so that the least precise (largest) range comes last - return NewRangeUnchecked(filtered[i].Range).CompareStrict(NewRangeUnchecked(filtered[j].Range)) > 0 + return OccurrenceRangeUnchecked(filtered[i]).CompareStrict(OccurrenceRangeUnchecked(filtered[j])) > 0 }) return filtered @@ -68,8 +68,8 @@ func FindOccurrences(occurrences []*Occurrence, targetLine, targetCharacter int3 // occurrences are sorted by symbol name. func SortOccurrences(occurrences []*Occurrence) []*Occurrence { sort.Slice(occurrences, func(i, j int) bool { - r1 := NewRangeUnchecked(occurrences[i].Range) - r2 := NewRangeUnchecked(occurrences[j].Range) + r1 := OccurrenceRangeUnchecked(occurrences[i]) + r2 := OccurrenceRangeUnchecked(occurrences[j]) if ret := r1.CompareStrict(r2); ret != 0 { return ret < 0 } @@ -79,22 +79,13 @@ func SortOccurrences(occurrences []*Occurrence) []*Occurrence { return occurrences } -// rawRangesEqual compares the given SCIP-encoded raw ranges for equality. -func rawRangesEqual(a, b []int32) bool { - if len(a) == len(b) { - for i, v := range a { - if v != b[i] { - return false - } - } - - return true - } - - ra := NewRangeUnchecked(a) - rb := NewRangeUnchecked(b) - - return ra.Start.Line == rb.Start.Line && ra.Start.Character == rb.Start.Character && ra.End.Line == rb.End.Line && ra.End.Character == rb.End.Character +// occurrenceRangesEqual compares the source ranges of two occurrences for +// equality, normalizing across the deprecated `repeated int32` and the typed +// `typed_range` encodings. +func occurrenceRangesEqual(a, b *Occurrence) bool { + ra := OccurrenceRangeUnchecked(a) + rb := OccurrenceRangeUnchecked(b) + return ra.CompareStrict(rb) == 0 } // SortRanges sorts the given range slice (in-place) and returns it (for convenience). Ranges are diff --git a/bindings/go/scip/testutil/format.go b/bindings/go/scip/testutil/format.go index bb10d928..46ddb11a 100644 --- a/bindings/go/scip/testutil/format.go +++ b/bindings/go/scip/testutil/format.go @@ -82,7 +82,8 @@ func FormatSnapshot( } symtab := document.SymbolTable() sort.SliceStable(document.Occurrences, func(i, j int) bool { - return isSCIPRangeLess(document.Occurrences[i].Range, document.Occurrences[j].Range) + return scip.OccurrenceRangeUnchecked(document.Occurrences[i]). + LessStrict(scip.OccurrenceRangeUnchecked(document.Occurrences[j])) }) var formattingError error formatSymbol := func(symbol string) string { @@ -112,9 +113,9 @@ func FormatSnapshot( b.WriteString(strings.Repeat(" ", len(commentSyntax))) b.WriteString(strings.ReplaceAll(line, "\t", " ")) b.WriteString("\n") - for i < len(document.Occurrences) && document.Occurrences[i].Range[0] == int32(lineNumber) { + for i < len(document.Occurrences) && scip.OccurrenceRangeUnchecked(document.Occurrences[i]).Start.Line == int32(lineNumber) { occ := document.Occurrences[i] - pos := scip.NewRangeUnchecked(occ.Range) + pos := scip.OccurrenceRangeUnchecked(occ) if !pos.IsSingleLine() { i++ continue @@ -282,26 +283,6 @@ func writeDiagnostic(b *strings.Builder, prefix string, diagnostic *scip.Diagnos writeMultiline(b, prefix, diagnostic.Message) } -// isRangeLess compares two SCIP ranges (which are encoded as []int32). -func isSCIPRangeLess(a []int32, b []int32) bool { - if a[0] != b[0] { // start line - return a[0] < b[0] - } - if a[1] != b[1] { // start character - return a[1] < b[1] - } - if len(a) != len(b) { // is one of these multiline - return len(a) < len(b) - } - if a[2] != b[2] { // end line - return a[2] < b[2] - } - if len(a) == 4 { - return a[3] < b[3] - } - return false -} - type enclosingRange struct { Range scip.Range Symbol string @@ -310,9 +291,9 @@ type enclosingRange struct { func enclosingRanges(occurrences []*scip.Occurrence) []enclosingRange { var enclosingRanges []enclosingRange for _, occ := range occurrences { - if len(occ.EnclosingRange) > 0 { + if r, ok, _ := scip.OccurrenceEnclosingRange(occ); ok { enclosingRanges = append(enclosingRanges, enclosingRange{ - Range: scip.NewRangeUnchecked(occ.EnclosingRange), + Range: r, Symbol: occ.Symbol, }) } diff --git a/bindings/go/scip/testutil/format_test.go b/bindings/go/scip/testutil/format_test.go deleted file mode 100644 index fe1cde2a..00000000 --- a/bindings/go/scip/testutil/format_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package testutil - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestIsScipRangeLess(t *testing.T) { - testCases := []struct { - lhs []int32 - rhs []int32 - }{ - {[]int32{0, 1, 2}, []int32{1, 0, 0}}, - {[]int32{0, 1, 10}, []int32{0, 2, 3}}, - {[]int32{0, 1, 2, 3}, []int32{0, 2, 4}}, - {[]int32{0, 1, 4}, []int32{0, 1, 2, 3}}, - {[]int32{0, 1, 2, 3}, []int32{0, 1, 4, 0}}, - {[]int32{0, 1, 2, 3}, []int32{0, 1, 2, 4}}, - } - for _, testCase := range testCases { - require.Truef(t, isSCIPRangeLess(testCase.lhs, testCase.rhs), - "%v ≮ %v", testCase.lhs, testCase.rhs) - require.Falsef(t, isSCIPRangeLess(testCase.rhs, testCase.lhs), - "%v < %v", testCase.rhs, testCase.lhs) - - require.Falsef(t, isSCIPRangeLess(testCase.lhs, testCase.lhs), - "%v < %v", testCase.lhs, testCase.lhs) - require.Falsef(t, isSCIPRangeLess(testCase.lhs, testCase.lhs), - "%v < %v", testCase.rhs, testCase.rhs) - } - -} diff --git a/bindings/go/scip/testutil/test_runner.go b/bindings/go/scip/testutil/test_runner.go index 3029eaaf..c9b47548 100644 --- a/bindings/go/scip/testutil/test_runner.go +++ b/bindings/go/scip/testutil/test_runner.go @@ -227,9 +227,11 @@ func filterAttributesForTestCase(testCase symbolAttributeTestCase, attributes [] func attributesForOccurrencesAtLine(lineNumber int, occurrences []*scip.Occurrence) []symbolAttribute { result := []symbolAttribute{} for _, occ := range occurrences { - if occ.Range[0] == int32(lineNumber) { - pos, _ := scip.NewRange(occ.Range) - + pos, err := scip.OccurrenceRange(occ) + if err != nil { + continue + } + if pos.Start.Line == int32(lineNumber) { start := int(pos.Start.Character) length := int(pos.End.Character - pos.Start.Character) diff --git a/cmd/scip/convert.go b/cmd/scip/convert.go index ee7b29a1..e88f9354 100644 --- a/cmd/scip/convert.go +++ b/cmd/scip/convert.go @@ -386,18 +386,20 @@ func (c *Converter) insertEnclosingRangeData(symbolToID map[string]int64, occs [ // Technically, local symbols could be part of the hierarchy, but // ignore them for now if !scip.SymbolRole_Definition.Matches(occ) || - scip.IsLocalSymbol(occ.Symbol) || - len(occ.EnclosingRange) < 3 { + scip.IsLocalSymbol(occ.Symbol) { + continue + } + enclRange, hasEnclosing, err := scip.OccurrenceEnclosingRange(occ) + if err != nil { + return fmt.Errorf("bad enclosing range for symbol %q: %w", occ.Symbol, err) + } + if !hasEnclosing { continue } symbolID, ok := symbolToID[occ.Symbol] if !ok { return fmt.Errorf("symbol %q has definition occurrence, but no SymbolInformation", occ.Symbol) } - enclRange, err := scip.NewRange(occ.EnclosingRange) - if err != nil { - return fmt.Errorf("bad enclosing range %v for symbol %q: %w", occ.EnclosingRange, occ.Symbol, err) - } defnEnclRangesStmt.BindInt64(1, docID) defnEnclRangesStmt.BindInt64(2, symbolID) @@ -588,12 +590,12 @@ func chunkOccurrences(occurrences []*scip.Occurrence, chunkSize int) []Chunk { hi := min(len(occurrences), chunkSize) for lo := 0; lo < hi && hi <= len(occurrences); { for ; hi <= len(occurrences)-1 && - scip.NewRangeUnchecked(occurrences[hi-1].Range).Start.Line == - scip.NewRangeUnchecked(occurrences[hi].Range).Start.Line; hi++ { + scip.OccurrenceRangeUnchecked(occurrences[hi-1]).Start.Line == + scip.OccurrenceRangeUnchecked(occurrences[hi]).Start.Line; hi++ { } chunks = append(chunks, Chunk{ - StartLine: scip.NewRangeUnchecked(occurrences[lo].Range).Start.Line, - EndLine: scip.NewRangeUnchecked(occurrences[hi-1].Range).Start.Line, + StartLine: scip.OccurrenceRangeUnchecked(occurrences[lo]).Start.Line, + EndLine: scip.OccurrenceRangeUnchecked(occurrences[hi-1]).Start.Line, Occurrences: occurrences[lo:hi], }) diff --git a/cmd/scip/lint.go b/cmd/scip/lint.go index c1ad60fa..a781ec17 100644 --- a/cmd/scip/lint.go +++ b/cmd/scip/lint.go @@ -111,7 +111,7 @@ type occurrenceKey struct { } func scipOccurrenceKey(occ *scip.Occurrence) occurrenceKey { - return occurrenceKey{scip.NewRangeUnchecked(occ.Range), occ.SymbolRoles} + return occurrenceKey{scip.OccurrenceRangeUnchecked(occ), occ.SymbolRoles} } type occurrenceMap = map[occurrenceKey]*scip.Occurrence @@ -199,21 +199,22 @@ func (st *symbolTable) addRelationship(sym string, path string, rel *scip.Relati } func (st *symbolTable) addOccurrence(path string, occ *scip.Occurrence) error { + occRange := scip.OccurrenceRangeUnchecked(occ) err := lintSymbolString( occ.Symbol, - fmt.Sprintf("occurrence at %s @ %s", path, scipRangeToString(scip.NewRangeUnchecked(occ.Range))), + fmt.Sprintf("occurrence at %s @ %s", path, scipRangeToString(occRange)), ) if err != nil { return err } if scip.SymbolRole_Definition.Matches(occ) && scip.SymbolRole_ForwardDefinition.Matches(occ) { - return forwardDefIsDefinitionError{occ.Symbol, path, scip.NewRangeUnchecked(occ.Range)} + return forwardDefIsDefinitionError{occ.Symbol, path, occRange} } tryInsertOccurrence := func(occMap fileOccurrenceMap) error { occKey := scipOccurrenceKey(occ) if fileOccs, ok := occMap[path]; ok { if _, ok := fileOccs[occKey]; ok { - return duplicateOccurrenceWarning{occ.Symbol, path, scip.NewRangeUnchecked(occ.Range), occ.SymbolRoles} + return duplicateOccurrenceWarning{occ.Symbol, path, occRange, occ.SymbolRoles} } else { fileOccs[occKey] = occ } @@ -233,7 +234,7 @@ func (st *symbolTable) addOccurrence(path string, occ *scip.Occurrence) error { return err } } else { - return missingSymbolForOccurrenceError{occ.Symbol, path, scip.NewRangeUnchecked(occ.Range)} + return missingSymbolForOccurrenceError{occ.Symbol, path, occRange} } return nil } diff --git a/reprolang/repro/scip.go b/reprolang/repro/scip.go index 3508ceab..ae3c81ee 100644 --- a/reprolang/repro/scip.go +++ b/reprolang/repro/scip.go @@ -16,12 +16,13 @@ func (i *identifier) occurrence(roles scip.SymbolRole) *scip.Occurrence { }} } - return &scip.Occurrence{ - Range: i.position.SCIPRange(), + occ := &scip.Occurrence{ Symbol: i.symbol, SymbolRoles: int32(roles), Diagnostics: diagnostics, } + scip.SetOccurrenceRange(occ, *i.position) + return occ } func (s *reproSourceFile) symbols() []*scip.SymbolInformation { From 4d996f7f7155319ca6e0c6e70e656301a53a8ddb Mon Sep 17 00:00:00 2001 From: jupblb Date: Wed, 3 Jun 2026 22:38:19 +0200 Subject: [PATCH 06/12] go: simplify OccurrenceRange API to (Range, bool) --- bindings/go/scip/canonicalize.go | 2 +- bindings/go/scip/occurrence_range.go | 98 +++++++++++++++ bindings/go/scip/occurrence_range_test.go | 52 ++++---- bindings/go/scip/position.go | 145 +--------------------- bindings/go/scip/sort.go | 14 ++- bindings/go/scip/testutil/format.go | 14 ++- bindings/go/scip/testutil/test_runner.go | 4 +- cmd/scip/convert.go | 17 ++- cmd/scip/lint.go | 5 +- 9 files changed, 152 insertions(+), 199 deletions(-) create mode 100644 bindings/go/scip/occurrence_range.go diff --git a/bindings/go/scip/canonicalize.go b/bindings/go/scip/canonicalize.go index 0fa6adb5..d31e672a 100644 --- a/bindings/go/scip/canonicalize.go +++ b/bindings/go/scip/canonicalize.go @@ -30,7 +30,7 @@ func CanonicalizeOccurrences(occurrences []*Occurrence) []*Occurrence { func RemoveIllegalOccurrences(occurrences []*Occurrence) []*Occurrence { filtered := occurrences[:0] for _, occurrence := range occurrences { - if !HasOccurrenceRange(occurrence) { + if _, ok := OccurrenceRange(occurrence); !ok { continue } diff --git a/bindings/go/scip/occurrence_range.go b/bindings/go/scip/occurrence_range.go new file mode 100644 index 00000000..19bf90ee --- /dev/null +++ b/bindings/go/scip/occurrence_range.go @@ -0,0 +1,98 @@ +package scip + +// OccurrenceRange returns the source range of an occurrence and whether one +// is set. `typed_range` takes precedence over the deprecated `range` field. +// Malformed deprecated ranges (length != 3 or 4) are reported as missing; use +// `scip lint` to surface them. +func OccurrenceRange(occ *Occurrence) (Range, bool) { + if r, ok := readTypedRange(occ.GetTypedRange()); ok { + return r, true + } + if len(occ.Range) != 3 && len(occ.Range) != 4 { + return Range{}, false + } + return NewRangeUnchecked(occ.Range), true +} + +// OccurrenceEnclosingRange returns the enclosing range of an occurrence and +// whether one is set. `typed_enclosing_range` takes precedence over the +// deprecated `enclosing_range` field. +func OccurrenceEnclosingRange(occ *Occurrence) (Range, bool) { + if r, ok := readTypedRange(occ.GetTypedEnclosingRange()); ok { + return r, true + } + if len(occ.EnclosingRange) != 3 && len(occ.EnclosingRange) != 4 { + return Range{}, false + } + return NewRangeUnchecked(occ.EnclosingRange), true +} + +// SetOccurrenceRange sets the source range on occ using the typed +// `typed_range` encoding (SingleLineRange when r fits on one line, +// MultiLineRange otherwise) and clears the deprecated `range` field. +func SetOccurrenceRange(occ *Occurrence, r Range) { + occ.Range = nil + if r.IsSingleLine() { + occ.TypedRange = &Occurrence_SingleLineRange{SingleLineRange: rangeToSingleLine(r)} + return + } + occ.TypedRange = &Occurrence_MultiLineRange{MultiLineRange: rangeToMultiLine(r)} +} + +// SetOccurrenceEnclosingRange is the counterpart of SetOccurrenceRange for +// the enclosing range. +func SetOccurrenceEnclosingRange(occ *Occurrence, r Range) { + occ.EnclosingRange = nil + if r.IsSingleLine() { + occ.TypedEnclosingRange = &Occurrence_SingleLineEnclosingRange{SingleLineEnclosingRange: rangeToSingleLine(r)} + return + } + occ.TypedEnclosingRange = &Occurrence_MultiLineEnclosingRange{MultiLineEnclosingRange: rangeToMultiLine(r)} +} + +// readTypedRange decodes any of the four typed-range oneof variants on +// Occurrence into a Range. Returns (Range{}, false) when typed is nil. +func readTypedRange(typed any) (Range, bool) { + switch tr := typed.(type) { + case *Occurrence_SingleLineRange: + return singleLineToRange(tr.SingleLineRange), true + case *Occurrence_MultiLineRange: + return multiLineToRange(tr.MultiLineRange), true + case *Occurrence_SingleLineEnclosingRange: + return singleLineToRange(tr.SingleLineEnclosingRange), true + case *Occurrence_MultiLineEnclosingRange: + return multiLineToRange(tr.MultiLineEnclosingRange), true + } + return Range{}, false +} + +func singleLineToRange(sr *SingleLineRange) Range { + return Range{ + Start: Position{Line: sr.Line, Character: sr.StartCharacter}, + End: Position{Line: sr.Line, Character: sr.EndCharacter}, + } +} + +func multiLineToRange(mr *MultiLineRange) Range { + return Range{ + Start: Position{Line: mr.StartLine, Character: mr.StartCharacter}, + End: Position{Line: mr.EndLine, Character: mr.EndCharacter}, + } +} + +func rangeToSingleLine(r Range) *SingleLineRange { + return &SingleLineRange{ + Line: r.Start.Line, + StartCharacter: r.Start.Character, + EndCharacter: r.End.Character, + } +} + +func rangeToMultiLine(r Range) *MultiLineRange { + return &MultiLineRange{ + StartLine: r.Start.Line, + StartCharacter: r.Start.Character, + EndLine: r.End.Line, + EndCharacter: r.End.Character, + } +} diff --git a/bindings/go/scip/occurrence_range_test.go b/bindings/go/scip/occurrence_range_test.go index d28cbce3..618ce6d3 100644 --- a/bindings/go/scip/occurrence_range_test.go +++ b/bindings/go/scip/occurrence_range_test.go @@ -12,10 +12,9 @@ func TestOccurrenceRange_TypedSingleLine(t *testing.T) { SingleLineRange: &SingleLineRange{Line: 5, StartCharacter: 2, EndCharacter: 7}, }, } - r, err := OccurrenceRange(occ) - require.NoError(t, err) + r, ok := OccurrenceRange(occ) + require.True(t, ok) require.Equal(t, Range{Start: Position{5, 2}, End: Position{5, 7}}, r) - require.True(t, HasOccurrenceRange(occ)) } func TestOccurrenceRange_TypedMultiLine(t *testing.T) { @@ -24,15 +23,15 @@ func TestOccurrenceRange_TypedMultiLine(t *testing.T) { MultiLineRange: &MultiLineRange{StartLine: 1, StartCharacter: 2, EndLine: 3, EndCharacter: 4}, }, } - r, err := OccurrenceRange(occ) - require.NoError(t, err) + r, ok := OccurrenceRange(occ) + require.True(t, ok) require.Equal(t, Range{Start: Position{1, 2}, End: Position{3, 4}}, r) } func TestOccurrenceRange_DeprecatedFallback(t *testing.T) { occ := &Occurrence{Range: []int32{2, 3, 5}} - r, err := OccurrenceRange(occ) - require.NoError(t, err) + r, ok := OccurrenceRange(occ) + require.True(t, ok) require.Equal(t, Range{Start: Position{2, 3}, End: Position{2, 5}}, r) } @@ -44,25 +43,23 @@ func TestOccurrenceRange_TypedTakesPrecedenceOverDeprecated(t *testing.T) { SingleLineRange: &SingleLineRange{Line: 5, StartCharacter: 2, EndCharacter: 7}, }, } - r, err := OccurrenceRange(occ) - require.NoError(t, err) + r, ok := OccurrenceRange(occ) + require.True(t, ok) require.Equal(t, Range{Start: Position{5, 2}, End: Position{5, 7}}, r) - - require.Equal(t, Range{Start: Position{5, 2}, End: Position{5, 7}}, OccurrenceRangeUnchecked(occ)) } func TestOccurrenceRange_Missing(t *testing.T) { occ := &Occurrence{} - _, err := OccurrenceRange(occ) - require.ErrorIs(t, err, ErrMissingRange) - require.False(t, HasOccurrenceRange(occ)) - require.Equal(t, Range{}, OccurrenceRangeUnchecked(occ)) + r, ok := OccurrenceRange(occ) + require.False(t, ok) + require.Equal(t, Range{}, r) } func TestOccurrenceRange_DeprecatedMalformed(t *testing.T) { - occ := &Occurrence{Range: []int32{1, 2}} - _, err := OccurrenceRange(occ) - require.Error(t, err) + occ := &Occurrence{Range: []int32{1, 2}} // wrong length + r, ok := OccurrenceRange(occ) + require.False(t, ok) + require.Equal(t, Range{}, r) } func TestOccurrenceEnclosingRange_TypedSingleLine(t *testing.T) { @@ -71,8 +68,7 @@ func TestOccurrenceEnclosingRange_TypedSingleLine(t *testing.T) { SingleLineEnclosingRange: &SingleLineRange{Line: 5, StartCharacter: 0, EndCharacter: 10}, }, } - r, ok, err := OccurrenceEnclosingRange(occ) - require.NoError(t, err) + r, ok := OccurrenceEnclosingRange(occ) require.True(t, ok) require.Equal(t, Range{Start: Position{5, 0}, End: Position{5, 10}}, r) } @@ -83,16 +79,14 @@ func TestOccurrenceEnclosingRange_TypedMultiLine(t *testing.T) { MultiLineEnclosingRange: &MultiLineRange{StartLine: 1, StartCharacter: 0, EndLine: 9, EndCharacter: 1}, }, } - r, ok, err := OccurrenceEnclosingRange(occ) - require.NoError(t, err) + r, ok := OccurrenceEnclosingRange(occ) require.True(t, ok) require.Equal(t, Range{Start: Position{1, 0}, End: Position{9, 1}}, r) } func TestOccurrenceEnclosingRange_DeprecatedFallback(t *testing.T) { occ := &Occurrence{EnclosingRange: []int32{2, 0, 5, 1}} - r, ok, err := OccurrenceEnclosingRange(occ) - require.NoError(t, err) + r, ok := OccurrenceEnclosingRange(occ) require.True(t, ok) require.Equal(t, Range{Start: Position{2, 0}, End: Position{5, 1}}, r) } @@ -104,16 +98,14 @@ func TestOccurrenceEnclosingRange_TypedTakesPrecedence(t *testing.T) { SingleLineEnclosingRange: &SingleLineRange{Line: 5, StartCharacter: 0, EndCharacter: 10}, }, } - r, ok, err := OccurrenceEnclosingRange(occ) - require.NoError(t, err) + r, ok := OccurrenceEnclosingRange(occ) require.True(t, ok) require.Equal(t, Range{Start: Position{5, 0}, End: Position{5, 10}}, r) } func TestOccurrenceEnclosingRange_Missing(t *testing.T) { occ := &Occurrence{} - r, ok, err := OccurrenceEnclosingRange(occ) - require.NoError(t, err) + r, ok := OccurrenceEnclosingRange(occ) require.False(t, ok) require.Equal(t, Range{}, r) } @@ -126,8 +118,8 @@ func TestSetOccurrenceRange_SingleLine(t *testing.T) { require.True(t, ok) require.Equal(t, &SingleLineRange{Line: 3, StartCharacter: 1, EndCharacter: 8}, tr.SingleLineRange) - r, err := OccurrenceRange(occ) - require.NoError(t, err) + r, ok := OccurrenceRange(occ) + require.True(t, ok) require.Equal(t, Range{Start: Position{3, 1}, End: Position{3, 8}}, r) } diff --git a/bindings/go/scip/position.go b/bindings/go/scip/position.go index 83c3dcc6..6457a349 100644 --- a/bindings/go/scip/position.go +++ b/bindings/go/scip/position.go @@ -1,9 +1,6 @@ package scip -import ( - "errors" - "fmt" -) +import "fmt" // Range represents [start, end) between two offset positions. type Range struct { @@ -198,143 +195,3 @@ func (r Range) LessStrict(other Range) bool { func (r Range) String() string { return fmt.Sprintf("%d:%d-%d:%d", r.Start.Line, r.Start.Character, r.End.Line, r.End.Character) } - -// ToSingleLineRange returns this range as a SingleLineRange. -// -// Pre-condition: r.IsSingleLine() must be true. -func (r Range) ToSingleLineRange() *SingleLineRange { - return &SingleLineRange{ - Line: r.Start.Line, - StartCharacter: r.Start.Character, - EndCharacter: r.End.Character, - } -} - -// ToMultiLineRange returns this range as a MultiLineRange. -func (r Range) ToMultiLineRange() *MultiLineRange { - return &MultiLineRange{ - StartLine: r.Start.Line, - StartCharacter: r.Start.Character, - EndLine: r.End.Line, - EndCharacter: r.End.Character, - } -} - -// rangeFromSingleLine constructs a Range from a SingleLineRange without -// validation. Used by Occurrence helpers where the typed message has already -// been produced by a proto decoder. -func rangeFromSingleLine(sr *SingleLineRange) Range { - return Range{ - Start: Position{Line: sr.Line, Character: sr.StartCharacter}, - End: Position{Line: sr.Line, Character: sr.EndCharacter}, - } -} - -// rangeFromMultiLine constructs a Range from a MultiLineRange without -// validation. -func rangeFromMultiLine(mr *MultiLineRange) Range { - return Range{ - Start: Position{Line: mr.StartLine, Character: mr.StartCharacter}, - End: Position{Line: mr.EndLine, Character: mr.EndCharacter}, - } -} - -// ErrMissingRange is returned by OccurrenceRange when an occurrence has -// neither typed_range nor the deprecated repeated-int32 range field set. -var ErrMissingRange = errors.New("occurrence has no range") - -// OccurrenceRange returns the source range of an occurrence. It reads -// `typed_range` if present (taking precedence per the schema), and otherwise -// falls back to the deprecated `repeated int32 range` field. -// -// Returns ErrMissingRange if neither encoding is set, or a RangeError if the -// deprecated field is present but malformed. -func OccurrenceRange(occ *Occurrence) (Range, error) { - switch tr := occ.GetTypedRange().(type) { - case *Occurrence_SingleLineRange: - return rangeFromSingleLine(tr.SingleLineRange), nil - case *Occurrence_MultiLineRange: - return rangeFromMultiLine(tr.MultiLineRange), nil - } - if len(occ.Range) == 0 { - return Range{}, ErrMissingRange - } - return NewRange(occ.Range) -} - -// OccurrenceRangeUnchecked returns the source range of an occurrence without -// validating the input. Like OccurrenceRange, `typed_range` takes precedence -// over the deprecated `range` field. -// -// Pre-condition: the occurrence must carry a range in one of the two -// encodings. Calling this on an occurrence with no range will return a -// zero-valued Range. -func OccurrenceRangeUnchecked(occ *Occurrence) Range { - switch tr := occ.GetTypedRange().(type) { - case *Occurrence_SingleLineRange: - return rangeFromSingleLine(tr.SingleLineRange) - case *Occurrence_MultiLineRange: - return rangeFromMultiLine(tr.MultiLineRange) - } - if len(occ.Range) == 0 { - return Range{} - } - return NewRangeUnchecked(occ.Range) -} - -// OccurrenceEnclosingRange returns the enclosing range of an occurrence, if -// any. Returns (zero, false, nil) when no enclosing range is set, (range, -// true, nil) on success, and (zero, true, err) when a deprecated -// repeated-int32 enclosing range is present but malformed. -// -// `typed_enclosing_range` takes precedence over the deprecated -// `enclosing_range` field. -func OccurrenceEnclosingRange(occ *Occurrence) (Range, bool, error) { - switch tr := occ.GetTypedEnclosingRange().(type) { - case *Occurrence_SingleLineEnclosingRange: - return rangeFromSingleLine(tr.SingleLineEnclosingRange), true, nil - case *Occurrence_MultiLineEnclosingRange: - return rangeFromMultiLine(tr.MultiLineEnclosingRange), true, nil - } - if len(occ.EnclosingRange) == 0 { - return Range{}, false, nil - } - r, err := NewRange(occ.EnclosingRange) - if err != nil { - return Range{}, true, err - } - return r, true, nil -} - -// HasOccurrenceRange reports whether an occurrence carries a source range in -// either encoding. -func HasOccurrenceRange(occ *Occurrence) bool { - if occ.GetTypedRange() != nil { - return true - } - return len(occ.Range) == 3 || len(occ.Range) == 4 -} - -// SetOccurrenceRange stores r on occ using the typed `typed_range` encoding, -// choosing SingleLineRange when r is single-line and MultiLineRange -// otherwise. The deprecated `range` field is cleared. -func SetOccurrenceRange(occ *Occurrence, r Range) { - occ.Range = nil - if r.IsSingleLine() { - occ.TypedRange = &Occurrence_SingleLineRange{SingleLineRange: r.ToSingleLineRange()} - return - } - occ.TypedRange = &Occurrence_MultiLineRange{MultiLineRange: r.ToMultiLineRange()} -} - -// SetOccurrenceEnclosingRange stores r on occ using the typed -// `typed_enclosing_range` encoding. The deprecated `enclosing_range` field is -// cleared. -func SetOccurrenceEnclosingRange(occ *Occurrence, r Range) { - occ.EnclosingRange = nil - if r.IsSingleLine() { - occ.TypedEnclosingRange = &Occurrence_SingleLineEnclosingRange{SingleLineEnclosingRange: r.ToSingleLineRange()} - return - } - occ.TypedEnclosingRange = &Occurrence_MultiLineEnclosingRange{MultiLineEnclosingRange: r.ToMultiLineRange()} -} diff --git a/bindings/go/scip/sort.go b/bindings/go/scip/sort.go index cca51466..a3023f5f 100644 --- a/bindings/go/scip/sort.go +++ b/bindings/go/scip/sort.go @@ -49,14 +49,16 @@ func FindOccurrences(occurrences []*Occurrence, targetLine, targetCharacter int3 var filtered []*Occurrence pos := Position{targetLine, targetCharacter} for _, occurrence := range occurrences { - if OccurrenceRangeUnchecked(occurrence).Contains(pos) { + if r, _ := OccurrenceRange(occurrence); r.Contains(pos) { filtered = append(filtered, occurrence) } } sort.Slice(filtered, func(i, j int) bool { // Ordered so that the least precise (largest) range comes last - return OccurrenceRangeUnchecked(filtered[i]).CompareStrict(OccurrenceRangeUnchecked(filtered[j])) > 0 + ri, _ := OccurrenceRange(filtered[i]) + rj, _ := OccurrenceRange(filtered[j]) + return ri.CompareStrict(rj) > 0 }) return filtered @@ -68,8 +70,8 @@ func FindOccurrences(occurrences []*Occurrence, targetLine, targetCharacter int3 // occurrences are sorted by symbol name. func SortOccurrences(occurrences []*Occurrence) []*Occurrence { sort.Slice(occurrences, func(i, j int) bool { - r1 := OccurrenceRangeUnchecked(occurrences[i]) - r2 := OccurrenceRangeUnchecked(occurrences[j]) + r1, _ := OccurrenceRange(occurrences[i]) + r2, _ := OccurrenceRange(occurrences[j]) if ret := r1.CompareStrict(r2); ret != 0 { return ret < 0 } @@ -83,8 +85,8 @@ func SortOccurrences(occurrences []*Occurrence) []*Occurrence { // equality, normalizing across the deprecated `repeated int32` and the typed // `typed_range` encodings. func occurrenceRangesEqual(a, b *Occurrence) bool { - ra := OccurrenceRangeUnchecked(a) - rb := OccurrenceRangeUnchecked(b) + ra, _ := OccurrenceRange(a) + rb, _ := OccurrenceRange(b) return ra.CompareStrict(rb) == 0 } diff --git a/bindings/go/scip/testutil/format.go b/bindings/go/scip/testutil/format.go index 46ddb11a..5e915901 100644 --- a/bindings/go/scip/testutil/format.go +++ b/bindings/go/scip/testutil/format.go @@ -82,8 +82,9 @@ func FormatSnapshot( } symtab := document.SymbolTable() sort.SliceStable(document.Occurrences, func(i, j int) bool { - return scip.OccurrenceRangeUnchecked(document.Occurrences[i]). - LessStrict(scip.OccurrenceRangeUnchecked(document.Occurrences[j])) + ri, _ := scip.OccurrenceRange(document.Occurrences[i]) + rj, _ := scip.OccurrenceRange(document.Occurrences[j]) + return ri.LessStrict(rj) }) var formattingError error formatSymbol := func(symbol string) string { @@ -113,9 +114,12 @@ func FormatSnapshot( b.WriteString(strings.Repeat(" ", len(commentSyntax))) b.WriteString(strings.ReplaceAll(line, "\t", " ")) b.WriteString("\n") - for i < len(document.Occurrences) && scip.OccurrenceRangeUnchecked(document.Occurrences[i]).Start.Line == int32(lineNumber) { + for i < len(document.Occurrences) { occ := document.Occurrences[i] - pos := scip.OccurrenceRangeUnchecked(occ) + pos, _ := scip.OccurrenceRange(occ) + if pos.Start.Line != int32(lineNumber) { + break + } if !pos.IsSingleLine() { i++ continue @@ -291,7 +295,7 @@ type enclosingRange struct { func enclosingRanges(occurrences []*scip.Occurrence) []enclosingRange { var enclosingRanges []enclosingRange for _, occ := range occurrences { - if r, ok, _ := scip.OccurrenceEnclosingRange(occ); ok { + if r, ok := scip.OccurrenceEnclosingRange(occ); ok { enclosingRanges = append(enclosingRanges, enclosingRange{ Range: r, Symbol: occ.Symbol, diff --git a/bindings/go/scip/testutil/test_runner.go b/bindings/go/scip/testutil/test_runner.go index c9b47548..dec2f843 100644 --- a/bindings/go/scip/testutil/test_runner.go +++ b/bindings/go/scip/testutil/test_runner.go @@ -227,8 +227,8 @@ func filterAttributesForTestCase(testCase symbolAttributeTestCase, attributes [] func attributesForOccurrencesAtLine(lineNumber int, occurrences []*scip.Occurrence) []symbolAttribute { result := []symbolAttribute{} for _, occ := range occurrences { - pos, err := scip.OccurrenceRange(occ) - if err != nil { + pos, ok := scip.OccurrenceRange(occ) + if !ok { continue } if pos.Start.Line == int32(lineNumber) { diff --git a/cmd/scip/convert.go b/cmd/scip/convert.go index e88f9354..0588c2f2 100644 --- a/cmd/scip/convert.go +++ b/cmd/scip/convert.go @@ -389,10 +389,7 @@ func (c *Converter) insertEnclosingRangeData(symbolToID map[string]int64, occs [ scip.IsLocalSymbol(occ.Symbol) { continue } - enclRange, hasEnclosing, err := scip.OccurrenceEnclosingRange(occ) - if err != nil { - return fmt.Errorf("bad enclosing range for symbol %q: %w", occ.Symbol, err) - } + enclRange, hasEnclosing := scip.OccurrenceEnclosingRange(occ) if !hasEnclosing { continue } @@ -586,16 +583,18 @@ func chunkOccurrences(occurrences []*scip.Occurrence, chunkSize int) []Chunk { return nil } + occStartLine := func(i int) int32 { + r, _ := scip.OccurrenceRange(occurrences[i]) + return r.Start.Line + } chunks := make([]Chunk, 0, len(occurrences)/chunkSize) hi := min(len(occurrences), chunkSize) for lo := 0; lo < hi && hi <= len(occurrences); { - for ; hi <= len(occurrences)-1 && - scip.OccurrenceRangeUnchecked(occurrences[hi-1]).Start.Line == - scip.OccurrenceRangeUnchecked(occurrences[hi]).Start.Line; hi++ { + for ; hi <= len(occurrences)-1 && occStartLine(hi-1) == occStartLine(hi); hi++ { } chunks = append(chunks, Chunk{ - StartLine: scip.OccurrenceRangeUnchecked(occurrences[lo]).Start.Line, - EndLine: scip.OccurrenceRangeUnchecked(occurrences[hi-1]).Start.Line, + StartLine: occStartLine(lo), + EndLine: occStartLine(hi - 1), Occurrences: occurrences[lo:hi], }) diff --git a/cmd/scip/lint.go b/cmd/scip/lint.go index a781ec17..ae283909 100644 --- a/cmd/scip/lint.go +++ b/cmd/scip/lint.go @@ -111,7 +111,8 @@ type occurrenceKey struct { } func scipOccurrenceKey(occ *scip.Occurrence) occurrenceKey { - return occurrenceKey{scip.OccurrenceRangeUnchecked(occ), occ.SymbolRoles} + r, _ := scip.OccurrenceRange(occ) + return occurrenceKey{r, occ.SymbolRoles} } type occurrenceMap = map[occurrenceKey]*scip.Occurrence @@ -199,7 +200,7 @@ func (st *symbolTable) addRelationship(sym string, path string, rel *scip.Relati } func (st *symbolTable) addOccurrence(path string, occ *scip.Occurrence) error { - occRange := scip.OccurrenceRangeUnchecked(occ) + occRange, _ := scip.OccurrenceRange(occ) err := lintSymbolString( occ.Symbol, fmt.Sprintf("occurrence at %s @ %s", path, scipRangeToString(occRange)), From 891134836cb2a3cb17b8de56f3c9b09c74135fbd Mon Sep 17 00:00:00 2001 From: jupblb Date: Wed, 3 Jun 2026 22:48:26 +0200 Subject: [PATCH 07/12] go: convert OccurrenceRange helpers to methods on *Occurrence --- bindings/go/scip/canonicalize.go | 2 +- bindings/go/scip/occurrence_range.go | 26 +++++----- bindings/go/scip/occurrence_range_test.go | 58 +++++++++++------------ bindings/go/scip/sort.go | 14 +++--- bindings/go/scip/testutil/format.go | 8 ++-- bindings/go/scip/testutil/test_runner.go | 2 +- cmd/scip/convert.go | 4 +- cmd/scip/lint.go | 4 +- reprolang/repro/scip.go | 2 +- 9 files changed, 60 insertions(+), 60 deletions(-) diff --git a/bindings/go/scip/canonicalize.go b/bindings/go/scip/canonicalize.go index d31e672a..0edb46aa 100644 --- a/bindings/go/scip/canonicalize.go +++ b/bindings/go/scip/canonicalize.go @@ -30,7 +30,7 @@ func CanonicalizeOccurrences(occurrences []*Occurrence) []*Occurrence { func RemoveIllegalOccurrences(occurrences []*Occurrence) []*Occurrence { filtered := occurrences[:0] for _, occurrence := range occurrences { - if _, ok := OccurrenceRange(occurrence); !ok { + if _, ok := occurrence.SourceRange(); !ok { continue } diff --git a/bindings/go/scip/occurrence_range.go b/bindings/go/scip/occurrence_range.go index 19bf90ee..e55c9c86 100644 --- a/bindings/go/scip/occurrence_range.go +++ b/bindings/go/scip/occurrence_range.go @@ -1,10 +1,10 @@ package scip -// OccurrenceRange returns the source range of an occurrence and whether one -// is set. `typed_range` takes precedence over the deprecated `range` field. +// SourceRange returns the source range of this occurrence and whether one is +// set. `typed_range` takes precedence over the deprecated `range` field. // Malformed deprecated ranges (length != 3 or 4) are reported as missing; use // `scip lint` to surface them. -func OccurrenceRange(occ *Occurrence) (Range, bool) { +func (occ *Occurrence) SourceRange() (Range, bool) { if r, ok := readTypedRange(occ.GetTypedRange()); ok { return r, true } @@ -14,10 +14,10 @@ func OccurrenceRange(occ *Occurrence) (Range, bool) { return NewRangeUnchecked(occ.Range), true } -// OccurrenceEnclosingRange returns the enclosing range of an occurrence and -// whether one is set. `typed_enclosing_range` takes precedence over the +// EnclosingSourceRange returns the enclosing source range of this occurrence +// and whether one is set. `typed_enclosing_range` takes precedence over the // deprecated `enclosing_range` field. -func OccurrenceEnclosingRange(occ *Occurrence) (Range, bool) { +func (occ *Occurrence) EnclosingSourceRange() (Range, bool) { if r, ok := readTypedRange(occ.GetTypedEnclosingRange()); ok { return r, true } @@ -27,10 +27,10 @@ func OccurrenceEnclosingRange(occ *Occurrence) (Range, bool) { return NewRangeUnchecked(occ.EnclosingRange), true } -// SetOccurrenceRange sets the source range on occ using the typed -// `typed_range` encoding (SingleLineRange when r fits on one line, -// MultiLineRange otherwise) and clears the deprecated `range` field. -func SetOccurrenceRange(occ *Occurrence, r Range) { +// SetSourceRange sets the source range using the typed `typed_range` encoding +// (SingleLineRange when r fits on one line, MultiLineRange otherwise) and +// clears the deprecated `range` field. +func (occ *Occurrence) SetSourceRange(r Range) { occ.Range = nil if r.IsSingleLine() { occ.TypedRange = &Occurrence_SingleLineRange{SingleLineRange: rangeToSingleLine(r)} @@ -39,9 +39,9 @@ func SetOccurrenceRange(occ *Occurrence, r Range) { occ.TypedRange = &Occurrence_MultiLineRange{MultiLineRange: rangeToMultiLine(r)} } -// SetOccurrenceEnclosingRange is the counterpart of SetOccurrenceRange for -// the enclosing range. -func SetOccurrenceEnclosingRange(occ *Occurrence, r Range) { +// SetEnclosingSourceRange is the counterpart of SetSourceRange for the +// enclosing range. +func (occ *Occurrence) SetEnclosingSourceRange(r Range) { occ.EnclosingRange = nil if r.IsSingleLine() { occ.TypedEnclosingRange = &Occurrence_SingleLineEnclosingRange{SingleLineEnclosingRange: rangeToSingleLine(r)} diff --git a/bindings/go/scip/occurrence_range_test.go b/bindings/go/scip/occurrence_range_test.go index 618ce6d3..17b94d3a 100644 --- a/bindings/go/scip/occurrence_range_test.go +++ b/bindings/go/scip/occurrence_range_test.go @@ -6,36 +6,36 @@ import ( "github.com/stretchr/testify/require" ) -func TestOccurrenceRange_TypedSingleLine(t *testing.T) { +func TestOccurrence_SourceRange_TypedSingleLine(t *testing.T) { occ := &Occurrence{ TypedRange: &Occurrence_SingleLineRange{ SingleLineRange: &SingleLineRange{Line: 5, StartCharacter: 2, EndCharacter: 7}, }, } - r, ok := OccurrenceRange(occ) + r, ok := occ.SourceRange() require.True(t, ok) require.Equal(t, Range{Start: Position{5, 2}, End: Position{5, 7}}, r) } -func TestOccurrenceRange_TypedMultiLine(t *testing.T) { +func TestOccurrence_SourceRange_TypedMultiLine(t *testing.T) { occ := &Occurrence{ TypedRange: &Occurrence_MultiLineRange{ MultiLineRange: &MultiLineRange{StartLine: 1, StartCharacter: 2, EndLine: 3, EndCharacter: 4}, }, } - r, ok := OccurrenceRange(occ) + r, ok := occ.SourceRange() require.True(t, ok) require.Equal(t, Range{Start: Position{1, 2}, End: Position{3, 4}}, r) } -func TestOccurrenceRange_DeprecatedFallback(t *testing.T) { +func TestOccurrence_SourceRange_DeprecatedFallback(t *testing.T) { occ := &Occurrence{Range: []int32{2, 3, 5}} - r, ok := OccurrenceRange(occ) + r, ok := occ.SourceRange() require.True(t, ok) require.Equal(t, Range{Start: Position{2, 3}, End: Position{2, 5}}, r) } -func TestOccurrenceRange_TypedTakesPrecedenceOverDeprecated(t *testing.T) { +func TestOccurrence_SourceRange_TypedTakesPrecedenceOverDeprecated(t *testing.T) { // Per scip.proto, when both encodings are present the typed form wins. occ := &Occurrence{ Range: []int32{100, 100, 100}, // deliberately disagrees @@ -43,97 +43,97 @@ func TestOccurrenceRange_TypedTakesPrecedenceOverDeprecated(t *testing.T) { SingleLineRange: &SingleLineRange{Line: 5, StartCharacter: 2, EndCharacter: 7}, }, } - r, ok := OccurrenceRange(occ) + r, ok := occ.SourceRange() require.True(t, ok) require.Equal(t, Range{Start: Position{5, 2}, End: Position{5, 7}}, r) } -func TestOccurrenceRange_Missing(t *testing.T) { +func TestOccurrence_SourceRange_Missing(t *testing.T) { occ := &Occurrence{} - r, ok := OccurrenceRange(occ) + r, ok := occ.SourceRange() require.False(t, ok) require.Equal(t, Range{}, r) } -func TestOccurrenceRange_DeprecatedMalformed(t *testing.T) { +func TestOccurrence_SourceRange_DeprecatedMalformed(t *testing.T) { occ := &Occurrence{Range: []int32{1, 2}} // wrong length - r, ok := OccurrenceRange(occ) + r, ok := occ.SourceRange() require.False(t, ok) require.Equal(t, Range{}, r) } -func TestOccurrenceEnclosingRange_TypedSingleLine(t *testing.T) { +func TestOccurrence_EnclosingSourceRange_TypedSingleLine(t *testing.T) { occ := &Occurrence{ TypedEnclosingRange: &Occurrence_SingleLineEnclosingRange{ SingleLineEnclosingRange: &SingleLineRange{Line: 5, StartCharacter: 0, EndCharacter: 10}, }, } - r, ok := OccurrenceEnclosingRange(occ) + r, ok := occ.EnclosingSourceRange() require.True(t, ok) require.Equal(t, Range{Start: Position{5, 0}, End: Position{5, 10}}, r) } -func TestOccurrenceEnclosingRange_TypedMultiLine(t *testing.T) { +func TestOccurrence_EnclosingSourceRange_TypedMultiLine(t *testing.T) { occ := &Occurrence{ TypedEnclosingRange: &Occurrence_MultiLineEnclosingRange{ MultiLineEnclosingRange: &MultiLineRange{StartLine: 1, StartCharacter: 0, EndLine: 9, EndCharacter: 1}, }, } - r, ok := OccurrenceEnclosingRange(occ) + r, ok := occ.EnclosingSourceRange() require.True(t, ok) require.Equal(t, Range{Start: Position{1, 0}, End: Position{9, 1}}, r) } -func TestOccurrenceEnclosingRange_DeprecatedFallback(t *testing.T) { +func TestOccurrence_EnclosingSourceRange_DeprecatedFallback(t *testing.T) { occ := &Occurrence{EnclosingRange: []int32{2, 0, 5, 1}} - r, ok := OccurrenceEnclosingRange(occ) + r, ok := occ.EnclosingSourceRange() require.True(t, ok) require.Equal(t, Range{Start: Position{2, 0}, End: Position{5, 1}}, r) } -func TestOccurrenceEnclosingRange_TypedTakesPrecedence(t *testing.T) { +func TestOccurrence_EnclosingSourceRange_TypedTakesPrecedence(t *testing.T) { occ := &Occurrence{ EnclosingRange: []int32{100, 100, 100}, TypedEnclosingRange: &Occurrence_SingleLineEnclosingRange{ SingleLineEnclosingRange: &SingleLineRange{Line: 5, StartCharacter: 0, EndCharacter: 10}, }, } - r, ok := OccurrenceEnclosingRange(occ) + r, ok := occ.EnclosingSourceRange() require.True(t, ok) require.Equal(t, Range{Start: Position{5, 0}, End: Position{5, 10}}, r) } -func TestOccurrenceEnclosingRange_Missing(t *testing.T) { +func TestOccurrence_EnclosingSourceRange_Missing(t *testing.T) { occ := &Occurrence{} - r, ok := OccurrenceEnclosingRange(occ) + r, ok := occ.EnclosingSourceRange() require.False(t, ok) require.Equal(t, Range{}, r) } -func TestSetOccurrenceRange_SingleLine(t *testing.T) { +func TestOccurrence_SetSourceRange_SingleLine(t *testing.T) { occ := &Occurrence{Range: []int32{99, 99, 99}} - SetOccurrenceRange(occ, Range{Start: Position{3, 1}, End: Position{3, 8}}) + occ.SetSourceRange(Range{Start: Position{3, 1}, End: Position{3, 8}}) require.Nil(t, occ.Range) tr, ok := occ.TypedRange.(*Occurrence_SingleLineRange) require.True(t, ok) require.Equal(t, &SingleLineRange{Line: 3, StartCharacter: 1, EndCharacter: 8}, tr.SingleLineRange) - r, ok := OccurrenceRange(occ) + r, ok := occ.SourceRange() require.True(t, ok) require.Equal(t, Range{Start: Position{3, 1}, End: Position{3, 8}}, r) } -func TestSetOccurrenceRange_MultiLine(t *testing.T) { +func TestOccurrence_SetSourceRange_MultiLine(t *testing.T) { occ := &Occurrence{} - SetOccurrenceRange(occ, Range{Start: Position{1, 0}, End: Position{4, 2}}) + occ.SetSourceRange(Range{Start: Position{1, 0}, End: Position{4, 2}}) tr, ok := occ.TypedRange.(*Occurrence_MultiLineRange) require.True(t, ok) require.Equal(t, &MultiLineRange{StartLine: 1, StartCharacter: 0, EndLine: 4, EndCharacter: 2}, tr.MultiLineRange) } -func TestSetOccurrenceEnclosingRange(t *testing.T) { +func TestOccurrence_SetEnclosingSourceRange(t *testing.T) { occ := &Occurrence{EnclosingRange: []int32{99, 99, 99}} - SetOccurrenceEnclosingRange(occ, Range{Start: Position{1, 0}, End: Position{5, 1}}) + occ.SetEnclosingSourceRange(Range{Start: Position{1, 0}, End: Position{5, 1}}) require.Nil(t, occ.EnclosingRange) tr, ok := occ.TypedEnclosingRange.(*Occurrence_MultiLineEnclosingRange) require.True(t, ok) diff --git a/bindings/go/scip/sort.go b/bindings/go/scip/sort.go index a3023f5f..0e7c6ac6 100644 --- a/bindings/go/scip/sort.go +++ b/bindings/go/scip/sort.go @@ -49,15 +49,15 @@ func FindOccurrences(occurrences []*Occurrence, targetLine, targetCharacter int3 var filtered []*Occurrence pos := Position{targetLine, targetCharacter} for _, occurrence := range occurrences { - if r, _ := OccurrenceRange(occurrence); r.Contains(pos) { + if r, _ := occurrence.SourceRange(); r.Contains(pos) { filtered = append(filtered, occurrence) } } sort.Slice(filtered, func(i, j int) bool { // Ordered so that the least precise (largest) range comes last - ri, _ := OccurrenceRange(filtered[i]) - rj, _ := OccurrenceRange(filtered[j]) + ri, _ := filtered[i].SourceRange() + rj, _ := filtered[j].SourceRange() return ri.CompareStrict(rj) > 0 }) @@ -70,8 +70,8 @@ func FindOccurrences(occurrences []*Occurrence, targetLine, targetCharacter int3 // occurrences are sorted by symbol name. func SortOccurrences(occurrences []*Occurrence) []*Occurrence { sort.Slice(occurrences, func(i, j int) bool { - r1, _ := OccurrenceRange(occurrences[i]) - r2, _ := OccurrenceRange(occurrences[j]) + r1, _ := occurrences[i].SourceRange() + r2, _ := occurrences[j].SourceRange() if ret := r1.CompareStrict(r2); ret != 0 { return ret < 0 } @@ -85,8 +85,8 @@ func SortOccurrences(occurrences []*Occurrence) []*Occurrence { // equality, normalizing across the deprecated `repeated int32` and the typed // `typed_range` encodings. func occurrenceRangesEqual(a, b *Occurrence) bool { - ra, _ := OccurrenceRange(a) - rb, _ := OccurrenceRange(b) + ra, _ := a.SourceRange() + rb, _ := b.SourceRange() return ra.CompareStrict(rb) == 0 } diff --git a/bindings/go/scip/testutil/format.go b/bindings/go/scip/testutil/format.go index 5e915901..942f55a2 100644 --- a/bindings/go/scip/testutil/format.go +++ b/bindings/go/scip/testutil/format.go @@ -82,8 +82,8 @@ func FormatSnapshot( } symtab := document.SymbolTable() sort.SliceStable(document.Occurrences, func(i, j int) bool { - ri, _ := scip.OccurrenceRange(document.Occurrences[i]) - rj, _ := scip.OccurrenceRange(document.Occurrences[j]) + ri, _ := document.Occurrences[i].SourceRange() + rj, _ := document.Occurrences[j].SourceRange() return ri.LessStrict(rj) }) var formattingError error @@ -116,7 +116,7 @@ func FormatSnapshot( b.WriteString("\n") for i < len(document.Occurrences) { occ := document.Occurrences[i] - pos, _ := scip.OccurrenceRange(occ) + pos, _ := occ.SourceRange() if pos.Start.Line != int32(lineNumber) { break } @@ -295,7 +295,7 @@ type enclosingRange struct { func enclosingRanges(occurrences []*scip.Occurrence) []enclosingRange { var enclosingRanges []enclosingRange for _, occ := range occurrences { - if r, ok := scip.OccurrenceEnclosingRange(occ); ok { + if r, ok := occ.EnclosingSourceRange(); ok { enclosingRanges = append(enclosingRanges, enclosingRange{ Range: r, Symbol: occ.Symbol, diff --git a/bindings/go/scip/testutil/test_runner.go b/bindings/go/scip/testutil/test_runner.go index dec2f843..41155fbf 100644 --- a/bindings/go/scip/testutil/test_runner.go +++ b/bindings/go/scip/testutil/test_runner.go @@ -227,7 +227,7 @@ func filterAttributesForTestCase(testCase symbolAttributeTestCase, attributes [] func attributesForOccurrencesAtLine(lineNumber int, occurrences []*scip.Occurrence) []symbolAttribute { result := []symbolAttribute{} for _, occ := range occurrences { - pos, ok := scip.OccurrenceRange(occ) + pos, ok := occ.SourceRange() if !ok { continue } diff --git a/cmd/scip/convert.go b/cmd/scip/convert.go index 0588c2f2..5c47f281 100644 --- a/cmd/scip/convert.go +++ b/cmd/scip/convert.go @@ -389,7 +389,7 @@ func (c *Converter) insertEnclosingRangeData(symbolToID map[string]int64, occs [ scip.IsLocalSymbol(occ.Symbol) { continue } - enclRange, hasEnclosing := scip.OccurrenceEnclosingRange(occ) + enclRange, hasEnclosing := occ.EnclosingSourceRange() if !hasEnclosing { continue } @@ -584,7 +584,7 @@ func chunkOccurrences(occurrences []*scip.Occurrence, chunkSize int) []Chunk { } occStartLine := func(i int) int32 { - r, _ := scip.OccurrenceRange(occurrences[i]) + r, _ := occurrences[i].SourceRange() return r.Start.Line } chunks := make([]Chunk, 0, len(occurrences)/chunkSize) diff --git a/cmd/scip/lint.go b/cmd/scip/lint.go index ae283909..8e0ed895 100644 --- a/cmd/scip/lint.go +++ b/cmd/scip/lint.go @@ -111,7 +111,7 @@ type occurrenceKey struct { } func scipOccurrenceKey(occ *scip.Occurrence) occurrenceKey { - r, _ := scip.OccurrenceRange(occ) + r, _ := occ.SourceRange() return occurrenceKey{r, occ.SymbolRoles} } @@ -200,7 +200,7 @@ func (st *symbolTable) addRelationship(sym string, path string, rel *scip.Relati } func (st *symbolTable) addOccurrence(path string, occ *scip.Occurrence) error { - occRange, _ := scip.OccurrenceRange(occ) + occRange, _ := occ.SourceRange() err := lintSymbolString( occ.Symbol, fmt.Sprintf("occurrence at %s @ %s", path, scipRangeToString(occRange)), diff --git a/reprolang/repro/scip.go b/reprolang/repro/scip.go index ae3c81ee..bb208822 100644 --- a/reprolang/repro/scip.go +++ b/reprolang/repro/scip.go @@ -21,7 +21,7 @@ func (i *identifier) occurrence(roles scip.SymbolRole) *scip.Occurrence { SymbolRoles: int32(roles), Diagnostics: diagnostics, } - scip.SetOccurrenceRange(occ, *i.position) + occ.SetSourceRange(*i.position) return occ } From 0571eebf2c8750ab337e00d997bf2d33f6e4b5c1 Mon Sep 17 00:00:00 2001 From: jupblb Date: Wed, 3 Jun 2026 22:56:05 +0200 Subject: [PATCH 08/12] go: add ToRange/To{Single,Multi}LineRange conversion methods --- bindings/go/scip/occurrence_range.go | 57 ++++++++++------------------ bindings/go/scip/position.go | 21 ++++++++++ 2 files changed, 42 insertions(+), 36 deletions(-) diff --git a/bindings/go/scip/occurrence_range.go b/bindings/go/scip/occurrence_range.go index e55c9c86..1ad3329f 100644 --- a/bindings/go/scip/occurrence_range.go +++ b/bindings/go/scip/occurrence_range.go @@ -33,10 +33,10 @@ func (occ *Occurrence) EnclosingSourceRange() (Range, bool) { func (occ *Occurrence) SetSourceRange(r Range) { occ.Range = nil if r.IsSingleLine() { - occ.TypedRange = &Occurrence_SingleLineRange{SingleLineRange: rangeToSingleLine(r)} + occ.TypedRange = &Occurrence_SingleLineRange{SingleLineRange: r.ToSingleLineRange()} return } - occ.TypedRange = &Occurrence_MultiLineRange{MultiLineRange: rangeToMultiLine(r)} + occ.TypedRange = &Occurrence_MultiLineRange{MultiLineRange: r.ToMultiLineRange()} } // SetEnclosingSourceRange is the counterpart of SetSourceRange for the @@ -44,55 +44,40 @@ func (occ *Occurrence) SetSourceRange(r Range) { func (occ *Occurrence) SetEnclosingSourceRange(r Range) { occ.EnclosingRange = nil if r.IsSingleLine() { - occ.TypedEnclosingRange = &Occurrence_SingleLineEnclosingRange{SingleLineEnclosingRange: rangeToSingleLine(r)} + occ.TypedEnclosingRange = &Occurrence_SingleLineEnclosingRange{SingleLineEnclosingRange: r.ToSingleLineRange()} return } - occ.TypedEnclosingRange = &Occurrence_MultiLineEnclosingRange{MultiLineEnclosingRange: rangeToMultiLine(r)} + occ.TypedEnclosingRange = &Occurrence_MultiLineEnclosingRange{MultiLineEnclosingRange: r.ToMultiLineRange()} } -// readTypedRange decodes any of the four typed-range oneof variants on -// Occurrence into a Range. Returns (Range{}, false) when typed is nil. -func readTypedRange(typed any) (Range, bool) { - switch tr := typed.(type) { - case *Occurrence_SingleLineRange: - return singleLineToRange(tr.SingleLineRange), true - case *Occurrence_MultiLineRange: - return multiLineToRange(tr.MultiLineRange), true - case *Occurrence_SingleLineEnclosingRange: - return singleLineToRange(tr.SingleLineEnclosingRange), true - case *Occurrence_MultiLineEnclosingRange: - return multiLineToRange(tr.MultiLineEnclosingRange), true - } - return Range{}, false -} - -func singleLineToRange(sr *SingleLineRange) Range { +// ToRange returns this single-line range as a Range. +func (sr *SingleLineRange) ToRange() Range { return Range{ Start: Position{Line: sr.Line, Character: sr.StartCharacter}, End: Position{Line: sr.Line, Character: sr.EndCharacter}, } } -func multiLineToRange(mr *MultiLineRange) Range { +// ToRange returns this multi-line range as a Range. +func (mr *MultiLineRange) ToRange() Range { return Range{ Start: Position{Line: mr.StartLine, Character: mr.StartCharacter}, End: Position{Line: mr.EndLine, Character: mr.EndCharacter}, } } -func rangeToSingleLine(r Range) *SingleLineRange { - return &SingleLineRange{ - Line: r.Start.Line, - StartCharacter: r.Start.Character, - EndCharacter: r.End.Character, - } -} - -func rangeToMultiLine(r Range) *MultiLineRange { - return &MultiLineRange{ - StartLine: r.Start.Line, - StartCharacter: r.Start.Character, - EndLine: r.End.Line, - EndCharacter: r.End.Character, +// readTypedRange decodes any of the four typed-range oneof variants on +// Occurrence into a Range. Returns (Range{}, false) when typed is nil. +func readTypedRange(typed any) (Range, bool) { + switch tr := typed.(type) { + case *Occurrence_SingleLineRange: + return tr.SingleLineRange.ToRange(), true + case *Occurrence_MultiLineRange: + return tr.MultiLineRange.ToRange(), true + case *Occurrence_SingleLineEnclosingRange: + return tr.SingleLineEnclosingRange.ToRange(), true + case *Occurrence_MultiLineEnclosingRange: + return tr.MultiLineEnclosingRange.ToRange(), true } + return Range{}, false } diff --git a/bindings/go/scip/position.go b/bindings/go/scip/position.go index 6457a349..b04f3210 100644 --- a/bindings/go/scip/position.go +++ b/bindings/go/scip/position.go @@ -139,6 +139,27 @@ func (r Range) SCIPRange() []int32 { return []int32{r.Start.Line, r.Start.Character, r.End.Line, r.End.Character} } +// ToSingleLineRange returns r as a SingleLineRange. +// +// Pre-condition: r.IsSingleLine() must be true. +func (r Range) ToSingleLineRange() *SingleLineRange { + return &SingleLineRange{ + Line: r.Start.Line, + StartCharacter: r.Start.Character, + EndCharacter: r.End.Character, + } +} + +// ToMultiLineRange returns r as a MultiLineRange. +func (r Range) ToMultiLineRange() *MultiLineRange { + return &MultiLineRange{ + StartLine: r.Start.Line, + StartCharacter: r.Start.Character, + EndLine: r.End.Line, + EndCharacter: r.End.Character, + } +} + // Contains checks if position is within the range func (r Range) Contains(position Position) bool { return !position.Less(r.Start) && position.Less(r.End) From 0fca7dabcb52dc1859d2bec73051270738ee94ee Mon Sep 17 00:00:00 2001 From: jupblb Date: Wed, 3 Jun 2026 23:01:44 +0200 Subject: [PATCH 09/12] go: add Compare/Contains methods on *Occurrence --- bindings/go/scip/flatten.go | 6 +--- bindings/go/scip/occurrence_range.go | 24 ++++++++++++++++ bindings/go/scip/occurrence_range_test.go | 34 +++++++++++++++++++++++ bindings/go/scip/sort.go | 30 +++----------------- 4 files changed, 63 insertions(+), 31 deletions(-) diff --git a/bindings/go/scip/flatten.go b/bindings/go/scip/flatten.go index 4584d01f..7e5592c1 100644 --- a/bindings/go/scip/flatten.go +++ b/bindings/go/scip/flatten.go @@ -64,11 +64,7 @@ func FlattenOccurrences(occurrences []*Occurrence) []*Occurrence { for _, occurrence := range occurrences[1:] { top := flattened[len(flattened)-1] - if !occurrenceRangesEqual(top, occurrence) { - flattened = append(flattened, occurrence) - continue - } - if top.Symbol != occurrence.Symbol { + if top.Compare(occurrence) != 0 { flattened = append(flattened, occurrence) continue } diff --git a/bindings/go/scip/occurrence_range.go b/bindings/go/scip/occurrence_range.go index 1ad3329f..a3e32b70 100644 --- a/bindings/go/scip/occurrence_range.go +++ b/bindings/go/scip/occurrence_range.go @@ -1,5 +1,7 @@ package scip +import "strings" + // SourceRange returns the source range of this occurrence and whether one is // set. `typed_range` takes precedence over the deprecated `range` field. // Malformed deprecated ranges (length != 3 or 4) are reported as missing; use @@ -50,6 +52,28 @@ func (occ *Occurrence) SetEnclosingSourceRange(r Range) { occ.TypedEnclosingRange = &Occurrence_MultiLineEnclosingRange{MultiLineEnclosingRange: r.ToMultiLineRange()} } +// Compare orders occurrences in the canonical SCIP ordering: ascending by +// source range, with symbol name as a tiebreaker. Returns -1, 0, or +1. +// +// Occurrences missing a source range compare as if their range were the +// zero range; such occurrences are illegal per the SCIP spec and should be +// surfaced via `scip lint`. +func (occ *Occurrence) Compare(other *Occurrence) int { + r1, _ := occ.SourceRange() + r2, _ := other.SourceRange() + if c := r1.CompareStrict(r2); c != 0 { + return c + } + return strings.Compare(occ.Symbol, other.Symbol) +} + +// Contains reports whether the source range of this occurrence contains the +// given position. Returns false if the occurrence has no range. +func (occ *Occurrence) Contains(pos Position) bool { + r, ok := occ.SourceRange() + return ok && r.Contains(pos) +} + // ToRange returns this single-line range as a Range. func (sr *SingleLineRange) ToRange() Range { return Range{ diff --git a/bindings/go/scip/occurrence_range_test.go b/bindings/go/scip/occurrence_range_test.go index 17b94d3a..c2368ff8 100644 --- a/bindings/go/scip/occurrence_range_test.go +++ b/bindings/go/scip/occurrence_range_test.go @@ -139,3 +139,37 @@ func TestOccurrence_SetEnclosingSourceRange(t *testing.T) { require.True(t, ok) require.Equal(t, &MultiLineRange{StartLine: 1, StartCharacter: 0, EndLine: 5, EndCharacter: 1}, tr.MultiLineEnclosingRange) } + +func TestOccurrence_Compare(t *testing.T) { + mkOcc := func(r []int32, sym string) *Occurrence { + return &Occurrence{Range: r, Symbol: sym} + } + tests := []struct { + name string + a, b *Occurrence + want int + }{ + {"equal", mkOcc([]int32{1, 0, 5}, "x"), mkOcc([]int32{1, 0, 5}, "x"), 0}, + {"earlier range", mkOcc([]int32{0, 0, 5}, "x"), mkOcc([]int32{1, 0, 5}, "x"), -1}, + {"later range", mkOcc([]int32{2, 0, 5}, "x"), mkOcc([]int32{1, 0, 5}, "x"), 1}, + {"same range, earlier symbol", mkOcc([]int32{1, 0, 5}, "a"), mkOcc([]int32{1, 0, 5}, "b"), -1}, + {"same range, later symbol", mkOcc([]int32{1, 0, 5}, "b"), mkOcc([]int32{1, 0, 5}, "a"), 1}, + } + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + require.Equal(t, tc.want, tc.a.Compare(tc.b)) + }) + } +} + +func TestOccurrence_Contains(t *testing.T) { + occ := &Occurrence{Range: []int32{2, 5, 10}} + require.True(t, occ.Contains(Position{2, 5})) + require.True(t, occ.Contains(Position{2, 9})) + require.False(t, occ.Contains(Position{2, 4})) + require.False(t, occ.Contains(Position{2, 10})) + require.False(t, occ.Contains(Position{3, 0})) + + empty := &Occurrence{} + require.False(t, empty.Contains(Position{0, 0})) +} diff --git a/bindings/go/scip/sort.go b/bindings/go/scip/sort.go index 0e7c6ac6..e0a97a94 100644 --- a/bindings/go/scip/sort.go +++ b/bindings/go/scip/sort.go @@ -49,18 +49,13 @@ func FindOccurrences(occurrences []*Occurrence, targetLine, targetCharacter int3 var filtered []*Occurrence pos := Position{targetLine, targetCharacter} for _, occurrence := range occurrences { - if r, _ := occurrence.SourceRange(); r.Contains(pos) { + if occurrence.Contains(pos) { filtered = append(filtered, occurrence) } } - sort.Slice(filtered, func(i, j int) bool { - // Ordered so that the least precise (largest) range comes last - ri, _ := filtered[i].SourceRange() - rj, _ := filtered[j].SourceRange() - return ri.CompareStrict(rj) > 0 - }) - + // Ordered so that the least precise (largest) range comes last. + slices.SortFunc(filtered, func(a, b *Occurrence) int { return b.Compare(a) }) return filtered } @@ -69,27 +64,10 @@ func FindOccurrences(occurrences []*Occurrence, targetLine, targetCharacter int3 // come before the enclosed. If there are multiple occurrences with the exact same range, then the // occurrences are sorted by symbol name. func SortOccurrences(occurrences []*Occurrence) []*Occurrence { - sort.Slice(occurrences, func(i, j int) bool { - r1, _ := occurrences[i].SourceRange() - r2, _ := occurrences[j].SourceRange() - if ret := r1.CompareStrict(r2); ret != 0 { - return ret < 0 - } - return occurrences[i].Symbol < occurrences[j].Symbol - }) - + slices.SortFunc(occurrences, (*Occurrence).Compare) return occurrences } -// occurrenceRangesEqual compares the source ranges of two occurrences for -// equality, normalizing across the deprecated `repeated int32` and the typed -// `typed_range` encodings. -func occurrenceRangesEqual(a, b *Occurrence) bool { - ra, _ := a.SourceRange() - rb, _ := b.SourceRange() - return ra.CompareStrict(rb) == 0 -} - // SortRanges sorts the given range slice (in-place) and returns it (for convenience). Ranges are // sorted in ascending order of starting position, where enclosing ranges come before the enclosed. func SortRanges(ranges []Range) []Range { From d5c9ed615dbfe633508aaddd2d78ad85a70c297c Mon Sep 17 00:00:00 2001 From: jupblb Date: Wed, 3 Jun 2026 23:07:45 +0200 Subject: [PATCH 10/12] go: add Range.AsTypedRange/AsTypedEnclosingRange helpers --- bindings/go/scip/occurrence_range.go | 37 +++++++++++++++++++--------- 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/bindings/go/scip/occurrence_range.go b/bindings/go/scip/occurrence_range.go index a3e32b70..acb4e474 100644 --- a/bindings/go/scip/occurrence_range.go +++ b/bindings/go/scip/occurrence_range.go @@ -29,27 +29,40 @@ func (occ *Occurrence) EnclosingSourceRange() (Range, bool) { return NewRangeUnchecked(occ.EnclosingRange), true } +// AsTypedRange returns this range as the appropriate Occurrence.TypedRange +// oneof variant (SingleLineRange when r fits on one line, MultiLineRange +// otherwise). Useful for setting the source range directly in an Occurrence +// struct literal: +// +// &Occurrence{TypedRange: r.AsTypedRange(), ...} +func (r Range) AsTypedRange() isOccurrence_TypedRange { + if r.IsSingleLine() { + return &Occurrence_SingleLineRange{SingleLineRange: r.ToSingleLineRange()} + } + return &Occurrence_MultiLineRange{MultiLineRange: r.ToMultiLineRange()} +} + +// AsTypedEnclosingRange is the counterpart of AsTypedRange for the +// `typed_enclosing_range` oneof. +func (r Range) AsTypedEnclosingRange() isOccurrence_TypedEnclosingRange { + if r.IsSingleLine() { + return &Occurrence_SingleLineEnclosingRange{SingleLineEnclosingRange: r.ToSingleLineRange()} + } + return &Occurrence_MultiLineEnclosingRange{MultiLineEnclosingRange: r.ToMultiLineRange()} +} + // SetSourceRange sets the source range using the typed `typed_range` encoding -// (SingleLineRange when r fits on one line, MultiLineRange otherwise) and -// clears the deprecated `range` field. +// and clears the deprecated `range` field. func (occ *Occurrence) SetSourceRange(r Range) { occ.Range = nil - if r.IsSingleLine() { - occ.TypedRange = &Occurrence_SingleLineRange{SingleLineRange: r.ToSingleLineRange()} - return - } - occ.TypedRange = &Occurrence_MultiLineRange{MultiLineRange: r.ToMultiLineRange()} + occ.TypedRange = r.AsTypedRange() } // SetEnclosingSourceRange is the counterpart of SetSourceRange for the // enclosing range. func (occ *Occurrence) SetEnclosingSourceRange(r Range) { occ.EnclosingRange = nil - if r.IsSingleLine() { - occ.TypedEnclosingRange = &Occurrence_SingleLineEnclosingRange{SingleLineEnclosingRange: r.ToSingleLineRange()} - return - } - occ.TypedEnclosingRange = &Occurrence_MultiLineEnclosingRange{MultiLineEnclosingRange: r.ToMultiLineRange()} + occ.TypedEnclosingRange = r.AsTypedEnclosingRange() } // Compare orders occurrences in the canonical SCIP ordering: ascending by From 870c8304428b4cd38e2a7df96cdc9c2a9519e2d1 Mon Sep 17 00:00:00 2001 From: jupblb Date: Wed, 3 Jun 2026 23:07:50 +0200 Subject: [PATCH 11/12] repro: set typed source range as Occurrence struct field --- reprolang/repro/ast.go | 6 +++--- reprolang/repro/scip.go | 5 ++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/reprolang/repro/ast.go b/reprolang/repro/ast.go index 78cd7d09..2f60376b 100644 --- a/reprolang/repro/ast.go +++ b/reprolang/repro/ast.go @@ -34,7 +34,7 @@ type identifier struct { value string symbol string isLocal bool - position *scip.Range + position scip.Range } func newIdentifier(s *reproSourceFile, n *sitter.Node) *identifier { @@ -74,8 +74,8 @@ type relationshipsStatement struct { relations relationships } -func NewRangePositionFromNode(node *sitter.Node) *scip.Range { - return &scip.Range{ +func NewRangePositionFromNode(node *sitter.Node) scip.Range { + return scip.Range{ Start: scip.Position{ Line: int32(node.StartPosition().Row), Character: int32(node.StartPosition().Column), diff --git a/reprolang/repro/scip.go b/reprolang/repro/scip.go index bb208822..d33be087 100644 --- a/reprolang/repro/scip.go +++ b/reprolang/repro/scip.go @@ -16,13 +16,12 @@ func (i *identifier) occurrence(roles scip.SymbolRole) *scip.Occurrence { }} } - occ := &scip.Occurrence{ + return &scip.Occurrence{ Symbol: i.symbol, SymbolRoles: int32(roles), Diagnostics: diagnostics, + TypedRange: i.position.AsTypedRange(), } - occ.SetSourceRange(*i.position) - return occ } func (s *reproSourceFile) symbols() []*scip.SymbolInformation { From 032d9966d09020150ce02e4f9aab60a615387f39 Mon Sep 17 00:00:00 2001 From: jupblb Date: Fri, 5 Jun 2026 09:54:05 +0200 Subject: [PATCH 12/12] go: harden range handling and validate occurrence ranges - Add Range.Validate; reject malformed enclosing ranges in convert - Guard readTypedRange against nil oneof message pointers - Surface missing/malformed occurrence ranges in scip lint - Sort FindOccurrences by range only (no symbol tiebreaker) --- bindings/go/scip/occurrence_range.go | 19 ++++++++++++++----- bindings/go/scip/occurrence_range_test.go | 19 +++++++++++++++++++ bindings/go/scip/position.go | 12 ++++++++++++ bindings/go/scip/position_test.go | 12 ++++++++++++ bindings/go/scip/sort.go | 9 +++++++-- cmd/scip/convert.go | 3 +++ cmd/scip/lint.go | 15 ++++++++++++++- cmd/scip/lint_test.go | 11 +++++++++++ 8 files changed, 92 insertions(+), 8 deletions(-) diff --git a/bindings/go/scip/occurrence_range.go b/bindings/go/scip/occurrence_range.go index acb4e474..a549b117 100644 --- a/bindings/go/scip/occurrence_range.go +++ b/bindings/go/scip/occurrence_range.go @@ -104,17 +104,26 @@ func (mr *MultiLineRange) ToRange() Range { } // readTypedRange decodes any of the four typed-range oneof variants on -// Occurrence into a Range. Returns (Range{}, false) when typed is nil. +// Occurrence into a Range. Returns (Range{}, false) when typed is nil or holds +// a nil message pointer. func readTypedRange(typed any) (Range, bool) { switch tr := typed.(type) { case *Occurrence_SingleLineRange: - return tr.SingleLineRange.ToRange(), true + if tr.SingleLineRange != nil { + return tr.SingleLineRange.ToRange(), true + } case *Occurrence_MultiLineRange: - return tr.MultiLineRange.ToRange(), true + if tr.MultiLineRange != nil { + return tr.MultiLineRange.ToRange(), true + } case *Occurrence_SingleLineEnclosingRange: - return tr.SingleLineEnclosingRange.ToRange(), true + if tr.SingleLineEnclosingRange != nil { + return tr.SingleLineEnclosingRange.ToRange(), true + } case *Occurrence_MultiLineEnclosingRange: - return tr.MultiLineEnclosingRange.ToRange(), true + if tr.MultiLineEnclosingRange != nil { + return tr.MultiLineEnclosingRange.ToRange(), true + } } return Range{}, false } diff --git a/bindings/go/scip/occurrence_range_test.go b/bindings/go/scip/occurrence_range_test.go index c2368ff8..4eaa6aec 100644 --- a/bindings/go/scip/occurrence_range_test.go +++ b/bindings/go/scip/occurrence_range_test.go @@ -62,6 +62,25 @@ func TestOccurrence_SourceRange_DeprecatedMalformed(t *testing.T) { require.Equal(t, Range{}, r) } +func TestOccurrence_SourceRange_NilTypedInnerFallsBack(t *testing.T) { + occ := &Occurrence{ + Range: []int32{2, 3, 5}, + TypedRange: &Occurrence_SingleLineRange{SingleLineRange: nil}, + } + r, ok := occ.SourceRange() + require.True(t, ok) + require.Equal(t, Range{Start: Position{2, 3}, End: Position{2, 5}}, r) +} + +func TestOccurrence_SourceRange_NilTypedInnerNoFallback(t *testing.T) { + occ := &Occurrence{ + TypedRange: &Occurrence_MultiLineRange{MultiLineRange: nil}, + } + r, ok := occ.SourceRange() + require.False(t, ok) + require.Equal(t, Range{}, r) +} + func TestOccurrence_EnclosingSourceRange_TypedSingleLine(t *testing.T) { occ := &Occurrence{ TypedEnclosingRange: &Occurrence_SingleLineEnclosingRange{ diff --git a/bindings/go/scip/position.go b/bindings/go/scip/position.go index b04f3210..87eaf5c6 100644 --- a/bindings/go/scip/position.go +++ b/bindings/go/scip/position.go @@ -82,6 +82,18 @@ func NewRange(scipRange []int32) (Range, error) { return Range{Start: Position{Line: startLine, Character: startChar}, End: Position{Line: endLine, Character: endChar}}, nil } +// Validate reports an error if the range has negative offsets or if its end +// position precedes its start. +func (r Range) Validate() error { + if r.Start.Line < 0 || r.Start.Character < 0 || r.End.Line < 0 || r.End.Character < 0 { + return NegativeOffsetsRangeError + } + if r.Start.Compare(r.End) > 0 { + return EndBeforeStartRangeError + } + return nil +} + type RangeError int32 const ( diff --git a/bindings/go/scip/position_test.go b/bindings/go/scip/position_test.go index 95f31efc..8c3e58ee 100644 --- a/bindings/go/scip/position_test.go +++ b/bindings/go/scip/position_test.go @@ -251,3 +251,15 @@ func TestNewRange(t *testing.T) { } }) } + +func TestRange_Validate(t *testing.T) { + require.NoError(t, Range{Start: Position{0, 0}, End: Position{0, 0}}.Validate()) + require.NoError(t, Range{Start: Position{1, 2}, End: Position{1, 2}}.Validate()) + require.NoError(t, Range{Start: Position{1, 2}, End: Position{3, 4}}.Validate()) + + require.ErrorIs(t, Range{Start: Position{-1, 0}, End: Position{0, 0}}.Validate(), NegativeOffsetsRangeError) + require.ErrorIs(t, Range{Start: Position{0, 0}, End: Position{0, -1}}.Validate(), NegativeOffsetsRangeError) + + require.ErrorIs(t, Range{Start: Position{3, 0}, End: Position{1, 0}}.Validate(), EndBeforeStartRangeError) + require.ErrorIs(t, Range{Start: Position{1, 5}, End: Position{1, 2}}.Validate(), EndBeforeStartRangeError) +} diff --git a/bindings/go/scip/sort.go b/bindings/go/scip/sort.go index e0a97a94..7211aa5e 100644 --- a/bindings/go/scip/sort.go +++ b/bindings/go/scip/sort.go @@ -54,8 +54,13 @@ func FindOccurrences(occurrences []*Occurrence, targetLine, targetCharacter int3 } } - // Ordered so that the least precise (largest) range comes last. - slices.SortFunc(filtered, func(a, b *Occurrence) int { return b.Compare(a) }) + // Ordered so that the least precise (largest) range comes last, by range + // only (no symbol-name tiebreaker). + slices.SortFunc(filtered, func(a, b *Occurrence) int { + ra, _ := a.SourceRange() + rb, _ := b.SourceRange() + return rb.CompareStrict(ra) + }) return filtered } diff --git a/cmd/scip/convert.go b/cmd/scip/convert.go index 5c47f281..e75d9173 100644 --- a/cmd/scip/convert.go +++ b/cmd/scip/convert.go @@ -393,6 +393,9 @@ func (c *Converter) insertEnclosingRangeData(symbolToID map[string]int64, occs [ if !hasEnclosing { continue } + if err := enclRange.Validate(); err != nil { + return fmt.Errorf("bad enclosing range %v for symbol %q: %w", enclRange, occ.Symbol, err) + } symbolID, ok := symbolToID[occ.Symbol] if !ok { return fmt.Errorf("symbol %q has definition occurrence, but no SymbolInformation", occ.Symbol) diff --git a/cmd/scip/lint.go b/cmd/scip/lint.go index 8e0ed895..1f246e53 100644 --- a/cmd/scip/lint.go +++ b/cmd/scip/lint.go @@ -200,7 +200,10 @@ func (st *symbolTable) addRelationship(sym string, path string, rel *scip.Relati } func (st *symbolTable) addOccurrence(path string, occ *scip.Occurrence) error { - occRange, _ := occ.SourceRange() + occRange, ok := occ.SourceRange() + if !ok { + return invalidOccurrenceRangeError{occ.Symbol, path} + } err := lintSymbolString( occ.Symbol, fmt.Sprintf("occurrence at %s @ %s", path, scipRangeToString(occRange)), @@ -353,6 +356,16 @@ func (e multipleRelationshipWarning) Error() string { " '%s' to '%s', which could optimized into a single relationship", e.symbol, e.relatedSymbol) } +type invalidOccurrenceRangeError struct { + symbol string + path string +} + +func (e invalidOccurrenceRangeError) Error() string { + return fmt.Sprintf("error: occurrence for symbol %s in %s has a missing or malformed range", + e.symbol, e.path) +} + type missingSymbolForOccurrenceError struct { symbol string path string diff --git a/cmd/scip/lint_test.go b/cmd/scip/lint_test.go index 422b9b48..df1e3ba2 100644 --- a/cmd/scip/lint_test.go +++ b/cmd/scip/lint_test.go @@ -186,6 +186,17 @@ func TestErrors(t *testing.T) { duplicateOccurrenceWarning{"b", "f", scip.NewRangeUnchecked(placeholderRange), placeholderRole}, }, }, + { + "invalidOccurrenceRange", + &scip.Index{Documents: []*scip.Document{ + {RelativePath: "f", Occurrences: []*scip.Occurrence{ + {Symbol: "a", Range: []int32{1, 2}}, // wrong length + }}, + }}, + []error{ + invalidOccurrenceRangeError{"a", "f"}, + }, + }, } for _, testCase := range testCases {