refactor: simplify hosts to directly assign tsModule.sys where possible#349
Merged
Merged
Conversation
- no need to duplicate types this way, which can and have changed over time -- it's always the same typings this way - also reorganize `host.ts` to have similar categories of functions near each other, instead of a mix of functions wherever - similar to how I organized the tests for `host` as well - shrink the code a bit this way too - add a comment about `getDefaultLibFileName`'s confusing naming pointing to the TS issues about how this is an old mistake but changing it now would be breaking - this is also how the TS Wiki recommends setting up hosts: https://github.com/microsoft/TypeScript/wiki/Using-the-Compiler-API#incremental-build-support-using-the-language-services - NOTE: because of how `tsproxy` works to support alternate TS implementations, this does require that `tsModule` _exists_ at the time of instantiation, i.e. that `setTypescriptModule` has already been called - for `host.ts`, `LanguageServiceHost` is only instantiated after `setTypescriptModule`, but for `diagnostics-format-host.ts`, it is immediately instantiated (at the bottom of the file), hence why `getCurrentDirectory` can't just be assigned to `tsModule.sys` - there is a way to fix this, but the refactoring is more complex as it would require creating in `index.ts` and then passing it as an argument -- would want to refactor more at that point too, so leaving that out for now in this otherwise small, isolated refactor - for a different, but related reason, the `host.trace` tests have to mock `console` instead of just `console.log`, since `trace` would just be set to the old, unmocked `console.log` otherwise - as it's assigned directly to `console.log` now
e7c59b3 to
40f44e8
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Simplify host files with
public func = tsModules.sys.funcwhere possibleDetails
no need to duplicate types this way, which can and have changed over time (some of the function args have more parameters etc now actually) -- it's always the same typings this way
also reorganize
host.tsto have similar categories of functions near each other, instead of a mix of functions whereverhost.tsas wellshrink the code a bit this way too
add a comment about
getDefaultLibFileName's confusing naming pointing to the TS issues about how this is an old mistake but changing it now would be breaking (LanguageServiceHost.getDefaultLibFileNameis confusing microsoft/TypeScript#35318)this is also how the TS Wiki recommends setting up hosts
tsproxyworks to support alternate TS implementations, this does require thattsModuleexists at the time of instantiation, i.e. thatsetTypescriptModulehas already been calledhost.ts,LanguageServiceHostis only instantiated aftersetTypescriptModule, but fordiagnostics-format-host.ts, it is immediately instantiated (at the bottom of the file), hence whygetCurrentDirectorycan't just be assigned totsModule.sysindex.tsand then passing it as an argument -- would want to refactor more at that point too, so leaving that out for now in this otherwise small, isolated refactorhost.tracetests have to mockconsoleinstead of justconsole.log, sincetracewould just be set to the old, unmockedconsole.logotherwiseconsole.lognow