summaryrefslogtreecommitdiff
path: root/.config/coc/extensions/node_modules/coc-pairs/lib/index.js
diff options
context:
space:
mode:
authorJacob McDonnell <jacob@simplelittledream.com>2022-07-16 18:13:16 -0400
committerJacob McDonnell <jacob@simplelittledream.com>2022-07-16 18:13:16 -0400
commit8fad9a5ecddc88d57a531e4b0084544984f23d25 (patch)
tree84954bc8219942aa56bc899330ccd0007bbe0ef0 /.config/coc/extensions/node_modules/coc-pairs/lib/index.js
parent2887af7fcfb4d618dd13cf66ec2fbdbd84c7527c (diff)
Added profile and other missing configs
Diffstat (limited to '.config/coc/extensions/node_modules/coc-pairs/lib/index.js')
-rw-r--r--.config/coc/extensions/node_modules/coc-pairs/lib/index.js215
1 files changed, 215 insertions, 0 deletions
diff --git a/.config/coc/extensions/node_modules/coc-pairs/lib/index.js b/.config/coc/extensions/node_modules/coc-pairs/lib/index.js
new file mode 100644
index 0000000..b2d78ff
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-pairs/lib/index.js
@@ -0,0 +1,215 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isWord = exports.wait = exports.byteSlice = exports.activate = void 0;
+const coc_nvim_1 = require("coc.nvim");
+const pairs = new Map();
+pairs.set('{', '}');
+pairs.set('[', ']');
+pairs.set('(', ')');
+pairs.set('<', '>');
+pairs.set('"', '"');
+pairs.set("'", "'");
+pairs.set('`', '`');
+async function activate(context) {
+ let { subscriptions } = context;
+ const config = coc_nvim_1.workspace.getConfiguration('pairs');
+ const disableLanguages = config.get('disableLanguages');
+ const characters = config.get('enableCharacters');
+ const alwaysPairCharacters = config.get('alwaysPairCharacters', []);
+ let enableBackspace = config.get('enableBackspace');
+ if (enableBackspace) {
+ let map = (await coc_nvim_1.workspace.nvim.call('maparg', ['<bs>', 'i']));
+ if (map && !map.startsWith('coc#_insert_key'))
+ enableBackspace = false;
+ }
+ if (characters.length == 0)
+ return;
+ const { nvim, isVim } = coc_nvim_1.workspace;
+ const localParis = new Map();
+ // remove paired characters when possible
+ async function onBackspace() {
+ let { nvim } = coc_nvim_1.workspace;
+ let res = await nvim.eval('[getline("."),col("."),synIDattr(synID(line("."), col(".") - 2, 1), "name"),bufnr("%")]');
+ if (res) {
+ let [line, col, synname, bufnr] = res;
+ if (col > 1 && !/string/i.test(synname)) {
+ let buf = Buffer.from(line, 'utf8');
+ if (col - 1 < buf.length) {
+ let pre = buf.slice(col - 2, col - 1).toString('utf8');
+ let next = buf.slice(col - 1, col).toString('utf8');
+ let local = localParis.get(bufnr);
+ if (local && local.find(arr => arr[0] == pre && arr[1] == next)) {
+ await nvim.eval(`feedkeys("\\<C-G>U\\<right>\\<bs>\\<bs>", 'in')`);
+ if (isVim)
+ nvim.command('redraw', true);
+ return;
+ }
+ if (characters.includes(pre) && pairs.get(pre) == next) {
+ await nvim.eval(`feedkeys("\\<C-G>U\\<right>\\<bs>\\<bs>", 'in')`);
+ if (isVim)
+ nvim.command('redraw', true);
+ return;
+ }
+ }
+ }
+ }
+ await nvim.eval(`feedkeys("\\<bs>", 'in')`);
+ if (isVim)
+ nvim.command('redraw', true);
+ return '';
+ }
+ async function insertPair(character, pair) {
+ let samePair = character == pair;
+ let arr = await nvim.eval(`[bufnr("%"),get(b:,"coc_pairs_disabled",[]),coc#util#cursor(),&filetype,getline("."),mode(),get(get(g:,'context_filetype#filetypes',{}),&filetype,v:null)]`);
+ let filetype = arr[3];
+ if (disableLanguages.indexOf(filetype) !== -1)
+ return character;
+ let line = arr[4];
+ let mode = arr[5];
+ if (mode.startsWith('R'))
+ return character;
+ let chars = arr[1];
+ let context = arr[6];
+ if (chars && chars.length && chars.indexOf(character) !== -1)
+ return character;
+ let pos = { line: arr[2][0], character: arr[2][1] };
+ let pre = line.slice(0, pos.character);
+ let rest = line.slice(pos.character);
+ let previous = pre.length ? pre[pre.length - 1] : '';
+ if (alwaysPairCharacters.indexOf(character) == -1 && rest && isWord(rest[0]))
+ return character;
+ if (character == '<' && (previous == ' ' || previous == '<')) {
+ return character;
+ }
+ if (samePair && rest[0] == character && rest[1] != character) {
+ // move position
+ await nvim.eval(`feedkeys("\\<C-G>U\\<Right>", 'in')`);
+ return '';
+ }
+ if (samePair && pre && (isWord(previous) || previous == character))
+ return character;
+ // Only pair single quotes if previous character is not word.
+ if (character === "'" && pre.match(/.*\w$/)) {
+ return character;
+ }
+ if (context) {
+ try {
+ let res = await nvim.call('context_filetype#get');
+ if (res && res.filetype) {
+ filetype = res.filetype;
+ }
+ }
+ catch (e) {
+ // ignore error
+ }
+ }
+ // Rust: don't pair single quotes that are part of lifetime annotations such as `Foo::<'a, 'b>` or `bar: &'a str`
+ if (filetype === 'rust' && character === "'" &&
+ (pre.endsWith('<') || rest.startsWith('>') || pre.endsWith('&'))) {
+ return character;
+ }
+ if ((filetype === 'vim' || filetype === 'help') && character === '"' && pos.character === 0) {
+ return character;
+ }
+ if (samePair && pre.length >= 2 && previous == character && pre[pre.length - 2] == character) {
+ if (pre[pre.length - 3] == character) {
+ if (character == '"') {
+ nvim.command(`call feedkeys('"""'."${'\\<C-G>U\\<Left>'.repeat(3)}", 'in')`, true);
+ }
+ else {
+ nvim.command(`call feedkeys("${character.repeat(3)}${'\\<C-G>U\\<Left>'.repeat(3)}", 'in')`, true);
+ }
+ return;
+ }
+ return character;
+ }
+ if (character == '"') {
+ nvim.command(`call feedkeys('""'."\\<C-G>U\\<Left>", 'in')`, true);
+ }
+ else {
+ nvim.command(`call feedkeys("${character}${pair}${'\\<C-G>U\\<Left>'.repeat(pair.length)}", 'in')`, true);
+ }
+ return '';
+ }
+ async function closePair(character) {
+ let [cursor, filetype, line] = await nvim.eval('[coc#util#cursor(),&filetype,getline(".")]');
+ if (disableLanguages.indexOf(filetype) !== -1)
+ return character;
+ let rest = line.slice(cursor[1]);
+ if (rest[0] == character) {
+ nvim.command(`call feedkeys("\\<C-G>U\\<Right>", 'in')`, true);
+ return '';
+ }
+ return character;
+ }
+ nvim.pauseNotification();
+ for (let character of characters) {
+ if (pairs.has(character)) {
+ subscriptions.push(coc_nvim_1.workspace.registerExprKeymap('i', character, insertPair.bind(null, character, pairs.get(character)), false));
+ }
+ let matched = pairs.get(character);
+ if (matched != character) {
+ subscriptions.push(coc_nvim_1.workspace.registerExprKeymap('i', matched, closePair.bind(null, matched), false));
+ }
+ }
+ if (enableBackspace) {
+ subscriptions.push(coc_nvim_1.workspace.registerExprKeymap('i', '<bs>', onBackspace, false));
+ }
+ // tslint:disable-next-line: no-floating-promises
+ nvim.resumeNotification(false, true);
+ async function createBufferKeymap(doc) {
+ if (!doc)
+ return;
+ let pairs = doc.getVar('pairs', null);
+ if (!pairs || !pairs.length)
+ return;
+ localParis.set(doc.bufnr, pairs);
+ nvim.pauseNotification();
+ for (let p of pairs) {
+ if (Array.isArray(p) && p.length == 2) {
+ let [character, matched] = p;
+ subscriptions.push(coc_nvim_1.workspace.registerExprKeymap('i', character, insertPair.bind(null, character, matched), true));
+ if (matched != character) {
+ subscriptions.push(coc_nvim_1.workspace.registerExprKeymap('i', matched, closePair.bind(null, matched), true));
+ }
+ }
+ }
+ // tslint:disable-next-line: no-floating-promises
+ nvim.resumeNotification(false, true);
+ }
+ const buf = await coc_nvim_1.workspace.nvim.buffer;
+ await createBufferKeymap(coc_nvim_1.workspace.getDocument(buf.id));
+ coc_nvim_1.workspace.onDidOpenTextDocument(async (e) => {
+ await createBufferKeymap(coc_nvim_1.workspace.getDocument(e.uri));
+ });
+}
+exports.activate = activate;
+function byteSlice(content, start, end) {
+ let buf = Buffer.from(content, 'utf8');
+ return buf.slice(start, end).toString('utf8');
+}
+exports.byteSlice = byteSlice;
+function wait(ms) {
+ return new Promise(resolve => {
+ setTimeout(() => {
+ resolve(undefined);
+ }, ms);
+ });
+}
+exports.wait = wait;
+function isWord(character) {
+ let code = character.charCodeAt(0);
+ if (code > 128)
+ return false;
+ if (code == 95)
+ return true;
+ if (code >= 48 && code <= 57)
+ return true;
+ if (code >= 65 && code <= 90)
+ return true;
+ if (code >= 97 && code <= 122)
+ return true;
+ return false;
+}
+exports.isWord = isWord;
+//# sourceMappingURL=index.js.map \ No newline at end of file