From c1913db2030527c344fd4d75456ca0cce8d4a7c7 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Sun, 12 Dec 2021 14:41:15 +0100 Subject: [PATCH 1/7] Added html language implementation --- data/playground/html.html | 20 +++++++++- src/languages/constants.ts | 1 + src/languages/getNodeMatcher.ts | 6 ++- src/languages/getTextFragmentExtractor.ts | 2 +- src/languages/html.ts | 40 +++++++++++++++++++ .../surroundingPair/delimiterMaps.ts | 2 +- .../recorded/languages/html/chuckValueInk.yml | 33 +++++++++++++++ .../languages/html/clearAttributeVest.yml | 33 +++++++++++++++ .../recorded/languages/html/clearComment.yml | 23 +++++++++++ .../recorded/languages/html/clearElement.yml | 26 ++++++++++++ .../recorded/languages/html/clearEndTag.yml | 28 +++++++++++++ .../recorded/languages/html/clearKey.yml | 29 ++++++++++++++ .../recorded/languages/html/clearName.yml | 29 ++++++++++++++ .../recorded/languages/html/clearStartTag.yml | 29 ++++++++++++++ .../recorded/languages/html/clearString.yml | 29 ++++++++++++++ .../recorded/languages/html/clearTags.yml | 32 +++++++++++++++ 16 files changed, 356 insertions(+), 6 deletions(-) create mode 100644 src/languages/html.ts create mode 100644 src/test/suite/fixtures/recorded/languages/html/chuckValueInk.yml create mode 100644 src/test/suite/fixtures/recorded/languages/html/clearAttributeVest.yml create mode 100644 src/test/suite/fixtures/recorded/languages/html/clearComment.yml create mode 100644 src/test/suite/fixtures/recorded/languages/html/clearElement.yml create mode 100644 src/test/suite/fixtures/recorded/languages/html/clearEndTag.yml create mode 100644 src/test/suite/fixtures/recorded/languages/html/clearKey.yml create mode 100644 src/test/suite/fixtures/recorded/languages/html/clearName.yml create mode 100644 src/test/suite/fixtures/recorded/languages/html/clearStartTag.yml create mode 100644 src/test/suite/fixtures/recorded/languages/html/clearString.yml create mode 100644 src/test/suite/fixtures/recorded/languages/html/clearTags.yml diff --git a/data/playground/html.html b/data/playground/html.html index 4b1b112f31..875272ae9c 100644 --- a/data/playground/html.html +++ b/data/playground/html.html @@ -1,9 +1,25 @@ - + + + + + Hello + + +

Title

