From 458d5396910d17069cf282bfee83b26d306c7e36 Mon Sep 17 00:00:00 2001 From: Quramy Date: Wed, 13 Mar 2024 23:26:44 +0900 Subject: [PATCH] chore: Modify FragmentRegistry method name --- src/analyzer/analyzer.ts | 2 +- src/gql-ast-util/fragment-registry.test.ts | 32 +++++------ src/gql-ast-util/fragment-registry.ts | 2 +- .../testing/adapter-fixture.ts | 2 +- .../plugin-module-factory.ts | 56 +++++++------------ 5 files changed, 39 insertions(+), 55 deletions(-) diff --git a/src/analyzer/analyzer.ts b/src/analyzer/analyzer.ts index e5651877..fb63965f 100644 --- a/src/analyzer/analyzer.ts +++ b/src/analyzer/analyzer.ts @@ -95,7 +95,7 @@ export class Analyzer { return ts.isNoSubstitutionTemplateLiteral(node) || ts.isTemplateExpression(node); } }) as (ts.TaggedTemplateExpression | ts.NoSubstitutionTemplateLiteral | ts.TemplateExpression)[]; - fragmentRegistry.registerDocument( + fragmentRegistry.registerDocuments( fileName, version, templateLiteralNodes.reduce( diff --git a/src/gql-ast-util/fragment-registry.test.ts b/src/gql-ast-util/fragment-registry.test.ts index 6372d64d..ea467ec0 100644 --- a/src/gql-ast-util/fragment-registry.test.ts +++ b/src/gql-ast-util/fragment-registry.test.ts @@ -275,7 +275,7 @@ describe(FragmentRegistry, () => { describe(FragmentRegistry.prototype.getExternalFragments, () => { it('should return empty array when target document can not be parsed', () => { const registry = new FragmentRegistry(); - registry.registerDocument('fragments.ts', '0', [ + registry.registerDocuments('fragments.ts', '0', [ { sourcePosition: 0, text: ` @@ -285,14 +285,14 @@ describe(FragmentRegistry, () => { `, }, ]); - registry.registerDocument('main.ts', '0', [{ sourcePosition: 0, text: 'fragment X on Query {' }]); + registry.registerDocuments('main.ts', '0', [{ sourcePosition: 0, text: 'fragment X on Query {' }]); expect(registry.getExternalFragments('fragment X on Query {', 'main.ts', 0)).toEqual([]); }); it('should return dependent fragment definitions', () => { const registry = new FragmentRegistry(); - registry.registerDocument('fragments.ts', '0', [ + registry.registerDocuments('fragments.ts', '0', [ { sourcePosition: 0, text: ` @@ -310,7 +310,7 @@ describe(FragmentRegistry, () => { `, }, ]); - registry.registerDocument('main.ts', '0', [ + registry.registerDocuments('main.ts', '0', [ { sourcePosition: 0, text: 'fragment FragmentB on Query { ...FragmentA }' }, ]); @@ -323,7 +323,7 @@ describe(FragmentRegistry, () => { it('should not use cached value when dependent fragment changes', () => { const logger = jest.fn(); const registry = new FragmentRegistry({ logger }); - registry.registerDocument('fragments.ts', '0', [ + registry.registerDocuments('fragments.ts', '0', [ { sourcePosition: 0, text: ` @@ -334,13 +334,13 @@ describe(FragmentRegistry, () => { }, ]); - registry.registerDocument('main.ts', '0', [ + registry.registerDocuments('main.ts', '0', [ { sourcePosition: 0, text: 'fragment FragmentX on Query { ...FragmentA }' }, ]); registry.getExternalFragments('fragment FragmentX on Query { ...FragmentA }', 'main.ts', 0); expect(logger).toBeCalledTimes(0); - registry.registerDocument('fragments.ts', '1', [ + registry.registerDocuments('fragments.ts', '1', [ { sourcePosition: 0, text: ` @@ -362,7 +362,7 @@ describe(FragmentRegistry, () => { it('should not use cached value when FragmentSpread set in target documentString changes', () => { const logger = jest.fn(); const registry = new FragmentRegistry({ logger }); - registry.registerDocument('fragments.ts', '0', [ + registry.registerDocuments('fragments.ts', '0', [ { sourcePosition: 0, text: ` @@ -380,14 +380,14 @@ describe(FragmentRegistry, () => { `, }, ]); - registry.registerDocument('main.ts', '0', [ + registry.registerDocuments('main.ts', '0', [ { sourcePosition: 0, text: 'fragment FragmentX on Query { ...FragmentA }' }, ]); registry.getExternalFragments('fragment FragmentX on Query { ...FragmentA }', 'main.ts', 0); expect(logger).toBeCalledTimes(0); - registry.registerDocument('main.ts', '1', [ + registry.registerDocuments('main.ts', '1', [ { sourcePosition: 0, text: 'fragment FragmentX on Query { ...FragmentA, ...FragmentB }' }, ]); @@ -404,7 +404,7 @@ describe(FragmentRegistry, () => { it('should not use cached value when FragmentDefinition set in target documentString changes', () => { const logger = jest.fn(); const registry = new FragmentRegistry({ logger }); - registry.registerDocument('fragments.ts', '0', [ + registry.registerDocuments('fragments.ts', '0', [ { sourcePosition: 0, text: ` @@ -414,14 +414,14 @@ describe(FragmentRegistry, () => { `, }, ]); - registry.registerDocument('main.ts', '0', [ + registry.registerDocuments('main.ts', '0', [ { sourcePosition: 0, text: 'fragment FragmentX on Query { ...FragmentA }' }, ]); registry.getExternalFragments('fragment FragmentX on Query { ...FragmentA }', 'main.ts', 0); expect(logger).toBeCalledTimes(0); - registry.registerDocument('main.ts', '1', [ + registry.registerDocuments('main.ts', '1', [ { sourcePosition: 0, text: ` @@ -451,7 +451,7 @@ describe(FragmentRegistry, () => { it('should use cached value', () => { const logger = jest.fn(); const registry = new FragmentRegistry({ logger }); - registry.registerDocument('fragments.ts', '0', [ + registry.registerDocuments('fragments.ts', '0', [ { sourcePosition: 0, text: ` @@ -469,14 +469,14 @@ describe(FragmentRegistry, () => { `, }, ]); - registry.registerDocument('main.ts', '0', [ + registry.registerDocuments('main.ts', '0', [ { sourcePosition: 0, text: 'fragment FragmentX on Query { ...FragmentA }' }, ]); registry.getExternalFragments('fragment FragmentX on Query { ...FragmentA }', 'main.ts', 0); expect(logger).toBeCalledTimes(0); - registry.registerDocument('main.ts', '1', [ + registry.registerDocuments('main.ts', '1', [ { sourcePosition: 0, text: 'fragment FragmentX on Query { ...FragmentA, __typename }' }, ]); diff --git a/src/gql-ast-util/fragment-registry.ts b/src/gql-ast-util/fragment-registry.ts index 6e7e0841..9dd5278b 100644 --- a/src/gql-ast-util/fragment-registry.ts +++ b/src/gql-ast-util/fragment-registry.ts @@ -362,7 +362,7 @@ export class FragmentRegistry { return externalFragments; } - registerDocument( + registerDocuments( fileName: string, version: string, documentStrings: { text: string; sourcePosition: number }[], diff --git a/src/graphql-language-service-adapter/testing/adapter-fixture.ts b/src/graphql-language-service-adapter/testing/adapter-fixture.ts index 8635de31..8f266040 100644 --- a/src/graphql-language-service-adapter/testing/adapter-fixture.ts +++ b/src/graphql-language-service-adapter/testing/adapter-fixture.ts @@ -45,6 +45,6 @@ export class AdapterFixture { } addFragment(fragmentDefDoc: string, sourceFileName = this._sourceFileName) { - this._fragmentRegistry.registerDocument(sourceFileName, 'v1', [{ sourcePosition: 0, text: fragmentDefDoc }]); + this._fragmentRegistry.registerDocuments(sourceFileName, 'v1', [{ sourcePosition: 0, text: fragmentDefDoc }]); } } diff --git a/src/language-service-plugin/plugin-module-factory.ts b/src/language-service-plugin/plugin-module-factory.ts index 6afff83f..e794aeb2 100644 --- a/src/language-service-plugin/plugin-module-factory.ts +++ b/src/language-service-plugin/plugin-module-factory.ts @@ -26,6 +26,24 @@ function create(info: ts.server.PluginCreateInfo): ts.LanguageService { const fragmentRegistry = new FragmentRegistry({ logger }); if (enabledGlobalFragments) { + const handleAcquireOrUpdate = (fileName: string, sourceFile: ts.SourceFile, version: string) => { + const templateLiteralNodes = findAllNodes(sourceFile, node => { + if (tag && ts.isTaggedTemplateExpression(node) && hasTagged(node, tag, sourceFile)) { + return true; + } else { + return ts.isNoSubstitutionTemplateLiteral(node) || ts.isTemplateExpression(node); + } + }) as (ts.TaggedTemplateExpression | ts.NoSubstitutionTemplateLiteral | ts.TemplateExpression)[]; + fragmentRegistry.registerDocuments( + fileName, + version, + templateLiteralNodes.reduce( + (acc, node) => [...acc, getShallowText(node)], + [] as { text: string; sourcePosition: number }[], + ), + ); + }; + registerDocumentChangeEvent( // Note: // documentRegistry in ts.server.Project is annotated @internal @@ -33,47 +51,13 @@ function create(info: ts.server.PluginCreateInfo): ts.LanguageService { { onAcquire: (fileName, sourceFile, version) => { if (!isExcluded(fileName) && info.languageServiceHost.getScriptFileNames().includes(fileName)) { - // TODO remove before merge - logger('acquire script ' + fileName + version); - - const templateLiteralNodes = findAllNodes(sourceFile, node => { - if (tag && ts.isTaggedTemplateExpression(node) && hasTagged(node, tag, sourceFile)) { - return true; - } else { - return ts.isNoSubstitutionTemplateLiteral(node) || ts.isTemplateExpression(node); - } - }) as (ts.TaggedTemplateExpression | ts.NoSubstitutionTemplateLiteral | ts.TemplateExpression)[]; - fragmentRegistry.registerDocument( - fileName, - version, - templateLiteralNodes.reduce( - (acc, node) => [...acc, getShallowText(node)], - [] as { text: string; sourcePosition: number }[], - ), - ); + handleAcquireOrUpdate(fileName, sourceFile, version); } }, onUpdate: (fileName, sourceFile, version) => { if (!isExcluded(fileName) && info.languageServiceHost.getScriptFileNames().includes(fileName)) { if (fragmentRegistry.getFileCurrentVersion(fileName) === version) return; - // TODO remove before merge - logger('update script ' + fileName + version); - - const templateLiteralNodes = findAllNodes(sourceFile, node => { - if (tag && ts.isTaggedTemplateExpression(node) && hasTagged(node, tag, sourceFile)) { - return true; - } else { - return ts.isNoSubstitutionTemplateLiteral(node) || ts.isTemplateExpression(node); - } - }) as (ts.TaggedTemplateExpression | ts.NoSubstitutionTemplateLiteral | ts.TemplateExpression)[]; - fragmentRegistry.registerDocument( - fileName, - version, - templateLiteralNodes.reduce( - (acc, node) => [...acc, getShallowText(node)], - [] as { text: string; sourcePosition: number }[], - ), - ); + handleAcquireOrUpdate(fileName, sourceFile, version); } }, onRelease: fileName => {