티스토리 뷰

우리 회사는 한글 변수명을 굉장히 많이 활용하는데,

이번에 새로 시작한 프로젝트에서 한글 변수명을 어디까지 사용해야 하는것에 대한 논의가 있었다.

 

개인적으로는 한글변수명을 굉장히 좋아하는데, 한글 변수명을 좋아하지 않는 이유중에선 자동완성이 초성으로 되지 않는 것도 있었다.

안나온다...
어쩔땐 글자를 쳐도 잘 안나온다...

생각지도 못한 부분이었는데 재밌는 포인트였고, vs code에서 플러그인을 만들면 되지 않을까? 해서 혼자 열심히 api 문서를 찾아보면서 만들었다 ㅠㅠ

 

 

삽질의 결과 ㅠㅠ

설명하는건 다음에 하고 간단히 밑에 코드만 첨부한다

yo로 만들었고, javascript extention 옵션 선택해 만들었다. 아직 코드를 정리하거나 한건 아니라서 추후 쓴당 ㅠ

 

// The module 'vscode' contains the VS Code extensibility API
// Import the module and reference it with the alias vscode in your code below
const vscode = require('vscode');

// this method is called when your extension is activated
// your extension is activated the very first time the command is executed

/**
 * @param {vscode.ExtensionContext} context
 */

const 초성추출 = (str) => {
	const cho = ["ㄱ","ㄲ","ㄴ","ㄷ","ㄸ","ㄹ","ㅁ","ㅂ","ㅃ","ㅅ","ㅆ","ㅇ","ㅈ","ㅉ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ"]
	let 초성 = ""
	
	for(let i=0; i<str.length; i++) {
		let code = str.charCodeAt(i)-44032
		if(code>-1 && code<11172) 초성 += cho[Math.floor(code/588)]
	}
	return 초성
}

const 변수세트배열 = (document) => {
	const 변수배열 = document
	.split("\n") // 문장 나누기
	.map((문장) => 문장.replace(/^\s+|\s+$/g,''))
	.filter((문장) => { // 문장이 const나 let이나, var로 시작해야함
		if(문장.startsWith("const ")) return true
		if(문장.startsWith("let ")) return true
		if(문장.startsWith("var ")) return true
		return false
	})
	.map((문장) => { // const, let, var 지우기
		if(문장.startsWith("const ")) return 문장.substring(문장.indexOf("const ")+ 6, 문장.length)
		if(문장.startsWith("let ")) return 문장.substring(문장.indexOf("let ") + 4, 문장.length)
		if(문장.startsWith("var ")) return 문장.substring(문장.indexOf("let ") + 4, 문장.length)
		return 문장
	})
	.map((문장) => { // 변수명으로 자르기, 초성 찾기
		const 타입선택자 = 문장.indexOf(":")
		const 값할당자 = 문장.indexOf("=")
		const 땀땀 = 문장.indexOf(";")
		const 자를위치 = Math.min(Math.min(타입선택자 < 0 ? 문장.length : 타입선택자, 값할당자 < 0 ? 문장.length : 값할당자), 땀땀 < 0 ? 문장.length : 땀땀)
		const 변수 = 문장.substring(0, 자를위치).replace(/^\s+|\s+$/g,'')
		return {
			변수,
			초성: 초성추출(변수)
		}
	})
	.filter((변수세트) => { // 한글포함한 변수명만 찾기
		if(변수세트.초성.length === 0) return false
		return true
	})
	.map(변수세트 => { // 변수 만들기
		return {
			label: 변수세트.변수,
			kind: vscode.CompletionItemKind.Variable,
			filterText: 변수세트.초성
		}
	})
	return 변수배열
}


function activate(context) {

	// Use the console to output diagnostic information (console.log) and errors (console.error)
	// This line of code will only be executed once when your extension is activated
	console.log('Congratulations, your extension "bb" is now active!');

	const b = vscode.languages.registerCompletionItemProvider('typescript', {
        provideCompletionItems(doc) {
			const documentText = doc.getText()
			const 힌트세트 = 변수세트배열(documentText)
            return 힌트세트
		}
	})
	

	// The command has been defined in the package.json file
	// Now provide the implementation of the command with  registerCommand
	// The commandId parameter must match the command field in package.json
	let disposable = vscode.commands.registerCommand('bb.helloWorld', function () {
		// The code you place here will be executed every time your command is executed

		// Display a message box to the user
		vscode.window.showInformationMessage('Hello World from bb!');
	});

	context.subscriptions.push(disposable);
	context.subscriptions.push(b);
}

// this method is called when your extension is deactivated
function deactivate() {}

module.exports = {
	activate,
	deactivate
}
댓글