Mirror: TypeScript LSP plugin that finds GraphQL documents in your code and provides diagnostics, auto-complete and hover-information.

bail when we see the lsp ran already (#231)

Changed files
+14 -3
packages
graphqlsp
+8 -2
packages/graphqlsp/src/diagnostics.ts
···
getSource,
} from './ast';
import { resolveTemplate } from './ast/resolve';
-
import { checkFieldUsageInFile } from './fieldUsage';
+
import { UNUSED_FIELD_CODE, checkFieldUsageInFile } from './fieldUsage';
import {
MISSING_FRAGMENT_CODE,
getColocatedFragmentNames,
} from './checkImports';
-
import { NoSubstitutionTemplateLiteral } from 'typescript';
const clientDirectives = new Set([
'populate',
···
export const SEMANTIC_DIAGNOSTIC_CODE = 52001;
export const MISSING_OPERATION_NAME_CODE = 52002;
export const USING_DEPRECATED_FIELD_CODE = 52004;
+
export const ALL_DIAGNOSTICS = [
+
SEMANTIC_DIAGNOSTIC_CODE,
+
MISSING_OPERATION_NAME_CODE,
+
USING_DEPRECATED_FIELD_CODE,
+
MISSING_FRAGMENT_CODE,
+
UNUSED_FIELD_CODE,
+
];
const cache = new LRUCache<number, ts.Diagnostic[]>({
// how long to live in ms
+6 -1
packages/graphqlsp/src/index.ts
···
import { SchemaOrigin, loadSchema } from './graphql/getSchema';
import { getGraphQLCompletions } from './autoComplete';
import { getGraphQLQuickInfo } from './quickInfo';
-
import { getGraphQLDiagnostics } from './diagnostics';
+
import { ALL_DIAGNOSTICS, getGraphQLDiagnostics } from './diagnostics';
import { templates } from './ast/templates';
function createBasicDecorator(info: ts.server.PluginCreateInfo) {
···
proxy.getSemanticDiagnostics = (filename: string): ts.Diagnostic[] => {
const originalDiagnostics =
info.languageService.getSemanticDiagnostics(filename);
+
+
const hasGraphQLDiagnostics = originalDiagnostics.some(x =>
+
ALL_DIAGNOSTICS.includes(x.code)
+
);
+
if (hasGraphQLDiagnostics) return originalDiagnostics;
const graphQLDiagnostics = getGraphQLDiagnostics(filename, schema, info);