当前位置: 首页 > 后端技术 > Node.js

vscode语音注解,充实资料(上)

时间:2023-04-03 16:08:02 Node.js

vscode璇煶娉ㄨВ锛屽厖瀹炶祫鏂欙紙涓婏級杩欎釜绯诲垪锛屾垜浼氬垎浜埗浣溾€滆闊虫敞瑙b€濇彃浠剁殑瀹屾暣杩囩▼锛屾垨鑰呰鈥滆繃绋嬧€濊繖涓瘝锛屾洿澶氭瘮鈥滅粨鏋溾€濇湁瓒c€備娇鐢ㄦ紨绀轰笅杞斤細璇煶-鏍囨敞閰嶇疆+鍒涘缓璇煶鏂囦欢瀛樻斁鍦板潃鍙抽敭璋冨嚭鈥滃綍鍒惰闊虫爣娉ㄢ€濆綍闊冲悗鐐瑰嚮鈥滀繚瀛樺埌椤圭洰鈥濋紶鏍囨偓鍋滄挱鏀捐闊宠儗鏅紑濮嬮槄璇婚」鐩唬鐮佹椂锛屼篃璁稿伓灏斿鏋滀綘鐪嬩簡涓€浜涗綘鐪嬩笉鎳傜殑浠g爜锛屽鏋滄湁娉ㄩ噴浣嗘槸浣犵湅瀹岃繕鏄竴澶撮浘姘存垨鑰呬綘鏍规湰涓嶅啓浠讳綍娉ㄩ噴锛岄偅涔堣В鍐宠繖涓棶棰樻渶鏂逛究鐨勬柟娉曞氨鏄棶鐩存帴鍘熷紑鍙戣€咃紝杩欓噷鏄粈涔堝師鍥狅紵杩欎箞鍐欙紵涓嶄粎鏄痡s璇█锛屽ぇ閮ㄥ垎璇█閮藉凡缁忔彁渚涗簡鈥滄枃鏈敞閲娾€濈殑璇硶锛屼负浠€涔堟垜浠繕鏄細閬囧埌涓婇潰鐨勯棶棰樺憿锛熷亣璁炬垜浠湪姣忔浠g爜閮藉啓浜嗘敞閲婅繕鏄湅涓嶆噦锛岀湅鐪嬫垜浠彲浠ラ€氳繃璇煶鎻掍欢鈥滅紦瑙b€濅粈涔堥棶棰橈細鍐欑殑鎸烘竻妤氱殑锛岀湅涓嶆噦纭疄鏄鑰呰嚜宸辩殑闂鐞嗚В瀹冿紙瀹冩棤娉曡В鍐筹級銆傝В鍐充簡锛屼粙浜庘€滈粦鏆楁晥搴斺€?鈥滅煡璇嗙殑璇呭拻鈥濇棤娉曡嚜瑙夛級鍙兘鍜屾煇浜涢渶姹傛湁鍏筹紝鏂囧瓧鎻忚堪娓呮寰堚€滃鏉傗€濓紝骞茶剢灏变笉鍐欎簡锛堜篃璁稿彲浠ュ緱鍒扮紦瑙o級浠ユ垜涓嶆槑鐧界殑璇嶇殑褰㈠紡銆傝繖鍦ㄦ垜浠殑鏃ュ父浜ゆ祦涓緢甯歌銆傜綉涓婂緢闅捐В閲娿€俿olo鐩存帴闈㈠闈紙涔熻鍙互缂撹В锛夎法椤电殑鎻忚堪锛屾瘮濡傝В閲婁竴澶ф鈥滆皟璇曟柟娉曗€濓紝闅愯棌鍝釜鍙橀噺锛屽己琛岃祴鍊兼煇涓彉閲忋€傛湁浜涙搷浣滃彲浠ヨ揪鍒颁竴瀹氱殑鏁堟灉锛屽湪鍓嶇mocking鐨勪竴浜涘満鏅腑缁忓父鐢ㄥ埌锛堜篃璁稿彲浠ョ紦瑙o級銆傛病鍋氳繃vscode鎻掍欢鐨勫悓瀛︽帹鑽愮湅鎴戝厛鍐欑殑鍏ラ棬鏁欑▼锛氳涓€涓秴璇︾粏鐨勫墠绔€妚scode鎻掍欢缂栧啓瀹炶返銆嬪垎浜細锛堟帹鑽愭敹钘忥級锛堜笂锛夎褰曚竴涓秴璇︾粏鍓嶇銆妚scode鎻掍欢鍐欏疄鎴樸€嬪垎浜細锛堟帹鑽愭敹钘忥級锛堜笅锛?.鍔熻兘鐐光€滄妧鏈柟妗堚€濆垎鏋愨憼纭畾鍏蜂綋鐨勬敞瑙f垜浠渶瑕佺害瀹氫竴涓叿浣撶殑鍐欐硶锛屾彃浠跺皢杩欑鍐欐硶璇嗗埆涓衡€滆闊虫敞瑙b€濓紝褰撻紶鏍囨偓鍋滃湪鍏朵笂鏃讹紝鍗冲彲姝g‘鎾姤銆傜洰鍓嶏紝鎴戜娇鐢ㄧ殑褰㈠紡鏄?/voice_annotation+_number銆傗憽鎾斁璇勮audio鐢变簬鏄敤vscode鍐欑殑锛屾墍浠ラ閫夋槸鐢╪ode鏉ユ帶鍒堕煶棰戣緭鍑鸿澶囥€傚鏋滈噰鐢ㄦ墦寮€鏂扮綉椤垫挱鏀惧0闊崇殑鏂瑰紡锛屼細澧炲姞鐢ㄦ埛鐨勬搷浣滅幆鑺傘€傜爺绌朵簡鐜版湁鐨勯煶棰戞彃浠讹紝涓昏鏄煶涔愭挱鏀炬彃浠舵垨鑰呮墦寮€缃戦〉锛屼絾鏄垜浠繖閲屾病鏈夊叾浠栫殑鎾斁鎿嶄綔锛屾瘮濡傚揩杩涘惊鐜挱鏀剧瓑绋嶅井澶嶆潅涓€鐐圭殑闇€姹傦紝鎵€浠ユ垜浠€夋嫨浣跨敤鑺傜偣鎾斁銆傗憿璁板綍娉ㄩ噴鍐呭瑕佸悆楦¤泲锛屽綋鐒惰涓嬭泲銆傚綍闊冲姛鑳藉繀椤昏兘澶熷皢鐢ㄦ埛鐨勫綍闊虫斁鍒板搴旂殑椤圭洰涓紝骞惰繑鍥炵敤鎴风殑鈥滅壒瀹氭敞閲娾€濄€傚亣璁捐繑鍥瀡oice_annotation_20220201锛岀敤鎴峰彲浠ョ洿鎺ョ矘璐村埌椤圭洰涓甯镐娇鐢紝杩欎釜鍔熻兘鐨勪娇鐢ㄥ満鏅簲璇ヤ笉澶氾紝鎵€浠ヨ鑰冭檻鎬ц兘鐩稿叧鐨勯棶棰樸€傗懀瀛樺偍闊抽淇℃伅澶у鏁板紑鍙戣€呯殑鐢佃剳涓婇兘鏈夊涓」鐩紝姣忎釜椤圭洰濡備綍鍑嗙‘鎾斁瀵瑰簲椤圭洰涓嬬殑璇煶锛屽苟涓旀瘡娆″綍闊崇粨鏉燂紝鐢熸垚鐨勯煶棰戞枃浠舵斁鍏ュ搴旂殑椤圭洰涓紝鍙互鏀寔鍥㈤槦浣跨敤銆?.鍒濆椤圭洰锛岃繖娆℃垜浠娇鐢╰s鍏ㄥ眬瀹夎vscode寮€鍙戝伐鍏凤紝骞跺垵濮嬪寲椤圭洰锛歯pminstall-gyogenerator-codeyocode锛坱s纭疄澶浜嗭級涔嬪墠鐨勫紑鍙戞彃浠堕兘鏄娇鐢ㄥ師鐢焜s寮€鍙戠殑锛屽洜涓鸿繖娆″紑鍙戠殑鎻掍欢浼氱敤鍒颁竴浜涒€滀笉甯哥敤鈥濈殑API銆傝瀹炶瘽vscode鐨勬枃妗d笉鏄緢鍙嬪ソ锛屾垜浠洿鎺ョ湅浠g爜鐨則s绫诲瀷鏄渶鏂逛究鐨勩€?activationEvents":["onStartupFinished"],鏉ュ寘銆傚湪json鏂囦欢涓紝杩欓噷淇敼鎻掍欢婵€娲荤殑閰嶇疆锛歰nStartupFinished鎸囧畾鎻掍欢鍦╲scode鍒濆鍖栧畬鎴愬悗鍚姩锛屽垵濮嬪寲vscode鏃朵笉浼氬崰鐢ㄧ敤鎴风殑鎬ц兘锛屾垜浠殑璇煶娉ㄨВ鏄笉鏄偅绉嶇揣鎬ュ惎鍔ㄧ殑绋嬪簭銆傛潵鍒癳xtension.ts鏂囦欢锛屾妸娓呴櫎鍓嶅悗鏃犵敤鐨勪唬鐮佸叏閮ㄦ竻绌烘墽琛寉arnwatch锛屽紑濮嬬紪璇戜唬鐮侊紝璋冭瘯浠g爜鏃秄n+F5浼氭姤閿欙細鐪嬪埌涓婇潰鐨勬姤閿欐垜涓€澶撮浘姘达紝涔嬪墠濂藉儚鏄敤鍘熺敓js鍐欑殑锛屼箣鍓嶆病閬囧埌杩囥€傛垜鍗囩骇浜唙scode缂栬緫鍣紝杩樻槸鎶ラ敊銆傜劧鍚庢垜鍦ㄤ唬鐮侀噷鏌ヤ簡涓€涓嬶細鑷冲皯鏄?020骞?0鏈堝乏鍙崇殑鐗堟湰銆?engines":{"vscode":"^1.50.0"}鏋滀笉鍏剁劧锛屽啀娆¤皟璇曞悗浼氬嚭鐜版彁绀烘锛氭敞锛欯types/vscode涓嬮潰鐨勪篃瑕佹敼鎴愬拰涓婇潰涓€鏍风殑鐗堟湰鍙凤紝涓嶇劧鍒氬垰闃舵涓嶆姤閿欙紝浣嗘槸鎵撳寘鍙戝竷鐨勬椂鍊欎細鎶ラ敊銆?dependencies":{"@types/vscode":"^1.50.0",}3.璇嗗埆鐗规畩娉ㄨВ姝ゅ姛鑳芥槸璇嗗埆骞堕珮浜〉闈笂鐨勨€滆闊虫敞瑙b€濄€備箣鎵€浠ュ厛寮€鍙戣繖涓姛鑳芥槸鍥犱负瀹冩湰韬殑鍔熻兘姣旇緝鐙珛锛岃€屼笖鍙互寰堢洿瑙傜殑鐪嬪埌鏁堟灉锛屽湪娴忚vscode瀹樼綉鐨勬椂鍊欙紝鎴戝彂鐜颁簡涓ょ瀹炵幇鐗瑰畾璇彞鈥滈珮浜樉绀衡€濇晥鏋滅殑鏂规硶銆傝繖閲屾垜浠彲浠ラ鍏堝畾涔夊嚑涓瘑鍒€滆闊虫敞閲娾€濈殑瑙勫垯銆傚亣璁炬湁杩欐牱涓€涓插瓧绗?/voice_annotation_202202070612135678锛岄鍏堟垜浠渶瑕佽瘑鍒?/娉ㄩ噴瀛楃锛屽緱鍒?//'鍚庣殑瀛楃涓瞯oice_annotation_202202070612135678锛岀粰瀹冧竴涓?style'锛屽尮閰嶅唴瀹逛腑鐨勬暟瀛?02202070612135678,浠ヤ究鍑嗙‘鎾斁璇煶銆傚湪src/util/index.tsexportconsttargetName="voice_annotation";//鍗曠嫭鎷垮嚭鏉ワ紝鏂逛究鍚庣画淇敼鐩爣鍚嶇О}_(\\d+)`);4銆佹柟妗堜竴锛氳嚜瀹氫箟璇硶楂樹寒渚嬪js涓殑鍐欐硶function(){}鏄嚱鏁拌娉曪紝in鏄叧閿瓧锛岃繖浜涘叿鏈夌壒瀹氬惈涔夌殑鍐欐硶浼氳璧嬩簣鍚勭鈥橀珮浜€欙紝閭d箞鎴戜滑鍙互璁剧疆//voice_annotation涓哄叧閿瓧锛岀涓€姝ワ細灏唈ojo浣滅敤鍩熸坊鍔犲埌package.json鏂囦欢涓叾浣滅敤浜巎s銆乼s銆乼sx鏂囦欢銆傗€滆础鐚€濓細{鈥滆娉曗€濓細[{鈥滆矾寰勨€濓細鈥?/syntaxes/injection.json鈥濓紝鈥渟copeName鈥濓細鈥渏ojo.injection鈥濓紝鈥渋njectTo鈥濓細[鈥渟ource.js鈥濓紝鈥渟ource.ts","source.tsx"]}]},绗?姝ワ細鍒涘缓injection.json鏂囦欢{"scopeName":"jojo.injection","injectionSelector":"L:comment.line.double-slash","patterns":[{"include":"#jojo"}],"repository":{"jojo":{"match":"jojo_goldenexperience","name":"support.constant.color.0xFF00.css","settings":{"foreground":"FFFFFF"}}}}scopeName椤惧悕鎬濅箟瀹氫箟浣滅敤鍩熷悕绉般€俰njectionSelector瀹氫箟浜唖cope鐢熸晥鐨勮寖鍥达紝涔熷氨鏄瀵?/鍚庨潰鐨勫唴瀹圭敓鏁堛€俲ojo.match鎵ц鍏抽敭瀛楀尮閰嶃€俲ojo.name鏈夌偣鐗规畩锛屽畠瀹氫箟浜嗚繖涓叧閿瓧鐨勬牱寮忥紝浣嗕笉鏄櫘閫氱殑css鏍峰紡锛岃€屾槸闇€瑕佸湪瀹氫箟璇█鏍峰紡鐨勬枃浠朵腑瀹氫箟锛岀劧鍚庡彧鑳藉湪杩欓噷浣跨敤銆傝繖涓柟妗堟湁寰堝缂虹偣锛屾瘮濡備笉鑳解€樿嚜瀹氫箟鏍峰紡鈥欙紝涓嶈兘鍔ㄦ€佹敼鍙樿缃瓑绛夛紝鏈€缁堟垜娌℃湁閫夋嫨杩欎釜瀹炵幇鏂瑰紡銆?銆佹柟妗堜簩锛氭枃妗f绱㈣幏鍙栧綋鍓嶁€樻枃妗b€欑殑鎵€鏈夋枃鏈唴瀹癸紝璧嬩簣鍏剁被css鏍峰紡鐨勮兘鍔涖€傝繖绉嶆柟寮忔瘮杈冪伒娲伙紝鍙互閫氳繃浼厓绱犲疄鐜颁竴浜涙湁瓒g殑鏁堟灉銆傞鍏堬紝鎴戜滑闇€瑕佹娊璞″嚭涓€涓崟鐙殑initVoiceAnnotationStyle鏂规硶锛屼笓闂ㄧ敤鏉ヨ缃闊虫爣娉ㄧ殑椋庢牸锛屼互渚块殢鏃堕殢鍦拌瘑鍒€滆闊虫爣娉ㄢ€濓細鍦╡xtension.ts鏂囦欢涓慨鏀筰mport*asvscodefrom'vscode';浠?./initVoiceAnnotationStyle'瀵煎叆initVoiceAnnotationStyle;//鏂扮殑瀵煎嚭鍑芥暟activate(context:vscode.ExtensionContext){initVoiceAnnotationStyle()//newcontext.subscriptions.push(//newvscode.window.onDidChangeActiveTextEditor(()=>{initVoiceAnnotationStyle()}))}exportfunctiondeactivate(){}context.subscriptions.push鏄竴涓敞鍐屽懡浠わ紝杩欓噷鏄竴涓敓鍛藉懆鏈熶簨浠躲€倂scode.window.onDidChangeActiveTextEditor鐩戝惉鎴戜滑鍦╲scode涓垏鎹㈠紑鍙戞枃浠舵椂鐨勪簨浠讹紝涔熷氨鏄垜浠瘡娆℃墦寮€鏂囦欢鐨勬椂鍊欙紝涔嬫墍浠ヤ娇鐢ㄨ繖涓槸鍥犱负鎴戜滑鐨?璇煶绗旇'鍑犱箮涓嶄細琚敼鍙橈紝鑰屼笖娌℃湁闇€瑕佸崰鐢╲scode鎬ц兘銆傚畾涔夋牱寮廼nitVoiceAnnotationStyle鏂囦欢import*asvscodefrom'vscode';import{getAllTargetReg}from'./util/index'exportdefaultfunction(){vscode.window.visibleTextEditors.map((res)=>{constdocumentText=res.document.getText();constdecorator=vscode.window.createTextEditorDecorationType({color:'gray',cursor:"pointer",textDecoration:"underline",before:{contentText:"馃摙",瀹藉害:"10px",楂樺害:'10px',margin:"08px00"}})letn;constranges=[];while(n=getAllTargetReg.exec(documentText)){conststartPos=res.document.positionAt(n.index+3);constendPos=res.document.positionAt(n.index+3+n[1].length);constrange=newvscode.Range(startPos,endPos)ranges.push(ra鎭╂牸锛夛紱}res.setDecorations(decorator,ranges)})}杩欓噷鐨勭煡璇嗙偣寰堟湁鎰忔€濄€傝鎴戜滑鐢ㄦ埅鍥炬潵璋堣皥vscode.window.visibleTextEditors銆傚彲浠ョ悊瑙d负鍙互鑾峰彇褰撳墠鈥樻縺娲烩€欑殑浠g爜缂栬緫椤甸潰鐨勫睘鎬э紝鍖呮嫭褰撳墠姝e湪娴忚鐨勬槸浠€涔堣锛屾槸鍚︽縺娲讳簡鏌愪簺鏍峰紡绛夊睘鎬э紝濡俽es.document.getText()鑾峰彇鐨勫唴瀹瑰綋鍓嶆縺娲荤殑椤甸潰銆倂scode.window.createTextEditorDecorationType鍒涘缓涓€涓牱寮忥紝杩欓噷鍙畾涔変簡鍑犱釜鍥哄畾鐨勬牱寮忥紝浣嗘槸寰堟鐨勬槸杩欓噷鍙€嬧€嬩互鍒涘缓'浼厓绱?锛岃繖鏍风帺娉曞鏍凤紝鎴戜滑鍙互鎵撳嵃瀹冪殑杩斿洖缁撴灉鐪嬬湅銆傝繖閲岃繑鍥炵殑key鍏跺疄鏄竴涓猚lassName銆傝寖鍥寸敤浜庤褰曡闊虫敞閲婄殑寮€濮嬩綅缃拰缁撴潫浣嶇疆銆備箣鎵€浠ラ€夋嫨while寰幆杩涜澶勭悊锛屾槸鍥犱负鍙兘鏈夊涓獀oice-annotations銆俷.index+3鏄洜涓?/voice-annotation鐨勫墠闈㈡槸//杩欎釜鎴戦€夋嫨淇濇寔鍘熸牱銆傚叿浣撶殑鏍峰紡璋冩暣锛屾垜浠彲浠ヤ娇鐢╲scode寮€鍙戣€呭伐鍏?.hover//voice_annotation鎾斁鏍峰紡棣栧厛锛屾垜浠渶瑕佸畾涔変竴涓柊鐨刪over妯″潡锛岃礋璐over鍚庣殑鏍峰紡+鎾斁闊抽銆俥xtension.ts娣诲姞:import*asvscodefrom'vscode';importhoverfrom'./hover';//鏂板importinitVoiceAnnotationStylefrom'./initVoiceAnnotationStyle';exportfunctionactivate(context:vscode.ExtensionContext){initVoiceAnnotationStyle()context.subscriptions.push(hover);//鏂板context.subscriptions.push(vscode.window.onDidChangeActiveTextEditor(()=>{initVoiceAnnotationStyle()}))}exportfunctiondeactivate(){}瀹氫箟鏂囦欢鍐呭hover.tsimport*asvscodefrom'vscode';import{getVoiceAnnotationDirPath,targetName,testTargetReg}from'./util'letstopFn:()=>void;functionplayVoice(id:string){//杩欓噷鏄伐鍏锋挱鏀鹃煶棰戠殑涓撹緫...}exportdefaultvscode.languages.registerHoverProvider("*",{provideHover(documentnt:vscode.TextDocument,position:vscode.Position){stopFn?.()constword=documentnt.getText(documentnt.getWordRangeAtPosition(position));consttestTargetRes=testTargetReg.exec(鍗曡瘝锛?if(testTargetRes){playVoice(testTargetRes[1])returnnewvscode.Hover('playing...')}}})documennt.getText(documennt.getWordRangeAtPosition(position))鍙互鑾峰彇褰撳墠hover鐨凾ext鍐呭testTargetReg.exec(word)妫€鏌ュ綋鍓嶆偓鍋滄枃鏈槸鍚︿负鐩爣鏂囨湰銆俽eturnnewvscode.Hover('Playing...')杩欓噷杩斿洖鐨勬枃瀛楀彧鑳芥槸markdown鏍煎紡銆俿topFn鏄悗闈㈣鍋氱殑鍋滄鎾斁閫昏緫锛屽洜涓烘湁鐨勯煶棰戝彲鑳藉緢闀匡紝鎴戜滑鍚簡涓€鍗婁笉鎯冲惉浜嗭紝鎴栬€呮垜鍦ㄥ惉鏌愪釜闊抽鐨勬椂鍊欐偓鍋滃湪鍙︿竴涓闊虫潯涓婏紝閭d箞鎴戜滑搴旇鍋滄涓婁竴涓煶棰戝苟鎾斁褰撳墠闊抽銆俥nd鈥嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€屸€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶁€嶇瓑鎴戞彃杩涘幓锛岃繖娆″氨杩欐牱浜嗭紝甯屾湜鑳藉拰澶у涓€璧疯繘姝ャ€?/p>