Skip to content

Commit 26d33a0

Browse files
authored
feat: New command: Wrap Into New Tag (#199)
1 parent 4430df4 commit 26d33a0

File tree

4 files changed

+45
-6
lines changed

4 files changed

+45
-6
lines changed

package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@
7474
{
7575
"command": "migrateRequireToImports",
7676
"title": "Migrate Require to Imports"
77+
},
78+
{
79+
"command": "wrapIntoNewTag",
80+
"title": "Wrap Into New Tag"
7781
}
7882
],
7983
"keybindings": [
@@ -169,7 +173,7 @@
169173
"@vue/language-server": "latest",
170174
"@vue/language-service": "latest",
171175
"@zardoy/utils": "^0.0.9",
172-
"@zardoy/vscode-utils": "^0.0.47",
176+
"@zardoy/vscode-utils": "^0.0.52",
173177
"chai": "^4.3.6",
174178
"change-case": "^4.1.2",
175179
"chokidar": "^3.5.3",

pnpm-lock.yaml

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/specialCommands.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import * as vscode from 'vscode'
22
import { getActiveRegularEditor } from '@zardoy/vscode-utils'
33
import { getExtensionCommandId, getExtensionSetting, registerExtensionCommand, VSCodeQuickPickItem } from 'vscode-framework'
4+
import { registerTextEditorCommand } from '@zardoy/vscode-utils/build/commands'
45
import { showQuickPick } from '@zardoy/vscode-utils/build/quickPick'
56
import _ from 'lodash'
67
import { compact } from '@zardoy/utils'
78
import { offsetPosition } from '@zardoy/vscode-utils/build/position'
9+
import { defaultJsSupersetLangs } from '@zardoy/vscode-utils/build/langs'
810
import { RequestInputTypes, RequestOutputTypes } from '../typescript/src/ipcTypes'
911
import { sendCommand } from './sendCommand'
1012
import { tsRangeToVscode, tsRangeToVscodeSelection, tsTextChangesToVscodeTextEdits } from './util'
@@ -319,6 +321,37 @@ export default () => {
319321
await vscode.workspace.applyEdit(edit)
320322
})
321323

324+
registerTextEditorCommand('wrapIntoNewTag', async (editor, edit, fallbackCommand = 'editor.emmet.action.wrapWithAbbreviation') => {
325+
const { selection } = editor
326+
if (selection.start.isEqual(selection.end)) {
327+
const range = editor.selection
328+
const selectedText = '$TM_SELECTED_TEXT'
329+
330+
if (!defaultJsSupersetLangs.includes(editor.document.languageId)) {
331+
if (fallbackCommand) {
332+
await vscode.commands.executeCommand(fallbackCommand, ...fallbackCommand.split(' ').slice(1))
333+
}
334+
335+
return
336+
}
337+
338+
const data = (await sendCommand('getNodePath', {})) ?? []
339+
const jsxElem = [...data].reverse().find(d => ['JsxElement', 'JsxSelfClosingElement', 'JsxFragment'].includes(d.kindName))
340+
if (!jsxElem) return
341+
const { start, end } = jsxElem
342+
const startPos = editor.document.positionAt(start)
343+
const startRange = new vscode.Range(startPos, startPos)
344+
const endPos = editor.document.positionAt(end)
345+
const endRange = new vscode.Range(endPos, endPos)
346+
editor.selection = new vscode.Selection(startRange.start, endRange.end)
347+
}
348+
349+
const line = editor.document.lineAt(editor.selection.start.line)
350+
const currentIndent = line.text.slice(0, line.firstNonWhitespaceCharacterIndex)
351+
await editor.insertSnippet(new vscode.SnippetString(`<\${1:div}$0>\n\t$TM_SELECTED_TEXT\n</\${1:div}>`), editor.selection)
352+
return
353+
})
354+
322355
// registerExtensionCommand('insertImportFlatten', () => {
323356
// // got -> default, got
324357
// type A = ts.Type

typescript/src/ipcTypes.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ export type RequestInputTypes = {
7777
* @keysSuggestions TriggerCharacterCommand
7878
*/
7979
export type RequestOutputTypes = {
80+
getNodePath: NodeAtPositionResponse[]
81+
getNodeAtPosition: NodeAtPositionResponse
8082
removeFunctionArgumentsTypesInSelection: {
8183
ranges: TsRange[]
8284
}

0 commit comments

Comments
 (0)