Как ts-graphql-plugin автодополнить содержимое GraphQL внутри литералов шаблона?
Это плагин службы языка TS, включающий преобразователь, который может преобразовывать теги шаблона в литералы объектов, представляющие GraphQL. Узлы AST.
Я могу представить себе что-то вроде этого: - для каждого файла TS создайте скомпилированную версию в памяти. В скомпилированной версии литералы шаблона GraphQL заменены на литералы объекта. - когда есть запрос информации в позиции внутри литерала шаблона graphql, выясните, какой строке скомпилированного файла соответствует эта позиция, повторите запрос к скомпилированному файлу, а затем переведите позиции символов обратно.
В псевдокоде:
function getQuickInfoAtPosition(file, pos) {
if (pos is in a gql template literal) {
return getQuickInfoAtPosition(transpiledFile, pos);
}
...
}
function getSemanticDiagnostics(file) {
const diagnostics = getSemanticDiagnositcs(transpiledFile);
return diagnostics.map(adaptPositions);
}
Я просмотрел исходный код, и это не похоже на то, что делает ts-graphql-plugin. В чем прикол?