-
Notifications
You must be signed in to change notification settings - Fork 804
/
Copy pathServiceLexing.fsi
executable file
·238 lines (219 loc) · 8.14 KB
/
ServiceLexing.fsi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information.
namespace Microsoft.FSharp.Compiler.SourceCodeServices
open Microsoft.FSharp.Compiler
type Position = int * int
type Range = Position * Position
/// Represents encoded information for the end-of-line continuation of lexing
type FSharpTokenizerLexState = int64
/// Represents stable information for the state of the laxing engine at the end of a line
type FSharpTokenizerColorState =
| Token = 1
| IfDefSkip = 3
| String = 4
| Comment = 5
| StringInComment = 6
| VerbatimStringInComment = 7
| CamlOnly = 8
| VerbatimString = 9
| SingleLineComment = 10
| EndLineThenSkip = 11
| EndLineThenToken = 12
| TripleQuoteString = 13
| TripleQuoteStringInComment = 14
| InitialState = 0
/// Gives an indicattion of the color class to assign to the token an IDE
type FSharpTokenColorKind =
| Default = 0
| Text = 0
| Keyword = 1
| Comment = 2
| Identifier = 3
| String = 4
| UpperIdentifier = 5
| InactiveCode = 7
| PreprocessorKeyword = 8
| Number = 9
| Operator = 10
| Punctuation = 11
/// Gives an indication of what should happen when the token is typed in an IDE
type FSharpTokenTriggerClass =
| None = 0x00000000
| MemberSelect = 0x00000001
| MatchBraces = 0x00000002
| ChoiceSelect = 0x00000004
| MethodTip = 0x000000F0
| ParamStart = 0x00000010
| ParamNext = 0x00000020
| ParamEnd = 0x00000040
/// Gives an indication of the class to assign to the characters of the token an IDE
type FSharpTokenCharKind =
| Default = 0x00000000
| Text = 0x00000000
| Keyword = 0x00000001
| Identifier = 0x00000002
| String = 0x00000003
| Literal = 0x00000004
| Operator = 0x00000005
| Delimiter = 0x00000006
| WhiteSpace = 0x00000008
| LineComment = 0x00000009
| Comment = 0x0000000A
/// Some of the values in the field FSharpTokenInfo.Tag
module FSharpTokenTag =
/// Indicates the token is an identifier
val Identifier: int
/// Indicates the token is a string
val String : int
/// Indicates the token is an identifier (synonym for FSharpTokenTag.Identifier)
val IDENT : int
/// Indicates the token is an string (synonym for FSharpTokenTag.String)
val STRING : int
/// Indicates the token is a `(`
val LPAREN : int
/// Indicates the token is a `)`
val RPAREN : int
/// Indicates the token is a `[`
val LBRACK : int
/// Indicates the token is a `]`
val RBRACK : int
/// Indicates the token is a `{`
val LBRACE : int
/// Indicates the token is a `}`
val RBRACE : int
/// Indicates the token is a `[<`
val LBRACK_LESS : int
/// Indicates the token is a `>]`
val GREATER_RBRACK : int
/// Indicates the token is a `<`
val LESS : int
/// Indicates the token is a `>`
val GREATER : int
/// Indicates the token is a `[|`
val LBRACK_BAR : int
/// Indicates the token is a `|]`
val BAR_RBRACK : int
/// Indicates the token is a `+` or `-`
val PLUS_MINUS_OP : int
/// Indicates the token is a `-`
val MINUS : int
/// Indicates the token is a `*`
val STAR : int
/// Indicates the token is a `%`
val INFIX_STAR_DIV_MOD_OP : int
/// Indicates the token is a `%`
val PERCENT_OP : int
/// Indicates the token is a `^`
val INFIX_AT_HAT_OP : int
/// Indicates the token is a `?`
val QMARK : int
/// Indicates the token is a `:`
val COLON : int
/// Indicates the token is a `=`
val EQUALS : int
/// Indicates the token is a `;`
val SEMICOLON : int
/// Indicates the token is a `,`
val COMMA : int
/// Indicates the token is a `.`
val DOT : int
/// Indicates the token is a `..`
val DOT_DOT : int
/// Indicates the token is a `..`
val INT32_DOT_DOT : int
/// Indicates the token is a `..`
val UNDERSCORE : int
/// Indicates the token is a `_`
val BAR : int
/// Indicates the token is a `:>`
val COLON_GREATER : int
/// Indicates the token is a `:?>`
val COLON_QMARK_GREATER : int
/// Indicates the token is a `:?`
val COLON_QMARK : int
/// Indicates the token is a `|`
val INFIX_BAR_OP : int
/// Indicates the token is a `|`
val INFIX_COMPARE_OP : int
/// Indicates the token is a `::`
val COLON_COLON : int
/// Indicates the token is a `@@`
val AMP_AMP : int
/// Indicates the token is a `~`
val PREFIX_OP : int
/// Indicates the token is a `:=`
val COLON_EQUALS : int
/// Indicates the token is a `||`
val BAR_BAR : int
/// Indicates the token is a `->`
val RARROW : int
/// Indicates the token is a `<-`
val LARROW : int
/// Indicates the token is a `"`
val QUOTE : int
/// Indicates the token is a whitespace
val WHITESPACE : int
/// Indicates the token is a comment
val COMMENT : int
/// Indicates the token is a line comment
val LINE_COMMENT : int
/// Indicates the token is keyword `begin`
val BEGIN : int
/// Indicates the token is keyword `do`
val DO : int
/// Indicates the token is keyword `function`
val FUNCTION : int
/// Indicates the token is keyword `then`
val THEN : int
/// Indicates the token is keyword `else`
val ELSE : int
/// Indicates the token is keyword `struct`
val STRUCT : int
/// Indicates the token is keyword `class`
val CLASS : int
/// Indicates the token is keyword `try`
val TRY : int
/// Information about a particular token from the tokenizer
type FSharpTokenInfo =
{ /// Left column of the token.
LeftColumn:int
/// Right column of the token.
RightColumn:int
ColorClass:FSharpTokenColorKind
/// Gives an indication of the class to assign to the token an IDE
CharClass:FSharpTokenCharKind
/// Actions taken when the token is typed
FSharpTokenTriggerClass:FSharpTokenTriggerClass
/// The tag is an integer identifier for the token
Tag:int
/// Provides additional information about the token
TokenName:string;
/// The full length consumed by this match, including delayed tokens (which can be ignored in naive lexers)
FullMatchedLength: int }
/// Object to tokenize a line of F# source code, starting with the given lexState. The lexState should be 0 for
/// the first line of text. Returns an array of ranges of the text and two enumerations categorizing the
/// tokens and characters covered by that range, i.e. FSharpTokenColorKind and FSharpTokenCharKind. The enumerations
/// are somewhat adhoc but useful enough to give good colorization options to the user in an IDE.
///
/// A new lexState is also returned. An IDE-plugin should in general cache the lexState
/// values for each line of the edited code.
[<Sealed>]
type FSharpLineTokenizer =
/// Scan one token from the line
member ScanToken : lexState:FSharpTokenizerLexState -> FSharpTokenInfo option * FSharpTokenizerLexState
static member ColorStateOfLexState : FSharpTokenizerLexState -> FSharpTokenizerColorState
static member LexStateOfColorState : FSharpTokenizerColorState -> FSharpTokenizerLexState
/// Tokenizer for a source file. Holds some expensive-to-compute resources at the scope of the file.
[<Sealed>]
type FSharpSourceTokenizer =
new : conditionalDefines:string list * fileName:string option -> FSharpSourceTokenizer
member CreateLineTokenizer : lineText:string -> FSharpLineTokenizer
member CreateBufferTokenizer : bufferFiller:(char[] * int * int -> int) -> FSharpLineTokenizer
module internal TestExpose =
val TokenInfo : Parser.token -> (FSharpTokenColorKind * FSharpTokenCharKind * FSharpTokenTriggerClass)
module Keywords =
/// Add backticks if the identifier is a keyword.
val QuoteIdentifierIfNeeded : string -> string
/// Remove backticks if present.
val NormalizeIdentifierBackticks : string -> string
/// Keywords paired with their descriptions. Used in completion and quick info.
val KeywordsWithDescription : (string * string) list