Skip to content

Commit 49d7497

Browse files
fix: update resolve type
1 parent 56c5c2e commit 49d7497

14 files changed

+125
-62
lines changed

src/main/render/apache/struct/read.ts

+10-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
SyntaxType,
99
} from '@creditkarma/thrift-parser'
1010

11-
import { DefinitionType, IRenderState } from '../../../types'
11+
import { DefinitionType, IRenderState, IResolveResult } from '../../../types'
1212

1313
import { thriftTypeForFieldType, typeNodeForFieldType } from '../types'
1414

@@ -524,12 +524,17 @@ export function readValueForFieldType(
524524
): Array<ts.Statement> {
525525
switch (fieldType.type) {
526526
case SyntaxType.Identifier:
527-
return readValueForIdentifier(
528-
fieldType.value,
529-
Resolver.resolveIdentifierDefinition(fieldType, {
527+
const result: IResolveResult = Resolver.resolveIdentifierDefinition(
528+
fieldType,
529+
{
530530
currentNamespace: state.currentNamespace,
531531
namespaceMap: state.project.namespaces,
532-
}),
532+
},
533+
)
534+
535+
return readValueForIdentifier(
536+
fieldType.value,
537+
result.definition,
533538
fieldType,
534539
fieldName,
535540
state,

src/main/render/apache/struct/write.ts

+9-4
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
SyntaxType,
1212
} from '@creditkarma/thrift-parser'
1313

14-
import { DefinitionType, IRenderState } from '../../../types'
14+
import { DefinitionType, IRenderState, IResolveResult } from '../../../types'
1515

1616
import {
1717
createFunctionParameter,
@@ -193,11 +193,16 @@ export function writeValueForType(
193193
): Array<ts.Expression> {
194194
switch (fieldType.type) {
195195
case SyntaxType.Identifier:
196-
return writeValueForIdentifier(
197-
Resolver.resolveIdentifierDefinition(fieldType, {
196+
const result: IResolveResult = Resolver.resolveIdentifierDefinition(
197+
fieldType,
198+
{
198199
currentNamespace: state.currentNamespace,
199200
namespaceMap: state.project.namespaces,
200-
}),
201+
},
202+
)
203+
204+
return writeValueForIdentifier(
205+
result.definition,
201206
struct,
202207
fieldName,
203208
state,

src/main/render/apache/types.ts

+7-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as ts from 'typescript'
22

33
import { FunctionType, SyntaxType } from '@creditkarma/thrift-parser'
44

5-
import { DefinitionType, IRenderState } from '../../types'
5+
import { DefinitionType, IRenderState, IResolveResult } from '../../types'
66

77
import {
88
APPLICATION_EXCEPTION,
@@ -149,14 +149,16 @@ export function thriftTypeForFieldType(
149149
): ts.Identifier {
150150
switch (fieldType.type) {
151151
case SyntaxType.Identifier:
152-
return thriftTypeForIdentifier(
153-
Resolver.resolveIdentifierDefinition(fieldType, {
152+
const result: IResolveResult = Resolver.resolveIdentifierDefinition(
153+
fieldType,
154+
{
154155
currentNamespace: state.currentNamespace,
155156
namespaceMap: state.project.namespaces,
156-
}),
157-
state,
157+
},
158158
)
159159

160+
return thriftTypeForIdentifier(result.definition, state)
161+
160162
case SyntaxType.SetType:
161163
return THRIFT_TYPES.SET
162164

src/main/render/thrift-server/service/processor.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ function createSuperCall(
255255
Resolver.resolveIdentifierDefinition(service, {
256256
currentNamespace: state.currentNamespace,
257257
namespaceMap: state.project.namespaces,
258-
}),
258+
}).definition,
259259
),
260260
],
261261
),

src/main/render/thrift-server/struct/decode.ts

+9-6
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import {
3636
throwProtocolException,
3737
} from '../utils'
3838

39-
import { DefinitionType, IRenderState } from '../../../types'
39+
import { DefinitionType, IRenderState, IResolveResult } from '../../../types'
4040

4141
import { READ_METHODS } from './methods'
4242

@@ -390,14 +390,17 @@ export function readValueForFieldType(
390390
): Array<ts.Statement> {
391391
switch (fieldType.type) {
392392
case SyntaxType.Identifier:
393-
const definition = Resolver.resolveIdentifierDefinition(fieldType, {
394-
currentNamespace: state.currentNamespace,
395-
namespaceMap: state.project.namespaces,
396-
})
393+
const result: IResolveResult = Resolver.resolveIdentifierDefinition(
394+
fieldType,
395+
{
396+
currentNamespace: state.currentNamespace,
397+
namespaceMap: state.project.namespaces,
398+
},
399+
)
397400

398401
return readValueForIdentifier(
399402
fieldType.value,
400-
definition,
403+
result.definition,
401404
fieldType,
402405
fieldName,
403406
state,

src/main/render/thrift-server/struct/encode.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import {
3535
typeNodeForFieldType,
3636
} from '../types'
3737

38-
import { DefinitionType, IRenderState } from '../../../types'
38+
import { DefinitionType, IRenderState, IResolveResult } from '../../../types'
3939

4040
import { createLetStatement } from '../../shared/utils'
4141
import { looseNameForStruct, throwForField, toolkitName } from './utils'
@@ -253,7 +253,7 @@ export function writeValueForType(
253253
): Array<ts.Expression> {
254254
switch (fieldType.type) {
255255
case SyntaxType.Identifier:
256-
const definition: DefinitionType = Resolver.resolveIdentifierDefinition(
256+
const result: IResolveResult = Resolver.resolveIdentifierDefinition(
257257
fieldType,
258258
{
259259
currentNamespace: state.currentNamespace,
@@ -263,7 +263,7 @@ export function writeValueForType(
263263

264264
return writeValueForIdentifier(
265265
fieldType.value,
266-
definition,
266+
result.definition,
267267
node,
268268
fieldName,
269269
state,

src/main/render/thrift-server/struct/reader.ts

+9-6
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import {
1717
import { className, toolkitName } from './utils'
1818

1919
import { Resolver } from '../../../resolver'
20-
import { DefinitionType, IRenderState } from '../../../types'
20+
import { DefinitionType, IRenderState, IResolveResult } from '../../../types'
2121
import { createMethodCall } from '../../shared/utils'
2222
import { COMMON_IDENTIFIERS } from '../identifiers'
2323
import { createVoidType, typeNodeForFieldType } from '../types'
@@ -148,15 +148,18 @@ export function assignmentForFieldType(
148148
): Array<ts.Statement> {
149149
switch (fieldType.type) {
150150
case SyntaxType.Identifier:
151-
const definition = Resolver.resolveIdentifierDefinition(fieldType, {
152-
currentNamespace: state.currentNamespace,
153-
namespaceMap: state.project.namespaces,
154-
})
151+
const result: IResolveResult = Resolver.resolveIdentifierDefinition(
152+
fieldType,
153+
{
154+
currentNamespace: state.currentNamespace,
155+
namespaceMap: state.project.namespaces,
156+
},
157+
)
155158

156159
return assignmentForIdentifier(
157160
fieldType.value,
158161
field,
159-
definition,
162+
result.definition,
160163
fieldType,
161164
saveName,
162165
readName,

src/main/render/thrift-server/typedef.ts

+15-5
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@ import {
1111

1212
import { TypeMapping } from './types'
1313

14-
import { DefinitionType, IRenderState, IResolvedIdentifier } from '../../types'
14+
import {
15+
DefinitionType,
16+
IRenderState,
17+
IResolvedIdentifier,
18+
IResolveResult,
19+
} from '../../types'
1520

1621
import {
1722
className,
@@ -432,12 +437,17 @@ export function renderTypeDef(
432437
},
433438
)
434439

435-
return renderTypeDefForIdentifier(
436-
resolvedIdentifier,
437-
Resolver.resolveIdentifierDefinition(node.definitionType, {
440+
const result: IResolveResult = Resolver.resolveIdentifierDefinition(
441+
node.definitionType,
442+
{
438443
currentNamespace: state.currentNamespace,
439444
namespaceMap: state.project.namespaces,
440-
}),
445+
},
446+
)
447+
448+
return renderTypeDefForIdentifier(
449+
resolvedIdentifier,
450+
result.definition,
441451
node,
442452
typeMapping,
443453
state,

src/main/render/thrift-server/types.ts

+12-11
Original file line numberDiff line numberDiff line change
@@ -144,13 +144,12 @@ export function thriftTypeForFieldType(
144144
): ts.Identifier {
145145
switch (fieldType.type) {
146146
case SyntaxType.Identifier:
147-
return thriftTypeForIdentifier(
148-
Resolver.resolveIdentifierDefinition(fieldType, {
149-
currentNamespace: state.currentNamespace,
150-
namespaceMap: state.project.namespaces,
151-
}),
152-
state,
153-
)
147+
const result = Resolver.resolveIdentifierDefinition(fieldType, {
148+
currentNamespace: state.currentNamespace,
149+
namespaceMap: state.project.namespaces,
150+
})
151+
152+
return thriftTypeForIdentifier(result.definition, state)
154153

155154
case SyntaxType.SetType:
156155
return THRIFT_TYPES.SET
@@ -267,11 +266,13 @@ export function typeNodeForFieldType(
267266
): ts.TypeNode {
268267
switch (fieldType.type) {
269268
case SyntaxType.Identifier:
269+
const result = Resolver.resolveIdentifierDefinition(fieldType, {
270+
currentNamespace: state.currentNamespace,
271+
namespaceMap: state.project.namespaces,
272+
})
273+
270274
return typeNodeForIdentifier(
271-
Resolver.resolveIdentifierDefinition(fieldType, {
272-
currentNamespace: state.currentNamespace,
273-
namespaceMap: state.project.namespaces,
274-
}),
275+
result.definition,
275276
fieldType.value,
276277
state,
277278
loose,

src/main/resolver/identifiersForStatements.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
ThriftStatement,
99
} from '@creditkarma/thrift-parser'
1010

11-
import { DefinitionType, IResolveContext } from '../types'
11+
import { IResolveContext, IResolveResult } from '../types'
1212
import { resolveIdentifierDefinition } from './resolveIdentifierDefinition'
1313

1414
function identifiersForFieldType(
@@ -21,17 +21,19 @@ function identifiersForFieldType(
2121
switch (fieldType.type) {
2222
case SyntaxType.Identifier:
2323
if (resolveTypedefs) {
24-
const def: DefinitionType = resolveIdentifierDefinition(
24+
const result: IResolveResult = resolveIdentifierDefinition(
2525
fieldType,
2626
{
2727
currentNamespace: context.currentNamespace,
2828
namespaceMap: context.namespaceMap,
2929
},
3030
)
3131

32-
if (def.type === SyntaxType.TypedefDefinition) {
32+
const definition = result.definition
33+
34+
if (definition.type === SyntaxType.TypedefDefinition) {
3335
identifiersForFieldType(
34-
def.definitionType,
36+
definition.definitionType,
3537
results,
3638
context,
3739
)

src/main/resolver/resolveIdentifierDefinition.ts

+10-3
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@ import {
77
INamespace,
88
INamespacePath,
99
IResolveContext,
10+
IResolveResult,
1011
} from '../types'
1112

1213
import { stubIdentifier } from '../utils'
1314

1415
export function resolveIdentifierDefinition(
1516
id: Identifier,
1617
context: IResolveContext,
17-
): DefinitionType {
18+
): IResolveResult {
1819
if (context.currentNamespace.exports[id.value]) {
1920
const definition: DefinitionType =
2021
context.currentNamespace.exports[id.value]
@@ -26,10 +27,16 @@ export function resolveIdentifierDefinition(
2627
context,
2728
)
2829
} else {
29-
return definition
30+
return {
31+
definition,
32+
namespace: context.currentNamespace,
33+
}
3034
}
3135
} else {
32-
return definition
36+
return {
37+
definition,
38+
namespace: context.currentNamespace,
39+
}
3340
}
3441
} else {
3542
const [head, ...tail] = id.value.split('.')

src/main/resolver/resolveNamespace.ts

+10-4
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
INamespace,
1818
INamespaceMap,
1919
INamespacePath,
20+
IResolveResult,
2021
} from '../types'
2122

2223
import { createValidationError, IThriftError, ValidationError } from '../errors'
@@ -239,10 +240,15 @@ export function resolveNamespace(
239240
* case.
240241
*/
241242
case SyntaxType.Identifier:
242-
const definition = resolveIdentifierDefinition(fieldType, {
243-
currentNamespace,
244-
namespaceMap,
245-
})
243+
const result: IResolveResult = resolveIdentifierDefinition(
244+
fieldType,
245+
{
246+
currentNamespace,
247+
namespaceMap,
248+
},
249+
)
250+
251+
const definition = result.definition
246252

247253
if (
248254
definition.type === SyntaxType.TypedefDefinition &&

src/main/types.ts

+9
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@ export interface IResolveContext {
2525
namespaceMap: INamespaceMap
2626
}
2727

28+
export interface IResolveResult {
29+
// The namespace which this definition was found.
30+
// Returned for future lookups
31+
namespace: INamespace
32+
33+
// The definition of an Identifier
34+
definition: DefinitionType
35+
}
36+
2837
export interface IThriftProject {
2938
type: 'ThriftProject'
3039

0 commit comments

Comments
 (0)