Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Discussion: Consider making a "shortcut" API around TypeScript for node types#6013

Closed
JoshuaKGoldberg announced inRFCs
Discussion options

Suggestion

We write code like this very frequently:

constparserServices=util.getParserServices(context);constchecker=parserServices.program.getTypeChecker();consttsNode=parserServices.esTreeNodeToTSNodeMap.get(node);consttype=checker.getTypeAtLocation(node);

It's a little burdensome.

@bradzacher and I were chatting in a pairing about how it might be convenient to make a wrapper around this, for convenience. Vague first draft:

declareconsttypeUtils:{[Kinkeyofts.TypeChecker]:(services:ParserServices,node:TSESTree.Node)=>ReturnType<ts.TypeChecker[K]>;};consttype=typeUtils.getTypeAtLocation(parserServices,node);

We'd probably want to export this as a publicly available & documented API, so it's not confusing to consumers why our source code doesn't look like examples.

One downside would be that we're obfuscating how to use TypeScript APIs. I hate to add to complexity of understanding these already hard-to-understand things...

You must be logged in to vote

Replies: 3 comments

Comment options

I would say we could probably go one step further and just offer all of this off of the parser serivces!

For example:

typeParserServices={getTypeAtLocation(node:TSESTree.Node):ReturnType<ts.TypeChecker['getTypeAtLocation']>;};constparserServices=util.getParserServices(context);parserServices.getTypeAtLocation(node);

That would make it even more straight-forward for people to use the tooling!

You must be logged in to vote
0 replies
Comment options

JoshuaKGoldberg
Nov 12, 2022
Maintainer Author

Oh interesting. I like putting this as a member ofParserServices, though I'm hesitant to put potentially dozens of them as siblings of our own properties. MaybeparserServices.checker.getTypeAtLocation?

You must be logged in to vote
0 replies
Comment options

the reason I like it as a direct sibling is it's one less step.
Right now people do things like

const{program}=util.getParserServices(context);constchecker=program.getTypeChecker();

Adding it as a separate property would make it more likely there's a clash if the consumer needs a more advanced API than what we offer.
For example:

const{checker, program}=util.getParserServices(context);constchecker2=program.getTypeChecker();

If we build it right then most usecases shouldn't really need to ever manually touchprogram/esTreeNodeToTSNodeMap/tsNodeToESTreeNodeMap!

You must be logged in to vote
0 replies
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Category
RFCs
Labels
repo maintenancethings to do with maintenance of the repo, and not with code/docsaccepting prsGo ahead, send a pull request that resolves this issue
2 participants
@JoshuaKGoldberg@bradzacher
Converted from issue

This discussion was converted from issue #5937 on November 17, 2022 15:54.


[8]ページ先頭

©2009-2025 Movatter.jp