Skip to content

Commit d53e489

Browse files
committed
feat: add support for ThisParameterType
[converter] === changelog === ```ts declare function toHex(this: number): string; declare function numberToString(n: ThisParameterType<typeof toHex>): string; ``` ```fs [<AbstractClass>] [<Erase>] type Exports = [<Import("toHex", "REPLACE_ME_WITH_MODULE_NAME")>] static member toHex (this: float) : string = nativeOnly [<Import("numberToString", "REPLACE_ME_WITH_MODULE_NAME")>] static member numberToString (n: float) : string = nativeOnly ``` === changelog ===
1 parent 1a02b18 commit d53e489

File tree

6 files changed

+52
-2
lines changed

6 files changed

+52
-2
lines changed

src/Glutinum.Converter/GlueAST.fs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ type GlueUtilityType =
271271
| Partial of GlueInterface
272272
| Record of GlueRecord
273273
| ReturnType of GlueType
274+
| ThisParameterType of GlueType
274275

275276
type GlueMappedType =
276277
{
@@ -374,4 +375,5 @@ type GlueType =
374375
| GlueUtilityType.Partial _
375376
| GlueUtilityType.Record _ -> "obj"
376377
| GlueUtilityType.ReturnType returnType -> returnType.Name
378+
| GlueUtilityType.ThisParameterType thisType -> thisType.Name
377379
| MappedType _ -> "obj"

src/Glutinum.Converter/Reader/TypeNode.fs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,22 @@ module UtilityType =
166166
|> GlueUtilityType.ReturnType
167167
|> GlueType.UtilityType
168168

169+
let thisParameterType
170+
(reader: ITypeScriptReader)
171+
(typeReferenceNode: Ts.TypeReferenceNode)
172+
=
173+
let typ = reader.checker.getTypeFromTypeNode typeReferenceNode
174+
175+
match reader.checker.typeToTypeNode (typ, None, None) with
176+
| Some typeNode ->
177+
reader.ReadTypeNode typeNode
178+
|> GlueUtilityType.ThisParameterType
179+
|> GlueType.UtilityType
180+
| None ->
181+
readTypeUsingFlags reader typ
182+
|> GlueUtilityType.ThisParameterType
183+
|> GlueType.UtilityType
184+
169185
let readTypeNode
170186
(reader: ITypeScriptReader)
171187
(typeNode: Ts.TypeNode)
@@ -213,6 +229,8 @@ let readTypeNode
213229
| "Record" -> UtilityType.readRecord reader typeReferenceNode
214230
| "ReturnType" ->
215231
UtilityType.readReturnType reader typeReferenceNode
232+
| "ThisParameterType" ->
233+
UtilityType.thisParameterType reader typeReferenceNode
216234
| _ -> readTypeReference true
217235
else
218236
readTypeReference false

src/Glutinum.Converter/Transform.fs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -728,8 +728,9 @@ let rec private transformType
728728
: FSharpMapped)
729729
|> FSharpType.Mapped
730730

731-
| GlueUtilityType.ReturnType returnType ->
732-
transformType context returnType
731+
| GlueUtilityType.ReturnType innerType
732+
| GlueUtilityType.ThisParameterType innerType ->
733+
transformType context innerType
733734

734735
| GlueType.TypeAliasDeclaration typeAliasDeclaration ->
735736
({
@@ -2136,6 +2137,9 @@ let private transformTypeAliasDeclaration
21362137

21372138
transformType context returnType |> makeTypeAlias
21382139

2140+
| GlueUtilityType.ThisParameterType innerType ->
2141+
transformType context innerType |> makeTypeAlias
2142+
21392143
| GlueType.FunctionType functionType ->
21402144
{
21412145
Attributes =

src/Glutinum.Web/Pages/Editors.GlueAST.GlueASTViewer.fs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,12 @@ type GlueASTViewer =
491491
[ GlueASTViewer.Type returnType ]
492492
context
493493

494+
| GlueUtilityType.ThisParameterType thisParameterType ->
495+
ASTViewer.renderNode
496+
"ThisParameterType"
497+
[ GlueASTViewer.Type thisParameterType ]
498+
context
499+
494500
| GlueType.ThisType thisTypeInfo ->
495501
ASTViewer.renderNode
496502
"ThisType"
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
declare function toHex(this: number): string;
2+
declare function numberToString(n: ThisParameterType<typeof toHex>): string;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
module rec Glutinum
2+
3+
open Fable.Core
4+
open Fable.Core.JsInterop
5+
open System
6+
7+
[<AbstractClass>]
8+
[<Erase>]
9+
type Exports =
10+
[<Import("toHex", "REPLACE_ME_WITH_MODULE_NAME")>]
11+
static member toHex (this: float) : string = nativeOnly
12+
[<Import("numberToString", "REPLACE_ME_WITH_MODULE_NAME")>]
13+
static member numberToString (n: float) : string = nativeOnly
14+
15+
(***)
16+
#r "nuget: Fable.Core"
17+
#r "nuget: Glutinum.Types"
18+
(***)

0 commit comments

Comments
 (0)