+
+ Hello world + +
+
\ No newline at end of file diff --git a/src/languages/constants.ts b/src/languages/constants.ts index 2ead5eb26e..6574082089 100644 --- a/src/languages/constants.ts +++ b/src/languages/constants.ts @@ -2,6 +2,7 @@ export const supportedLanguageIds = [ "c", "cpp", "csharp", + "html", "java", "javascript", "javascriptreact", diff --git a/src/languages/getNodeMatcher.ts b/src/languages/getNodeMatcher.ts index 85ddb7ab84..782a8fbce6 100644 --- a/src/languages/getNodeMatcher.ts +++ b/src/languages/getNodeMatcher.ts @@ -12,6 +12,7 @@ import csharp from "./csharp"; import { patternMatchers as json } from "./json"; import { patternMatchers as typescript } from "./typescript"; import { patternMatchers as java } from "./java"; +import { patternMatchers as html } from "./html"; import python from "./python"; import { UnsupportedLanguageError } from "../errors"; import { SupportedLanguageId } from "./constants"; @@ -45,8 +46,9 @@ const languageMatchers: Record< Record > = { c: cpp, - cpp: cpp, - csharp: csharp, + cpp, + csharp, + html, java, javascript: typescript, javascriptreact: typescript, diff --git a/src/languages/getTextFragmentExtractor.ts b/src/languages/getTextFragmentExtractor.ts index 2ca609667a..1f1195ce3e 100644 --- a/src/languages/getTextFragmentExtractor.ts +++ b/src/languages/getTextFragmentExtractor.ts @@ -9,7 +9,6 @@ import { SupportedLanguageId } from "./constants"; import { getNodeInternalRange, getNodeRange, - makeRangeFromPositions, } from "../util/nodeSelectors"; import { getNodeMatcher } from "./getNodeMatcher"; import { notSupported } from "../util/nodeMatchers"; @@ -96,6 +95,7 @@ const textFragmentExtractors: Record< c: constructDefaultTextFragmentExtractor("c"), cpp: constructDefaultTextFragmentExtractor("cpp"), csharp: constructDefaultTextFragmentExtractor("csharp"), + html: constructDefaultTextFragmentExtractor("html"), java: constructDefaultTextFragmentExtractor( "java", javaStringTextFragmentExtractor diff --git a/src/languages/html.ts b/src/languages/html.ts new file mode 100644 index 0000000000..ca25519b01 --- /dev/null +++ b/src/languages/html.ts @@ -0,0 +1,40 @@ +import { + createPatternMatchers, + leadingMatcher, + patternMatcher, +} from "../util/nodeMatchers"; +import { + ScopeType, + NodeMatcherAlternative, + SelectionWithEditor, +} from "../typings/Types"; +import { SyntaxNode } from "web-tree-sitter"; + +const attribute = "*?.attribute!"; + +const getStartTag = patternMatcher(`*?.start_tag!`); +const getEndTag = patternMatcher(`*?.end_tag!`); + +const getTags = (selection: SelectionWithEditor, node: SyntaxNode) => { + const startTag = getStartTag(selection, node); + const endTag = getEndTag(selection, node); + return startTag != null && endTag != null ? startTag.concat(endTag) : null; +}; +const nodeMatchers: Partial> = { + xmlElement: ["element", "script_element", "style_element"], + xmlBothTags: getTags, + xmlStartTag: getStartTag, + xmlEndTag: getEndTag, + attribute: attribute, + collectionItem: attribute, + name: "*?.tag_name!", + collectionKey: ["*?.attribute_name!"], + value: leadingMatcher( + ["*?.quoted_attribute_value!.attribute_value", "*?.attribute_value!"], + ["="] + ), + string: "quoted_attribute_value", + comment: "comment", +}; + +export const patternMatchers = createPatternMatchers(nodeMatchers); diff --git a/src/processTargets/modifiers/surroundingPair/delimiterMaps.ts b/src/processTargets/modifiers/surroundingPair/delimiterMaps.ts index d973ac8866..85f7423e81 100644 --- a/src/processTargets/modifiers/surroundingPair/delimiterMaps.ts +++ b/src/processTargets/modifiers/surroundingPair/delimiterMaps.ts @@ -9,7 +9,7 @@ export const delimiterToText: Record< SimpleSurroundingPairName, [IndividualDelimiterText, IndividualDelimiterText] > = { - angleBrackets: ["<", ">"], + angleBrackets: ["<", [">", "/>"]], backtickQuotes: ["`", "`"], curlyBrackets: [["{", "${"], "}"], doubleQuotes: ['"', '"'], diff --git a/src/test/suite/fixtures/recorded/languages/html/chuckValueInk.yml b/src/test/suite/fixtures/recorded/languages/html/chuckValueInk.yml new file mode 100644 index 0000000000..5ba7e592d3 --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/html/chuckValueInk.yml @@ -0,0 +1,33 @@ +languageId: html +command: + version: 1 + spokenForm: chuck value ink + action: remove + targets: + - type: primitive + modifier: {type: containingScope, scopeType: value, includeSiblings: false} + mark: {type: decoratedSymbol, symbolColor: default, character: i} +initialState: + documentContents: |- + + + + selections: + - anchor: {line: 1, character: 4} + active: {line: 1, character: 4} + marks: + default.i: + start: {line: 0, character: 6} + end: {line: 0, character: 8} +finalState: + documentContents: |- + + + + selections: + - anchor: {line: 1, character: 4} + active: {line: 1, character: 4} + thatMark: + - anchor: {line: 0, character: 8} + active: {line: 0, character: 8} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: i}, selectionType: token, position: contents, insideOutsideType: outside, modifier: {type: containingScope, scopeType: value, includeSiblings: false}}] diff --git a/src/test/suite/fixtures/recorded/languages/html/clearAttributeVest.yml b/src/test/suite/fixtures/recorded/languages/html/clearAttributeVest.yml new file mode 100644 index 0000000000..af03c7e65d --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/html/clearAttributeVest.yml @@ -0,0 +1,33 @@ +languageId: html +command: + version: 1 + spokenForm: clear attribute vest + action: clearAndSetSelection + targets: + - type: primitive + modifier: {type: containingScope, scopeType: attribute, includeSiblings: false} + mark: {type: decoratedSymbol, symbolColor: default, character: v} +initialState: + documentContents: |- + + + + selections: + - anchor: {line: 1, character: 4} + active: {line: 1, character: 4} + marks: + default.v: + start: {line: 0, character: 10} + end: {line: 0, character: 15} +finalState: + documentContents: |- + + + + selections: + - anchor: {line: 0, character: 6} + active: {line: 0, character: 6} + thatMark: + - anchor: {line: 0, character: 6} + active: {line: 0, character: 6} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: v}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: containingScope, scopeType: attribute, includeSiblings: false}}] diff --git a/src/test/suite/fixtures/recorded/languages/html/clearComment.yml b/src/test/suite/fixtures/recorded/languages/html/clearComment.yml new file mode 100644 index 0000000000..c72e74deb2 --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/html/clearComment.yml @@ -0,0 +1,23 @@ +languageId: html +command: + version: 1 + spokenForm: clear comment + action: clearAndSetSelection + targets: + - type: primitive + modifier: {type: containingScope, scopeType: comment, includeSiblings: false} +initialState: + documentContents: + selections: + - anchor: {line: 0, character: 8} + active: {line: 0, character: 8} + marks: {} +finalState: + documentContents: "" + selections: + - anchor: {line: 0, character: 0} + active: {line: 0, character: 0} + thatMark: + - anchor: {line: 0, character: 0} + active: {line: 0, character: 0} +fullTargets: [{type: primitive, mark: {type: cursor}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: containingScope, scopeType: comment, includeSiblings: false}}] diff --git a/src/test/suite/fixtures/recorded/languages/html/clearElement.yml b/src/test/suite/fixtures/recorded/languages/html/clearElement.yml new file mode 100644 index 0000000000..ec2de69d43 --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/html/clearElement.yml @@ -0,0 +1,26 @@ +languageId: html +command: + version: 1 + spokenForm: clear element + action: clearAndSetSelection + targets: + - type: primitive + modifier: {type: containingScope, scopeType: xmlElement, includeSiblings: false} +initialState: + documentContents: |- + + + + selections: + - anchor: {line: 1, character: 4} + active: {line: 1, character: 4} + marks: {} +finalState: + documentContents: "" + selections: + - anchor: {line: 0, character: 0} + active: {line: 0, character: 0} + thatMark: + - anchor: {line: 0, character: 0} + active: {line: 0, character: 0} +fullTargets: [{type: primitive, mark: {type: cursor}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: containingScope, scopeType: xmlElement, includeSiblings: false}}] diff --git a/src/test/suite/fixtures/recorded/languages/html/clearEndTag.yml b/src/test/suite/fixtures/recorded/languages/html/clearEndTag.yml new file mode 100644 index 0000000000..8494eddaa0 --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/html/clearEndTag.yml @@ -0,0 +1,28 @@ +languageId: html +command: + version: 1 + spokenForm: clear end tag + action: clearAndSetSelection + targets: + - type: primitive + modifier: {type: containingScope, scopeType: xmlEndTag, includeSiblings: false} +initialState: + documentContents: |- + + + + selections: + - anchor: {line: 1, character: 4} + active: {line: 1, character: 4} + marks: {} +finalState: + documentContents: | + + + selections: + - anchor: {line: 2, character: 0} + active: {line: 2, character: 0} + thatMark: + - anchor: {line: 2, character: 0} + active: {line: 2, character: 0} +fullTargets: [{type: primitive, mark: {type: cursor}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: containingScope, scopeType: xmlEndTag, includeSiblings: false}}] diff --git a/src/test/suite/fixtures/recorded/languages/html/clearKey.yml b/src/test/suite/fixtures/recorded/languages/html/clearKey.yml new file mode 100644 index 0000000000..0e364d4fb5 --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/html/clearKey.yml @@ -0,0 +1,29 @@ +languageId: html +command: + version: 1 + spokenForm: clear key + action: clearAndSetSelection + targets: + - type: primitive + modifier: {type: containingScope, scopeType: collectionKey, includeSiblings: false} +initialState: + documentContents: |- + + + + selections: + - anchor: {line: 0, character: 9} + active: {line: 0, character: 9} + marks: {} +finalState: + documentContents: |- + + + + selections: + - anchor: {line: 0, character: 6} + active: {line: 0, character: 6} + thatMark: + - anchor: {line: 0, character: 6} + active: {line: 0, character: 6} +fullTargets: [{type: primitive, mark: {type: cursor}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: containingScope, scopeType: collectionKey, includeSiblings: false}}] diff --git a/src/test/suite/fixtures/recorded/languages/html/clearName.yml b/src/test/suite/fixtures/recorded/languages/html/clearName.yml new file mode 100644 index 0000000000..89dcadf8a6 --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/html/clearName.yml @@ -0,0 +1,29 @@ +languageId: html +command: + version: 1 + spokenForm: clear name + action: clearAndSetSelection + targets: + - type: primitive + modifier: {type: containingScope, scopeType: name, includeSiblings: false} +initialState: + documentContents: |- + + + + selections: + - anchor: {line: 0, character: 9} + active: {line: 0, character: 9} + marks: {} +finalState: + documentContents: |- + < id="value"> + + + selections: + - anchor: {line: 0, character: 1} + active: {line: 0, character: 1} + thatMark: + - anchor: {line: 0, character: 1} + active: {line: 0, character: 1} +fullTargets: [{type: primitive, mark: {type: cursor}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: containingScope, scopeType: name, includeSiblings: false}}] diff --git a/src/test/suite/fixtures/recorded/languages/html/clearStartTag.yml b/src/test/suite/fixtures/recorded/languages/html/clearStartTag.yml new file mode 100644 index 0000000000..498d53bfdf --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/html/clearStartTag.yml @@ -0,0 +1,29 @@ +languageId: html +command: + version: 1 + spokenForm: clear start tag + action: clearAndSetSelection + targets: + - type: primitive + modifier: {type: containingScope, scopeType: xmlStartTag, includeSiblings: false} +initialState: + documentContents: |- + + + + selections: + - anchor: {line: 1, character: 4} + active: {line: 1, character: 4} + marks: {} +finalState: + documentContents: |2- + + + + selections: + - anchor: {line: 0, character: 0} + active: {line: 0, character: 0} + thatMark: + - anchor: {line: 0, character: 0} + active: {line: 0, character: 0} +fullTargets: [{type: primitive, mark: {type: cursor}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: containingScope, scopeType: xmlStartTag, includeSiblings: false}}] diff --git a/src/test/suite/fixtures/recorded/languages/html/clearString.yml b/src/test/suite/fixtures/recorded/languages/html/clearString.yml new file mode 100644 index 0000000000..1dfdeec863 --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/html/clearString.yml @@ -0,0 +1,29 @@ +languageId: html +command: + version: 1 + spokenForm: clear string + action: clearAndSetSelection + targets: + - type: primitive + modifier: {type: surroundingPair, delimiter: string} +initialState: + documentContents: |- + + + + selections: + - anchor: {line: 0, character: 11} + active: {line: 0, character: 11} + marks: {} +finalState: + documentContents: |- + + + + selections: + - anchor: {line: 0, character: 9} + active: {line: 0, character: 9} + thatMark: + - anchor: {line: 0, character: 9} + active: {line: 0, character: 9} +fullTargets: [{type: primitive, mark: {type: cursor}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: surroundingPair, delimiter: string}}] diff --git a/src/test/suite/fixtures/recorded/languages/html/clearTags.yml b/src/test/suite/fixtures/recorded/languages/html/clearTags.yml new file mode 100644 index 0000000000..7e381c84ac --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/html/clearTags.yml @@ -0,0 +1,32 @@ +languageId: html +command: + version: 1 + spokenForm: clear tags + action: clearAndSetSelection + targets: + - type: primitive + modifier: {type: containingScope, scopeType: xmlBothTags, includeSiblings: false} +initialState: + documentContents: |- + + + + selections: + - anchor: {line: 1, character: 4} + active: {line: 1, character: 4} + marks: {} +finalState: + documentContents: |2 + + + selections: + - anchor: {line: 0, character: 0} + active: {line: 0, character: 0} + - anchor: {line: 2, character: 0} + active: {line: 2, character: 0} + thatMark: + - anchor: {line: 0, character: 0} + active: {line: 0, character: 0} + - anchor: {line: 2, character: 0} + active: {line: 2, character: 0} +fullTargets: [{type: primitive, mark: {type: cursor}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: containingScope, scopeType: xmlBothTags, includeSiblings: false}}] From 895192959f24510fde312cfe4fc076cf8fa58620 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Wed, 15 Dec 2021 20:01:52 +0100 Subject: [PATCH 2/7] Added additional angle bound --- src/processTargets/modifiers/surroundingPair/delimiterMaps.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/processTargets/modifiers/surroundingPair/delimiterMaps.ts b/src/processTargets/modifiers/surroundingPair/delimiterMaps.ts index 85f7423e81..b3b331405e 100644 --- a/src/processTargets/modifiers/surroundingPair/delimiterMaps.ts +++ b/src/processTargets/modifiers/surroundingPair/delimiterMaps.ts @@ -9,7 +9,7 @@ export const delimiterToText: Record< SimpleSurroundingPairName, [IndividualDelimiterText, IndividualDelimiterText] > = { - angleBrackets: ["<", [">", "/>"]], + angleBrackets: [["<", "", "/>"]], backtickQuotes: ["`", "`"], curlyBrackets: [["{", "${"], "}"], doubleQuotes: ['"', '"'], From 703a7e16846b58e47395e43d6199577670b9adb6 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Wed, 15 Dec 2021 20:22:01 +0100 Subject: [PATCH 3/7] Added tests --- .../languages/html/takeBoundsBatt.yml | 31 +++++++++++++++++++ .../recorded/languages/html/takeBoundsRam.yml | 31 +++++++++++++++++++ .../recorded/languages/html/takePairBatt.yml | 29 +++++++++++++++++ .../recorded/languages/html/takePairRam.yml | 27 ++++++++++++++++ 4 files changed, 118 insertions(+) create mode 100644 src/test/suite/fixtures/recorded/languages/html/takeBoundsBatt.yml create mode 100644 src/test/suite/fixtures/recorded/languages/html/takeBoundsRam.yml create mode 100644 src/test/suite/fixtures/recorded/languages/html/takePairBatt.yml create mode 100644 src/test/suite/fixtures/recorded/languages/html/takePairRam.yml diff --git a/src/test/suite/fixtures/recorded/languages/html/takeBoundsBatt.yml b/src/test/suite/fixtures/recorded/languages/html/takeBoundsBatt.yml new file mode 100644 index 0000000000..a677692a28 --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/html/takeBoundsBatt.yml @@ -0,0 +1,31 @@ +languageId: html +command: + version: 1 + spokenForm: take bounds batt + action: setSelection + targets: + - type: primitive + modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior} + mark: {type: decoratedSymbol, symbolColor: default, character: b} +initialState: + documentContents: "\r\n \r\n
\r\n \r\n" + selections: + - anchor: {line: 3, character: 4} + active: {line: 3, character: 11} + marks: + default.b: + start: {line: 3, character: 6} + end: {line: 3, character: 10} +finalState: + documentContents: "\r\n \r\n
\r\n \r\n" + selections: + - anchor: {line: 3, character: 4} + active: {line: 3, character: 6} + - anchor: {line: 3, character: 10} + active: {line: 3, character: 11} + thatMark: + - anchor: {line: 3, character: 4} + active: {line: 3, character: 6} + - anchor: {line: 3, character: 10} + active: {line: 3, character: 11} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: b}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior}}] diff --git a/src/test/suite/fixtures/recorded/languages/html/takeBoundsRam.yml b/src/test/suite/fixtures/recorded/languages/html/takeBoundsRam.yml new file mode 100644 index 0000000000..00afa580b9 --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/html/takeBoundsRam.yml @@ -0,0 +1,31 @@ +languageId: html +command: + version: 1 + spokenForm: take bounds ram + action: setSelection + targets: + - type: primitive + modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior} + mark: {type: decoratedSymbol, symbolColor: default, character: r} +initialState: + documentContents: "\r\n \r\n
\r\n \r\n" + selections: + - anchor: {line: 2, character: 8} + active: {line: 2, character: 13} + marks: + default.r: + start: {line: 2, character: 9} + end: {line: 2, character: 11} +finalState: + documentContents: "\r\n \r\n
\r\n \r\n" + selections: + - anchor: {line: 2, character: 8} + active: {line: 2, character: 9} + - anchor: {line: 2, character: 11} + active: {line: 2, character: 13} + thatMark: + - anchor: {line: 2, character: 8} + active: {line: 2, character: 9} + - anchor: {line: 2, character: 11} + active: {line: 2, character: 13} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: r}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior}}] diff --git a/src/test/suite/fixtures/recorded/languages/html/takePairBatt.yml b/src/test/suite/fixtures/recorded/languages/html/takePairBatt.yml new file mode 100644 index 0000000000..0e374284c8 --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/html/takePairBatt.yml @@ -0,0 +1,29 @@ +languageId: html +command: + version: 1 + spokenForm: take pair batt + action: setSelection + targets: + - type: primitive + modifier: {type: surroundingPair, delimiter: any} + mark: {type: decoratedSymbol, symbolColor: default, character: b} +initialState: + documentContents: "\r\n \r\n
\r\n \r\n" + selections: + - anchor: {line: 2, character: 8} + active: {line: 2, character: 9} + - anchor: {line: 2, character: 11} + active: {line: 2, character: 13} + marks: + default.b: + start: {line: 3, character: 6} + end: {line: 3, character: 10} +finalState: + documentContents: "\r\n \r\n
\r\n \r\n" + selections: + - anchor: {line: 3, character: 4} + active: {line: 3, character: 11} + thatMark: + - anchor: {line: 3, character: 4} + active: {line: 3, character: 11} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: b}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: surroundingPair, delimiter: any}}] diff --git a/src/test/suite/fixtures/recorded/languages/html/takePairRam.yml b/src/test/suite/fixtures/recorded/languages/html/takePairRam.yml new file mode 100644 index 0000000000..05e23239b2 --- /dev/null +++ b/src/test/suite/fixtures/recorded/languages/html/takePairRam.yml @@ -0,0 +1,27 @@ +languageId: html +command: + version: 1 + spokenForm: take pair ram + action: setSelection + targets: + - type: primitive + modifier: {type: surroundingPair, delimiter: any} + mark: {type: decoratedSymbol, symbolColor: default, character: r} +initialState: + documentContents: "\r\n \r\n
\r\n \r\n" + selections: + - anchor: {line: 4, character: 7} + active: {line: 4, character: 7} + marks: + default.r: + start: {line: 2, character: 9} + end: {line: 2, character: 11} +finalState: + documentContents: "\r\n \r\n
\r\n \r\n" + selections: + - anchor: {line: 2, character: 8} + active: {line: 2, character: 13} + thatMark: + - anchor: {line: 2, character: 8} + active: {line: 2, character: 13} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: r}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: surroundingPair, delimiter: any}}] From cb7be72bd6754c3388071ed4656393fbc6420b73 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Wed, 15 Dec 2021 20:54:32 +0100 Subject: [PATCH 4/7] Updated tests --- .../html/clearBoundsBatt.yml} | 34 +++++++++------ .../surroundingPair/html/clearBoundsOx.yml | 41 +++++++++++++++++++ .../surroundingPair/html/clearBoundsOx2.yml | 41 +++++++++++++++++++ .../html/clearBoundsRam.yml} | 34 +++++++++------ .../surroundingPair/html/clearBoundsRam2.yml | 41 +++++++++++++++++++ .../html/clearPairBatt.yml} | 28 ++++++++----- .../surroundingPair/html/clearPairOx.yml | 37 +++++++++++++++++ .../html/clearPairRam.yml} | 22 +++++++--- 8 files changed, 238 insertions(+), 40 deletions(-) rename src/test/suite/fixtures/recorded/{languages/html/takeBoundsBatt.yml => surroundingPair/html/clearBoundsBatt.yml} (56%) create mode 100644 src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsOx.yml create mode 100644 src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsOx2.yml rename src/test/suite/fixtures/recorded/{languages/html/takeBoundsRam.yml => surroundingPair/html/clearBoundsRam.yml} (56%) create mode 100644 src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsRam2.yml rename src/test/suite/fixtures/recorded/{languages/html/takePairBatt.yml => surroundingPair/html/clearPairBatt.yml} (59%) create mode 100644 src/test/suite/fixtures/recorded/surroundingPair/html/clearPairOx.yml rename src/test/suite/fixtures/recorded/{languages/html/takePairRam.yml => surroundingPair/html/clearPairRam.yml} (69%) diff --git a/src/test/suite/fixtures/recorded/languages/html/takeBoundsBatt.yml b/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsBatt.yml similarity index 56% rename from src/test/suite/fixtures/recorded/languages/html/takeBoundsBatt.yml rename to src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsBatt.yml index a677692a28..8aceccdf01 100644 --- a/src/test/suite/fixtures/recorded/languages/html/takeBoundsBatt.yml +++ b/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsBatt.yml @@ -1,31 +1,41 @@ languageId: html command: version: 1 - spokenForm: take bounds batt - action: setSelection + spokenForm: clear bounds batt + action: clearAndSetSelection targets: - type: primitive modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior} mark: {type: decoratedSymbol, symbolColor: default, character: b} initialState: - documentContents: "\r\n \r\n
\r\n \r\n" + documentContents: |- + + +
+ + selections: - - anchor: {line: 3, character: 4} - active: {line: 3, character: 11} + - anchor: {line: 4, character: 7} + active: {line: 4, character: 7} marks: default.b: start: {line: 3, character: 6} end: {line: 3, character: 10} finalState: - documentContents: "\r\n \r\n
\r\n \r\n" + documentContents: |- + + +
+ body + selections: - anchor: {line: 3, character: 4} - active: {line: 3, character: 6} - - anchor: {line: 3, character: 10} - active: {line: 3, character: 11} + active: {line: 3, character: 4} + - anchor: {line: 3, character: 8} + active: {line: 3, character: 8} thatMark: - anchor: {line: 3, character: 4} - active: {line: 3, character: 6} - - anchor: {line: 3, character: 10} - active: {line: 3, character: 11} + active: {line: 3, character: 4} + - anchor: {line: 3, character: 8} + active: {line: 3, character: 8} fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: b}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior}}] diff --git a/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsOx.yml b/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsOx.yml new file mode 100644 index 0000000000..eca303b431 --- /dev/null +++ b/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsOx.yml @@ -0,0 +1,41 @@ +languageId: html +command: + version: 1 + spokenForm: clear bounds ox + action: clearAndSetSelection + targets: + - type: primitive + modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior} + mark: {type: decoratedSymbol, symbolColor: default, character: o} +initialState: + documentContents: |- + + +
+ + + selections: + - anchor: {line: 4, character: 7} + active: {line: 4, character: 7} + marks: + default.o: + start: {line: 1, character: 5} + end: {line: 1, character: 9} +finalState: + documentContents: |- + + body +
+ + + selections: + - anchor: {line: 1, character: 4} + active: {line: 1, character: 4} + - anchor: {line: 1, character: 8} + active: {line: 1, character: 8} + thatMark: + - anchor: {line: 1, character: 4} + active: {line: 1, character: 4} + - anchor: {line: 1, character: 8} + active: {line: 1, character: 8} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: o}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior}}] diff --git a/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsOx2.yml b/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsOx2.yml new file mode 100644 index 0000000000..8f0dca93f0 --- /dev/null +++ b/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsOx2.yml @@ -0,0 +1,41 @@ +languageId: plaintext +command: + version: 1 + spokenForm: clear bounds ox + action: clearAndSetSelection + targets: + - type: primitive + modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior} + mark: {type: decoratedSymbol, symbolColor: default, character: o} +initialState: + documentContents: |- + + +
+ + + selections: + - anchor: {line: 4, character: 7} + active: {line: 4, character: 7} + marks: + default.o: + start: {line: 1, character: 5} + end: {line: 1, character: 9} +finalState: + documentContents: |- + + body +
+ + + selections: + - anchor: {line: 1, character: 4} + active: {line: 1, character: 4} + - anchor: {line: 1, character: 8} + active: {line: 1, character: 8} + thatMark: + - anchor: {line: 1, character: 4} + active: {line: 1, character: 4} + - anchor: {line: 1, character: 8} + active: {line: 1, character: 8} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: o}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior}}] diff --git a/src/test/suite/fixtures/recorded/languages/html/takeBoundsRam.yml b/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsRam.yml similarity index 56% rename from src/test/suite/fixtures/recorded/languages/html/takeBoundsRam.yml rename to src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsRam.yml index 00afa580b9..fc723f3d48 100644 --- a/src/test/suite/fixtures/recorded/languages/html/takeBoundsRam.yml +++ b/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsRam.yml @@ -1,31 +1,41 @@ languageId: html command: version: 1 - spokenForm: take bounds ram - action: setSelection + spokenForm: clear bounds ram + action: clearAndSetSelection targets: - type: primitive modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior} mark: {type: decoratedSymbol, symbolColor: default, character: r} initialState: - documentContents: "\r\n \r\n
\r\n \r\n" + documentContents: |- + + +
+ + selections: - - anchor: {line: 2, character: 8} - active: {line: 2, character: 13} + - anchor: {line: 4, character: 7} + active: {line: 4, character: 7} marks: default.r: start: {line: 2, character: 9} end: {line: 2, character: 11} finalState: - documentContents: "\r\n \r\n
\r\n \r\n" + documentContents: |- + + + hr + + selections: - anchor: {line: 2, character: 8} - active: {line: 2, character: 9} - - anchor: {line: 2, character: 11} - active: {line: 2, character: 13} + active: {line: 2, character: 8} + - anchor: {line: 2, character: 10} + active: {line: 2, character: 10} thatMark: - anchor: {line: 2, character: 8} - active: {line: 2, character: 9} - - anchor: {line: 2, character: 11} - active: {line: 2, character: 13} + active: {line: 2, character: 8} + - anchor: {line: 2, character: 10} + active: {line: 2, character: 10} fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: r}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior}}] diff --git a/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsRam2.yml b/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsRam2.yml new file mode 100644 index 0000000000..3b164fbc19 --- /dev/null +++ b/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsRam2.yml @@ -0,0 +1,41 @@ +languageId: plaintext +command: + version: 1 + spokenForm: clear bounds ram + action: clearAndSetSelection + targets: + - type: primitive + modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior} + mark: {type: decoratedSymbol, symbolColor: default, character: r} +initialState: + documentContents: |- + + +
+ + + selections: + - anchor: {line: 4, character: 7} + active: {line: 4, character: 7} + marks: + default.r: + start: {line: 2, character: 9} + end: {line: 2, character: 11} +finalState: + documentContents: |- + + + hr + + + selections: + - anchor: {line: 2, character: 8} + active: {line: 2, character: 8} + - anchor: {line: 2, character: 10} + active: {line: 2, character: 10} + thatMark: + - anchor: {line: 2, character: 8} + active: {line: 2, character: 8} + - anchor: {line: 2, character: 10} + active: {line: 2, character: 10} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: r}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior}}] diff --git a/src/test/suite/fixtures/recorded/languages/html/takePairBatt.yml b/src/test/suite/fixtures/recorded/surroundingPair/html/clearPairBatt.yml similarity index 59% rename from src/test/suite/fixtures/recorded/languages/html/takePairBatt.yml rename to src/test/suite/fixtures/recorded/surroundingPair/html/clearPairBatt.yml index 0e374284c8..3580037804 100644 --- a/src/test/suite/fixtures/recorded/languages/html/takePairBatt.yml +++ b/src/test/suite/fixtures/recorded/surroundingPair/html/clearPairBatt.yml @@ -1,29 +1,37 @@ languageId: html command: version: 1 - spokenForm: take pair batt - action: setSelection + spokenForm: clear pair batt + action: clearAndSetSelection targets: - type: primitive modifier: {type: surroundingPair, delimiter: any} mark: {type: decoratedSymbol, symbolColor: default, character: b} initialState: - documentContents: "\r\n \r\n
\r\n \r\n" + documentContents: |- + + +
+ + selections: - - anchor: {line: 2, character: 8} - active: {line: 2, character: 9} - - anchor: {line: 2, character: 11} - active: {line: 2, character: 13} + - anchor: {line: 4, character: 7} + active: {line: 4, character: 7} marks: default.b: start: {line: 3, character: 6} end: {line: 3, character: 10} finalState: - documentContents: "\r\n \r\n
\r\n \r\n" + documentContents: |- + + +
+ + selections: - anchor: {line: 3, character: 4} - active: {line: 3, character: 11} + active: {line: 3, character: 4} thatMark: - anchor: {line: 3, character: 4} - active: {line: 3, character: 11} + active: {line: 3, character: 4} fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: b}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: surroundingPair, delimiter: any}}] diff --git a/src/test/suite/fixtures/recorded/surroundingPair/html/clearPairOx.yml b/src/test/suite/fixtures/recorded/surroundingPair/html/clearPairOx.yml new file mode 100644 index 0000000000..ec90403613 --- /dev/null +++ b/src/test/suite/fixtures/recorded/surroundingPair/html/clearPairOx.yml @@ -0,0 +1,37 @@ +languageId: html +command: + version: 1 + spokenForm: clear pair ox + action: clearAndSetSelection + targets: + - type: primitive + modifier: {type: surroundingPair, delimiter: any} + mark: {type: decoratedSymbol, symbolColor: default, character: o} +initialState: + documentContents: |- + + +
+ + + selections: + - anchor: {line: 4, character: 7} + active: {line: 4, character: 7} + marks: + default.o: + start: {line: 1, character: 5} + end: {line: 1, character: 9} +finalState: + documentContents: |- + + +
+ + + selections: + - anchor: {line: 1, character: 4} + active: {line: 1, character: 4} + thatMark: + - anchor: {line: 1, character: 4} + active: {line: 1, character: 4} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: o}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: surroundingPair, delimiter: any}}] diff --git a/src/test/suite/fixtures/recorded/languages/html/takePairRam.yml b/src/test/suite/fixtures/recorded/surroundingPair/html/clearPairRam.yml similarity index 69% rename from src/test/suite/fixtures/recorded/languages/html/takePairRam.yml rename to src/test/suite/fixtures/recorded/surroundingPair/html/clearPairRam.yml index 05e23239b2..16753c1728 100644 --- a/src/test/suite/fixtures/recorded/languages/html/takePairRam.yml +++ b/src/test/suite/fixtures/recorded/surroundingPair/html/clearPairRam.yml @@ -1,14 +1,19 @@ languageId: html command: version: 1 - spokenForm: take pair ram - action: setSelection + spokenForm: clear pair ram + action: clearAndSetSelection targets: - type: primitive modifier: {type: surroundingPair, delimiter: any} mark: {type: decoratedSymbol, symbolColor: default, character: r} initialState: - documentContents: "\r\n \r\n
\r\n \r\n" + documentContents: |- + + +
+ + selections: - anchor: {line: 4, character: 7} active: {line: 4, character: 7} @@ -17,11 +22,16 @@ initialState: start: {line: 2, character: 9} end: {line: 2, character: 11} finalState: - documentContents: "\r\n \r\n
\r\n \r\n" + documentContents: |- + + + + + selections: - anchor: {line: 2, character: 8} - active: {line: 2, character: 13} + active: {line: 2, character: 8} thatMark: - anchor: {line: 2, character: 8} - active: {line: 2, character: 13} + active: {line: 2, character: 8} fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: r}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: surroundingPair, delimiter: any}}] From 7d550b004982ecc3bca3b67cad883e96b687b6d5 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Wed, 15 Dec 2021 21:27:22 +0100 Subject: [PATCH 5/7] Changed order of delimiters --- .../surroundingPair/delimiterMaps.ts | 2 +- .../surroundingPair/html/clearBoundsBatt2.yml | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsBatt2.yml diff --git a/src/processTargets/modifiers/surroundingPair/delimiterMaps.ts b/src/processTargets/modifiers/surroundingPair/delimiterMaps.ts index b3b331405e..9a5f5e6a9b 100644 --- a/src/processTargets/modifiers/surroundingPair/delimiterMaps.ts +++ b/src/processTargets/modifiers/surroundingPair/delimiterMaps.ts @@ -9,7 +9,7 @@ export const delimiterToText: Record< SimpleSurroundingPairName, [IndividualDelimiterText, IndividualDelimiterText] > = { - angleBrackets: [["<", "", "/>"]], + angleBrackets: [["", "/>"]], backtickQuotes: ["`", "`"], curlyBrackets: [["{", "${"], "}"], doubleQuotes: ['"', '"'], diff --git a/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsBatt2.yml b/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsBatt2.yml new file mode 100644 index 0000000000..53d40f5c3e --- /dev/null +++ b/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsBatt2.yml @@ -0,0 +1,41 @@ +languageId: plaintext +command: + version: 1 + spokenForm: clear bounds batt + action: clearAndSetSelection + targets: + - type: primitive + modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior} + mark: {type: decoratedSymbol, symbolColor: default, character: b} +initialState: + documentContents: |- + + +
+ + + selections: + - anchor: {line: 4, character: 7} + active: {line: 4, character: 7} + marks: + default.b: + start: {line: 3, character: 6} + end: {line: 3, character: 10} +finalState: + documentContents: |- + + +
+ body + + selections: + - anchor: {line: 3, character: 4} + active: {line: 3, character: 4} + - anchor: {line: 3, character: 8} + active: {line: 3, character: 8} + thatMark: + - anchor: {line: 3, character: 4} + active: {line: 3, character: 4} + - anchor: {line: 3, character: 8} + active: {line: 3, character: 8} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: b}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior}}] From 8886829f60580015f76cbcc56b1095b7ffb7b9bc Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Wed, 15 Dec 2021 23:25:39 +0100 Subject: [PATCH 6/7] A de test inside comment --- .../surroundingPair/html/clearBoundsHarp.yml | 37 +++++++++++++++++++ .../{html => textual}/clearBoundsBatt2.yml | 0 .../{html => textual}/clearBoundsOx2.yml | 0 .../{html => textual}/clearBoundsRam2.yml | 0 4 files changed, 37 insertions(+) create mode 100644 src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsHarp.yml rename src/test/suite/fixtures/recorded/surroundingPair/{html => textual}/clearBoundsBatt2.yml (100%) rename src/test/suite/fixtures/recorded/surroundingPair/{html => textual}/clearBoundsOx2.yml (100%) rename src/test/suite/fixtures/recorded/surroundingPair/{html => textual}/clearBoundsRam2.yml (100%) diff --git a/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsHarp.yml b/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsHarp.yml new file mode 100644 index 0000000000..426acb9a91 --- /dev/null +++ b/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsHarp.yml @@ -0,0 +1,37 @@ +languageId: html +command: + version: 1 + spokenForm: clear bounds harp + action: clearAndSetSelection + targets: + - type: primitive + modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior} + mark: {type: decoratedSymbol, symbolColor: default, character: h} +initialState: + documentContents: |- + + + + selections: + - anchor: {line: 2, character: 7} + active: {line: 2, character: 7} + marks: + default.h: + start: {line: 1, character: 10} + end: {line: 1, character: 15} +finalState: + documentContents: |- + + + + selections: + - anchor: {line: 1, character: 9} + active: {line: 1, character: 9} + - anchor: {line: 1, character: 14} + active: {line: 1, character: 14} + thatMark: + - anchor: {line: 1, character: 9} + active: {line: 1, character: 9} + - anchor: {line: 1, character: 14} + active: {line: 1, character: 14} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: h}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior}}] diff --git a/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsBatt2.yml b/src/test/suite/fixtures/recorded/surroundingPair/textual/clearBoundsBatt2.yml similarity index 100% rename from src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsBatt2.yml rename to src/test/suite/fixtures/recorded/surroundingPair/textual/clearBoundsBatt2.yml diff --git a/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsOx2.yml b/src/test/suite/fixtures/recorded/surroundingPair/textual/clearBoundsOx2.yml similarity index 100% rename from src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsOx2.yml rename to src/test/suite/fixtures/recorded/surroundingPair/textual/clearBoundsOx2.yml diff --git a/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsRam2.yml b/src/test/suite/fixtures/recorded/surroundingPair/textual/clearBoundsRam2.yml similarity index 100% rename from src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsRam2.yml rename to src/test/suite/fixtures/recorded/surroundingPair/textual/clearBoundsRam2.yml From f7ad3c9944124275311ff49f3f449ecb81813e8b Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Thu, 16 Dec 2021 18:58:45 +0100 Subject: [PATCH 7/7] Added htmlStringTextFragmentExtractor --- src/languages/getTextFragmentExtractor.ts | 6 +++- src/languages/html.ts | 12 +++++++ .../surroundingPair/html/clearBoundsEach.yml | 35 +++++++++++++++++++ .../textual/clearBoundsEach2.yml | 35 +++++++++++++++++++ 4 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsEach.yml create mode 100644 src/test/suite/fixtures/recorded/surroundingPair/textual/clearBoundsEach2.yml diff --git a/src/languages/getTextFragmentExtractor.ts b/src/languages/getTextFragmentExtractor.ts index 1f1195ce3e..4530306680 100644 --- a/src/languages/getTextFragmentExtractor.ts +++ b/src/languages/getTextFragmentExtractor.ts @@ -3,6 +3,7 @@ import { SelectionWithEditor } from "../typings/Types"; import { stringTextFragmentExtractor as jsonStringTextFragmentExtractor } from "./json"; import { stringTextFragmentExtractor as javaStringTextFragmentExtractor } from "./java"; import { stringTextFragmentExtractor as typescriptStringTextFragmentExtractor } from "./typescript"; +import { stringTextFragmentExtractor as htmlStringTextFragmentExtractor } from "./html"; import { UnsupportedLanguageError } from "../errors"; import { Range } from "vscode"; import { SupportedLanguageId } from "./constants"; @@ -95,7 +96,10 @@ const textFragmentExtractors: Record< c: constructDefaultTextFragmentExtractor("c"), cpp: constructDefaultTextFragmentExtractor("cpp"), csharp: constructDefaultTextFragmentExtractor("csharp"), - html: constructDefaultTextFragmentExtractor("html"), + html: constructDefaultTextFragmentExtractor( + "html", + htmlStringTextFragmentExtractor + ), java: constructDefaultTextFragmentExtractor( "java", javaStringTextFragmentExtractor diff --git a/src/languages/html.ts b/src/languages/html.ts index ca25519b01..dae1b122f8 100644 --- a/src/languages/html.ts +++ b/src/languages/html.ts @@ -9,6 +9,7 @@ import { SelectionWithEditor, } from "../typings/Types"; import { SyntaxNode } from "web-tree-sitter"; +import { getNodeRange } from "../util/nodeSelectors"; const attribute = "*?.attribute!"; @@ -38,3 +39,14 @@ const nodeMatchers: Partial> = { }; export const patternMatchers = createPatternMatchers(nodeMatchers); + +export function stringTextFragmentExtractor( + node: SyntaxNode, + selection: SelectionWithEditor +) { + if (node.type === "attribute_value") { + return getNodeRange(node); + } + + return null; +} \ No newline at end of file diff --git a/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsEach.yml b/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsEach.yml new file mode 100644 index 0000000000..2a7ec47afa --- /dev/null +++ b/src/test/suite/fixtures/recorded/surroundingPair/html/clearBoundsEach.yml @@ -0,0 +1,35 @@ +languageId: html +command: + version: 1 + spokenForm: clear bounds each + action: clearAndSetSelection + targets: + - type: primitive + modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior} + mark: {type: decoratedSymbol, symbolColor: default, character: e} +initialState: + documentContents: |- + + + selections: + - anchor: {line: 1, character: 0} + active: {line: 1, character: 0} + marks: + default.e: + start: {line: 0, character: 11} + end: {line: 0, character: 16} +finalState: + documentContents: |- + + + selections: + - anchor: {line: 0, character: 10} + active: {line: 0, character: 10} + - anchor: {line: 0, character: 15} + active: {line: 0, character: 15} + thatMark: + - anchor: {line: 0, character: 10} + active: {line: 0, character: 10} + - anchor: {line: 0, character: 15} + active: {line: 0, character: 15} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: e}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior}, isImplicit: false}] diff --git a/src/test/suite/fixtures/recorded/surroundingPair/textual/clearBoundsEach2.yml b/src/test/suite/fixtures/recorded/surroundingPair/textual/clearBoundsEach2.yml new file mode 100644 index 0000000000..093224376f --- /dev/null +++ b/src/test/suite/fixtures/recorded/surroundingPair/textual/clearBoundsEach2.yml @@ -0,0 +1,35 @@ +languageId: plaintext +command: + version: 1 + spokenForm: clear bounds each + action: clearAndSetSelection + targets: + - type: primitive + modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior} + mark: {type: decoratedSymbol, symbolColor: default, character: e} +initialState: + documentContents: |- + + + selections: + - anchor: {line: 1, character: 0} + active: {line: 1, character: 0} + marks: + default.e: + start: {line: 0, character: 11} + end: {line: 0, character: 16} +finalState: + documentContents: |- + + + selections: + - anchor: {line: 0, character: 10} + active: {line: 0, character: 10} + - anchor: {line: 0, character: 15} + active: {line: 0, character: 15} + thatMark: + - anchor: {line: 0, character: 10} + active: {line: 0, character: 10} + - anchor: {line: 0, character: 15} + active: {line: 0, character: 15} +fullTargets: [{type: primitive, mark: {type: decoratedSymbol, symbolColor: default, character: e}, selectionType: token, position: contents, insideOutsideType: inside, modifier: {type: surroundingPair, delimiter: any, delimiterInclusion: excludeInterior}, isImplicit: false}]