neovim借助nodejs获取网络数据
主要的目的是得到babylon.js网站上的代码段,这样就可以在vite里查看了。
// main.ts
plugin.registerCommand(
'BabySnippet',
async () => {
try {
logger.info("BabySnippet")
await get_snippet(plugin);
} catch (err) {
logger.info("BabySnippet err"+err)
console.error(err);
}
},
{ sync: false },
);
// baby_util.ts
import { NvimPlugin,logger } from 'neovim';
import { get } from './http_util'
export async function get_snippet(plugin: NvimPlugin){
let current_line = await plugin.nvim.getLine()
let matches = current_line.match(/id="([^"]+)"/)
if(matches && matches[1]){
let id = matches[1] as string
id = id.replace('#','/')
id = id.replace('#','/')
id = id.replace('#','/')
let url = 'https://snippet.babylonjs.com'+id
get(url,async (data:string, code:number)=>{
logger.info('Line code:'+code)
let data_obj:any = JSON.parse(data)
let payload = data_obj.jsonPayload
let pay_obj = JSON.parse(payload)
let pay_code:string = pay_obj.code
let codes:string[] = pay_code.split('\n')
codes.unshift("``` js")
codes.push("```")
let cursor = await plugin.nvim.window.cursor
let start = cursor[0]
await plugin.nvim.buffer.setLines(codes,{start,end:start});
return ''
})
}
}
// http_util.ts
import * as https from 'https'
import * as http from 'http'
import {logger} from 'neovim'
export function get(url:string,call_back:(data:string,code:number)=>Promise<string>){
https.get(url,function(res:http.IncomingMessage){
let code = res.statusCode
logger.info("http code:"+code)
res.setEncoding('utf8');
let rawData = '';
res.on('data', (chunk) => {
logger.info("http data:"+chunk)
rawData += chunk;
});
res.on('end', () => {
try {
logger.info("http data ok:")
call_back(rawData,code);
} catch (e) {
logger.info("http data err:"+e.message)
console.error(e.message);
}
});
}).on('error', (e) => {
logger.info("http get err:"+e.message)
});
}