diff --git a/package-lock.json b/package-lock.json index f097a39ed..9dd3f8f11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7684,9 +7684,9 @@ } }, "text-buffer": { - "version": "13.17.3", - "resolved": "https://registry.npmjs.org/text-buffer/-/text-buffer-13.17.3.tgz", - "integrity": "sha512-2BMyWTolSD497rC8F0QNo6GJo6awkSrMFqtlVKtRB7lCGH3N6U4pmZJrO9qTZP43k6URdWBc++UPxSL7aXAd7g==", + "version": "13.17.4", + "resolved": "https://registry.npmjs.org/text-buffer/-/text-buffer-13.17.4.tgz", + "integrity": "sha512-uDySuTJdjx+8ZEflmy3DLpMddtGJEP8oBeUcDrXcFapCpOyjAA4I9DQVXj6jkPm2S/Nkm5gPF+I4qpI50Vhtcg==", "requires": { "delegato": "^1.0.0", "diff": "^2.2.1", @@ -7703,9 +7703,9 @@ }, "dependencies": { "bl": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", - "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", + "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -7734,14 +7734,6 @@ "prebuild-install": "5.3.3" } }, - "grim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/grim/-/grim-2.0.2.tgz", - "integrity": "sha512-Qj7hTJRfd87E/gUgfvM0YIH/g2UA2SV6niv6BYXk1o6w4mhgv+QyYM1EjOJQljvzgEj4SqSsRWldXIeKHz3e3Q==", - "requires": { - "event-kit": "^2.0.0" - } - }, "mimic-response": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", @@ -7769,15 +7761,6 @@ "which-pm-runs": "^1.0.0" } }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -7799,22 +7782,22 @@ } }, "tar-fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", - "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "requires": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", - "tar-stream": "^2.0.0" + "tar-stream": "^2.1.4" } }, "tar-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.3.tgz", - "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", + "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", "requires": { - "bl": "^4.0.1", + "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", diff --git a/package.json b/package.json index 3f7496ae0..946f71b2a 100644 --- a/package.json +++ b/package.json @@ -157,7 +157,7 @@ "symbols-view": "https://www.atom.io/api/packages/symbols-view/versions/0.118.4/tarball", "tabs": "https://www.atom.io/api/packages/tabs/versions/0.110.0/tarball", "temp": "0.9.2", - "text-buffer": "13.17.3", + "text-buffer": "13.17.4", "timecop": "https://www.atom.io/api/packages/timecop/versions/0.36.2/tarball", "tree-sitter": "0.17.1", "tree-view": "https://www.atom.io/api/packages/tree-view/versions/0.228.2/tarball", diff --git a/spec/tree-sitter-language-mode-spec.js b/spec/tree-sitter-language-mode-spec.js index 18375a84e..af414ec4f 100644 --- a/spec/tree-sitter-language-mode-spec.js +++ b/spec/tree-sitter-language-mode-spec.js @@ -831,6 +831,63 @@ describe('TreeSitterLanguageMode', () => { ]); }); + it('handles injections that are empty', async () => { + atom.grammars.addGrammar(jsGrammar); + atom.grammars.addGrammar(htmlGrammar); + buffer.setText('text = html'); + + const languageMode = new TreeSitterLanguageMode({ + buffer, + grammar: jsGrammar, + grammars: atom.grammars + }); + buffer.setLanguageMode(languageMode); + + expectTokensToEqual(editor, [[{ text: 'text = html', scopes: [] }]]); + + buffer.append(' ``;'); + expectTokensToEqual(editor, [ + [ + { text: 'text = ', scopes: [] }, + { text: 'html', scopes: ['function'] }, + { text: ' ', scopes: [] }, + { text: '``', scopes: ['string'] }, + { text: ';', scopes: [] } + ] + ]); + + buffer.insert( + { row: 0, column: buffer.getText().lastIndexOf('`') }, + '