pomljs
Version:
Prompt Orchestration Markup Language
1 lines • 27.3 kB
Source Map (JSON)
{"version":3,"file":"xmlContentAssist.cjs","sources":["../../.build/util/xmlContentAssist.js"],"sourcesContent":["\"use strict\";\n// Adapted from https://github.com/SAP/xml-tools/blob/master/packages/content-assist/lib/content-assist.js\nconst { defaultsDeep, forEach, isArray, find, findIndex, flatMap, identity, last, isEmpty } = require('lodash'); // eslint-disable-line\nconst { BaseXmlCstVisitor } = require('@xml-tools/parser'); // eslint-disable-line\nconst { findNextTextualToken } = require('@xml-tools/common'); // eslint-disable-line\nfunction getSuggestions(options) {\n const actualOptions = defaultsDeep(options, {\n providers: {\n elementContent: [],\n elementName: [],\n elementCloseName: [],\n attributeName: [],\n attributeValue: [],\n },\n context: undefined\n });\n let { providerType, providerArgs } = computeCompletionSyntacticContext({\n cst: actualOptions.cst,\n tokenVector: actualOptions.tokenVector,\n ast: actualOptions.ast,\n offset: actualOptions.offset\n });\n // Inject Additional semantic context for the content assist providers.\n providerArgs.context = actualOptions.context;\n if (providerType === null) {\n return [];\n }\n else {\n const selectedProviders = actualOptions.providers[providerType];\n const suggestions = flatMap(selectedProviders, suggestionProvider => suggestionProvider(providerArgs));\n return suggestions;\n }\n}\nfunction computeCompletionSyntacticContext({ cst, ast: docAst, offset, tokenVector }) {\n const contextVisitor = new SuggestionContextVisitorWithClose(docAst, offset, tokenVector);\n contextVisitor.visit(cst);\n return contextVisitor.result;\n}\n/* eslint-disable no-unused-vars -- consistent signatures in visitor methods even if they are empty placeholders */\nclass SuggestionContextVisitorWithClose extends BaseXmlCstVisitor {\n constructor(docAst, offset, tokenVector) {\n super();\n this.docAst = docAst;\n this.targetOffset = offset;\n this.tokenVector = tokenVector;\n this.result = { providerType: null, providerArgs: {} };\n this.found = false;\n }\n /**\n * @param {DocumentCtx} ctx\n */\n document(ctx) {\n this.visit(ctx.element, this.docAst.rootElement);\n }\n /**\n * @param {PrologCtx} ctx\n */\n /* istanbul ignore next - place holder*/\n prolog(ctx, astNode) { }\n /**\n * @param {docTypeDeclCtx} ctx\n */\n /* istanbul ignore next - place holder*/\n docTypeDecl(ctx, astNode) { }\n /**\n * @param {ExternalIDCtx} ctx\n */\n /* istanbul ignore next - place holder*/\n externalID(ctx, astNode) { }\n /**\n * @param {ContentCtx} ctx\n * @param {XMLElement} astNode\n *\n */\n content(ctx, astNode) {\n forEach(ctx.element, (elem, idx) => {\n this.visit(elem, astNode.subElements[idx]);\n });\n }\n /**\n * @param {ElementCtx} ctx\n * @param {XMLElement} astNode\n */\n element(ctx, astNode) {\n // Order of handlers can affect the result!\n // They are ordered by priority, the more specific handlers are listed first.\n handleElementNameWithoutPrefixScenario(ctx, astNode, this);\n if (this.found === false) {\n handleElementNameWithPrefixScenario(ctx, astNode, this);\n }\n // Traverse Deeper\n if (this.found === false) {\n forEach(ctx.attribute, (attrib, idx) => this.visit(attrib, astNode.attributes[idx]));\n this.visit(ctx.content, astNode);\n }\n if (this.found === false) {\n handleNewAttributeKeyScenario(ctx, astNode, this.tokenVector, this);\n }\n if (this.found === false) {\n handleElementContentScenario(ctx, astNode, this);\n }\n if (this.found === false) {\n handleElementNameCloseWithoutPrefixScenario(ctx, astNode, this);\n }\n if (this.found === false) {\n handleElementNameCloseWithPrefixScenario(ctx, astNode, this);\n }\n }\n /**\n * @param {ReferenceCtx} ctx\n */\n /* istanbul ignore next - place holder*/\n reference(ctx, astNode) { }\n /**\n * @param {AttributeCtx} ctx\n * @param {XMLAttribute} astNode\n */\n attribute(ctx, astNode) {\n // potential Attribute Value scenarios\n /* istanbul ignore else - Very difficult to reproduce specific partial CSTs */\n if (exists(ctx.STRING)) {\n const valueTok = ctx.STRING[0];\n if (\n // The content assist point must be inside the string quotes\n valueTok.startOffset < this.targetOffset &&\n valueTok.endOffset >= this.targetOffset) {\n const prefixEnd = this.targetOffset - valueTok.startOffset;\n const prefix = valueTok.image.substring(1, prefixEnd);\n this.result.providerType = 'attributeValue';\n this.result.providerArgs = {\n element: astNode.parent,\n attribute: astNode,\n prefix: prefix !== '' ? prefix : undefined\n };\n this.found = true;\n }\n }\n /* istanbul ignore else - Very difficult to reproduce specific partial CSTs */\n if (exists(ctx.Name)) {\n const keyTok = ctx.Name[0];\n if (keyTok.startOffset <= this.targetOffset && keyTok.endOffset + 1 >= this.targetOffset) {\n const prefixEnd = this.targetOffset - keyTok.startOffset;\n const prefix = keyTok.image.substring(0, prefixEnd);\n this.result.providerType = 'attributeName';\n this.result.providerArgs = {\n element: astNode.parent,\n attribute: astNode,\n prefix: prefix !== '' ? prefix : undefined\n };\n this.found = true;\n }\n }\n }\n /**\n * @param {ChardataCtx} ctx\n */\n /* istanbul ignore next - place holder*/\n chardata(ctx, astNode) { }\n /**\n * @param {MiscCtx} ctx\n */\n /* istanbul ignore next - place holder*/\n misc(ctx, astNode) { }\n}\n/* eslint-enable no-unused-vars -- see matching pair above */\nfunction handleElementNameWithoutPrefixScenario(ctx, astNode, visitor) {\n /* istanbul ignore else - Very difficult to reproduce specific partial CSTs */\n if (exists(ctx.OPEN)) {\n const openTok = ctx.OPEN[0];\n if (openTok.endOffset + 1 === visitor.targetOffset) {\n visitor.result.providerType = 'elementName';\n visitor.result.providerArgs = { element: astNode, prefix: undefined };\n visitor.found = true;\n }\n }\n}\nfunction handleElementNameWithPrefixScenario(ctx, astNode, visitor) {\n /* istanbul ignore else - Very difficult to reproduce specific partial CSTs */\n if (exists(ctx.Name)) {\n const nameTok = ctx.Name[0];\n if (nameTok.startOffset < visitor.targetOffset &&\n nameTok.endOffset + 1 >= visitor.targetOffset) {\n visitor.result.providerType = 'elementName';\n const prefixLength = visitor.targetOffset - nameTok.startOffset;\n const prefix = nameTok.image.substring(0, prefixLength);\n visitor.result.providerArgs = { element: astNode, prefix: prefix };\n visitor.found = true;\n }\n }\n}\nfunction handleElementNameCloseWithoutPrefixScenario(ctx, astNode, visitor) {\n /* istanbul ignore else - Very difficult to reproduce specific partial CSTs */\n if (exists(ctx.SLASH_OPEN)) {\n const openTok = ctx.SLASH_OPEN[0];\n if (openTok.endOffset + 1 === visitor.targetOffset) {\n visitor.result.providerType = 'elementNameClose';\n visitor.result.providerArgs = { element: astNode, prefix: undefined };\n visitor.found = true;\n }\n }\n}\nfunction handleElementNameCloseWithPrefixScenario(ctx, astNode, visitor) {\n /* istanbul ignore else - Very difficult to reproduce specific partial CSTs */\n if (exists(ctx.END_NAME)) {\n const nameTok = ctx.END_NAME[0];\n if (nameTok.startOffset < visitor.targetOffset &&\n nameTok.endOffset + 1 >= visitor.targetOffset) {\n visitor.result.providerType = 'elementNameClose';\n const prefixLength = visitor.targetOffset - nameTok.startOffset;\n const prefix = nameTok.image.substring(0, prefixLength);\n visitor.result.providerArgs = { element: astNode, prefix: prefix };\n visitor.found = true;\n }\n }\n}\nfunction handleNewAttributeKeyScenario(ctx, astNode, tokenVector, visitor) {\n // Potential AttributeKey scenario in a completely new attribute\n // Note the guard condition (in caller) to avoid this branch if one of the attributes scenarios was already detected.\n // This means the order of checking the scenarios is meaningful!\n // Example of the problem:\n // - `<person gen⇶>` should be matched as attributeName **with prefix** (In attribute handler code)\n // - `<person gen=\"Y\"⇶>` should be matched as a **new** attributeName **without prefix** (in the code below).\n // But the logic below cannot distinguish these, so it must only be executed if the attribute handler failed.\n const attributesRange = { from: undefined, to: undefined };\n let hasTerminatedAttribRange = false;\n let hasAttributeCloseToken = false;\n /* istanbul ignore else - Very difficult to reproduce specific partial CSTs */\n if (exists(ctx.Name)) {\n attributesRange.from = ctx.Name[0].endOffset + 1;\n // Figure where does the attributes area end\n if (exists(ctx.START_CLOSE)) {\n attributesRange.to = ctx.START_CLOSE[0].startOffset;\n hasTerminatedAttribRange = true;\n hasAttributeCloseToken = true;\n }\n else if (exists(ctx.SLASH_CLOSE)) {\n attributesRange.to = ctx.SLASH_CLOSE[0].startOffset;\n hasTerminatedAttribRange = true;\n hasAttributeCloseToken = true;\n // If we do not have a proper Attribute Section closing mark we use the last attribute instead\n }\n else if (isEmpty(ctx.attribute) === false) {\n attributesRange.to = last(ctx.attribute).location.endOffset;\n hasTerminatedAttribRange = true;\n }\n }\n if (hasTerminatedAttribRange &&\n visitor.targetOffset <= attributesRange.to &&\n attributesRange.from <= visitor.targetOffset) {\n const isNotInExistingAttribute = find(ctx.attribute, attribCst => {\n const attribLoc = attribCst.location;\n return (visitor.targetOffset >= attribLoc.startOffset &&\n visitor.targetOffset <= attribLoc.endOffset);\n }) === undefined;\n // inside attribute area but not contained in any existing attribute\n /* istanbul ignore else - else branch is handled inside the attributes themselves and can never occur here */\n if (isNotInExistingAttribute) {\n visitor.result.providerType = 'attributeName';\n visitor.result.providerArgs = {\n element: astNode,\n attribute: undefined,\n prefix: undefined\n };\n visitor.found = true;\n }\n }\n else if (\n /**\n * Heuristic when we some attributes but no proper attribute Range\n * and we request the assist after the last attribute.\n * <people>\n * <person age=\"66\" ⇶\n * </people>\n */\n hasTerminatedAttribRange &&\n visitor.targetOffset > attributesRange.to &&\n hasAttributeCloseToken === false) {\n handleNewAttributeKeyForPartialElement(\n // dummy pesudo token a we are searching the following token using the endOffset\n { endOffset: attributesRange.to }, tokenVector, visitor, astNode);\n /**\n * Heuristic when we have no attribute range, e.g:\n * <people>\n * <person ⇶\n * </people>\n */\n }\n else if (hasTerminatedAttribRange === false) {\n handleNewAttributeKeyForPartialElement(ctx.Name ? ctx.Name[0] : ctx.OPEN[0], tokenVector, visitor, astNode);\n }\n}\nfunction handleNewAttributeKeyForPartialElement(possibleAttribKeyRangeStartTok, tokenVector, visitor, astNode) {\n const nextAfterElemNameTok = findNextTextualToken(tokenVector, possibleAttribKeyRangeStartTok.endOffset);\n if (visitor.targetOffset > possibleAttribKeyRangeStartTok.endOffset &&\n (nextAfterElemNameTok === null || // `null`` means there are no more textual tokens in the input\n visitor.targetOffset <= nextAfterElemNameTok.startOffset)) {\n visitor.result.providerType = 'attributeName';\n visitor.result.providerArgs = {\n element: astNode,\n attribute: undefined,\n prefix: undefined\n };\n visitor.found = true;\n }\n}\nfunction handleElementContentScenario(ctx, astNode, visitor) {\n const contentRange = { from: undefined, to: undefined };\n let hasContentRange = false;\n /* istanbul ignore else - Very difficult to reproduce specific partial CSTs */\n if (exists(ctx.START_CLOSE)) {\n contentRange.from = ctx.START_CLOSE[0].endOffset + 1;\n // visitor logic only works when the attribute section is properly terminated\n /* istanbul ignore else - Very difficult to reproduce specific partial CSTs */\n if (exists(ctx.SLASH_OPEN)) {\n contentRange.to = ctx.SLASH_OPEN[0].startOffset;\n hasContentRange = true;\n }\n else if (exists(ctx.SLASH_CLOSE)) {\n contentRange.to = ctx.SLASH_CLOSE[0].startOffset;\n hasContentRange = true;\n }\n }\n if (hasContentRange &&\n visitor.targetOffset <= contentRange.to &&\n contentRange.from <= visitor.targetOffset) {\n const allContentChildren = flatMap(ctx.content[0].children, identity);\n const innerContentPart = find(allContentChildren, subContent => {\n // Handling either CSTNodes or Tokens\n const subContentLoc = subContent.location ? subContent.location : subContent;\n // Our offset ranges are Inclusive to Exclusive\n // <person>abc⇶</person> --> Not inside the CharData Location, but uses `abc` as prefix\n // <person>⇶abc</person> --> Inside the CharData Location, but does not have any prefix\n const targetOffsetForPrefix = visitor.targetOffset - 1;\n return (targetOffsetForPrefix >= subContentLoc.startOffset &&\n targetOffsetForPrefix <= subContentLoc.endOffset);\n });\n // ElementContent without prefix\n if (innerContentPart === undefined) {\n visitor.result.providerType = 'elementContent';\n visitor.result.providerArgs = {\n element: astNode,\n textContent: undefined,\n prefix: undefined\n };\n visitor.found = true;\n }\n else if (innerContentPart.name === 'chardata') {\n const textNodeIdx = findIndex(ctx.content[0].children.chardata, innerContentPart);\n const textContentsAstNode = astNode.textContents[textNodeIdx];\n const prefixEnd = visitor.targetOffset - textContentsAstNode.position.startOffset;\n visitor.result.providerType = 'elementContent';\n visitor.result.providerArgs = {\n element: astNode,\n textContent: textContentsAstNode,\n prefix: textContentsAstNode.text.substring(0, prefixEnd)\n };\n visitor.found = true;\n }\n }\n}\nfunction exists(tokArr) {\n return isArray(tokArr) && tokArr.length === 1 && tokArr[0].isInsertedInRecovery !== true;\n}\nmodule.exports = {\n computeCompletionSyntacticContext: computeCompletionSyntacticContext,\n getSuggestions: getSuggestions\n};\n//# sourceMappingURL=xmlContentAssist.js.map"],"names":[],"mappings":"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"}