vim-skk / skkeleton

SKK implements for Vim/Neovim with denops.vim
zlib License
248 stars 35 forks source link

sourcesに"skk_server"を指定するとエラーが出る #206

Closed misumisumi closed 5 days ago

misumisumi commented 6 days ago

コミット f8c0d309897c8586ac1b53517d6a9f952f33aaee 以降においてsourcesに"skk_server"を含めると、"skk_server"単体時、"skk_dictonary"と併用時に関わらずエラーが発生します。

Error detected while processing function skkeleton#handle[1]..skkeleton#request[2]..denops#request[1]..denops#_internal#server#chan#request[6]..denops#_internal#rpc#nvim#request:
line    1:
Error invoking 'invoke' on channel 4 (denops):
Error: Failed to call 'handle' API in 'skkeleton': encoding.convert is not a function
    at Plugin.call (file:///home/sumi/.local/share/nvim/site/lazy/denops.vim/denops/@denops-private/service.ts:260:13)
    at eventLoopTick (ext:core/01_core.js:175:7)
    at async Service.#dispatch (file:///home/sumi/.local/share/nvim/site/lazy/denops.vim/denops/@denops-private/service.ts:109:12)
    at async Service.dispatch (file:///home/sumi/.local/share/nvim/site/lazy/denops.vim/denops/@denops-private/service.ts:114:14)
    at async dispatch (https://jsr.io/@lambdalisue/messagepack-rpc/2.4.0/dispatcher.ts:36:12)
    at async Session.#dispatch (https://jsr.io/@lambdalisue/messagepack-rpc/2.4.0/session.ts:255:22)
    at async Session.#handleRequestMessage (https://jsr.io/@lambdalisue/messagepack-rpc/2.4.0/session.ts:282:33)
Shougo commented 5 days ago

Reproduced.

import * as encoding from "npm:encoding-japanese@2.2.0";

export const Encode = {
  "utf-32": "UTF32",
  "utf-16": "UTF16",
  "utf-16be": "UTF16BE",
  "utf-16le": "UTF16LE",
  "binary": "BINARY",
  "ascii": "ASCII",
  "jis": "JIS",
  "utf-8": "UTF8",
  "euc-jp": "EUCJP",
  "sjis": "SJIS",
  "unicode": "UNICODE",
  "auto": "AUTO",
} as const;

export type Encoding = keyof typeof Encode;

function encode(str: string, encode: Encoding): Uint8Array {
  const utf8Encoder = new TextEncoder();
  const utf8Bytes = utf8Encoder.encode(str);
  const eucBytesArray = encoding.convert(utf8Bytes, Encode[encode], "UTF8");
  const eucBytes = Uint8Array.from(eucBytesArray);
  return eucBytes;
}

console.log(encode("ああああ", "utf-32"));

It does not work.