From a5e04309d2b47eb851518b1d43523385602d002e Mon Sep 17 00:00:00 2001 From: Saeed Barari Date: Sun, 19 May 2024 14:54:17 +0330 Subject: [PATCH] added class accessibility level enum option --- package.json | 21 +++++++++++++++++++++ src/model.ts | 3 ++- src/options.ts | 6 +++++- templates/classes.json | 20 ++++++++++---------- 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 5993a24..72932a0 100644 --- a/package.json +++ b/package.json @@ -82,6 +82,27 @@ "markdownDescription": "Auto complete classes like `MonoBehaviour` and `Editor`.", "default": true }, + "unity-code-snippets.classAccessibilityLevel": { + "type": "string", + "markdownDescription": "Select the class accessibility levels.", + "order": 105, + "default": "public", + "enum": [ + "public", + "internal", + "none" + ], + "enumItemLabels": [ + "public", + "internal", + "empty (internal)" + ], + "markdownEnumDescriptions": [ + "[Access is not restricted.](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/public)", + "[Access is limited to the current assembly.](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/internal)", + "Uses nothing which lets C# use the default [(internal)](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/class) option." + ] + }, "unity-code-snippets.autoComplete.methods": { "type": "boolean", "order": 110, diff --git a/src/model.ts b/src/model.ts index 8eeedff..180a819 100644 --- a/src/model.ts +++ b/src/model.ts @@ -4,8 +4,9 @@ export const DEST_PATH = 'snippets/snippets.json'; export const ISSUES_URL = 'https://github.com/kleber-swf/vscode-unity-code-snippets/issues'; export type IndentationStyle = 'kr' | 'allman'; +export type ClassAccessibilityLevel = 'public' |'internal' | 'none'; -export type ReplaceType = 'PRIVATE' | 'LINE_BREAK' | 'TAB'; +export type ReplaceType = 'PRIVATE' | 'CLASS_ACCESSIBILITY_LEVEL' | 'LINE_BREAK' | 'TAB'; export type Replaces = Record; export const TEMPLATES = ['classes', 'methods', 'calls', 'attributes', 'experimentalAttributes'] as const; diff --git a/src/options.ts b/src/options.ts index 2f59781..1108ae3 100644 --- a/src/options.ts +++ b/src/options.ts @@ -1,5 +1,5 @@ import * as vscode from 'vscode'; -import { AutoCompletes, IndentationStyle, Options, Replaces, TEMPLATES } from './model'; +import { AutoCompletes, ClassAccessibilityLevel, IndentationStyle, Options, Replaces, TEMPLATES } from './model'; export function parseOptions(conf: vscode.WorkspaceConfiguration): Options { return { @@ -18,12 +18,16 @@ function parseAutoCompletes(conf: vscode.WorkspaceConfiguration): AutoCompletes function parseReplaces(conf: vscode.WorkspaceConfiguration): Replaces { const style = conf.get('style') as IndentationStyle; const usePrivateKeyword = conf.get('usePrivateKeyword') as boolean; + const classAccessibilityLevelKeyword = conf.get('classAccessibilityLevel') as ClassAccessibilityLevel; const replaces: Replaces = {} as any; // private keyword replaces.PRIVATE = usePrivateKeyword ? 'private ' : ''; + // class accessibility level + replaces.CLASS_ACCESSIBILITY_LEVEL = classAccessibilityLevelKeyword === 'none' ? '' : `${classAccessibilityLevelKeyword} `; + // indentation style if (style === 'allman') { replaces.LINE_BREAK = '",\n\t\t\t"'; diff --git a/templates/classes.json b/templates/classes.json index 8e223ef..a44728a 100644 --- a/templates/classes.json +++ b/templates/classes.json @@ -5,7 +5,7 @@ "body": [ "using UnityEngine;", "", - "public class ${TM_FILENAME_BASE} : MonoBehaviour%LINE_BREAK%{", + "%CLASS_ACCESSIBILITY_LEVEL%class ${TM_FILENAME_BASE} : MonoBehaviour%LINE_BREAK%{", "\t$0", "}" ] @@ -17,7 +17,7 @@ "body": [ "using UnityEngine;", "", - "public class ${TM_FILENAME_BASE} : StateMachineBehaviour%LINE_BREAK%{", + "%CLASS_ACCESSIBILITY_LEVEL%class ${TM_FILENAME_BASE} : StateMachineBehaviour%LINE_BREAK%{", "\tpublic override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)%LINE_BREAK%%TAB%{", "\t\t$0", "\t}", @@ -32,7 +32,7 @@ "using UnityEngine;", "using UnityEngine.Networking;", "", - "public class ${TM_FILENAME_BASE} : NetworkBehaviour%LINE_BREAK%{", + "%CLASS_ACCESSIBILITY_LEVEL%class ${TM_FILENAME_BASE} : NetworkBehaviour%LINE_BREAK%{", "\t$0", "}" ] @@ -45,7 +45,7 @@ "using UnityEngine;", "", "[CreateAssetMenu(fileName = \"${1:${TM_FILENAME_BASE}}\", menuName = \"${2:${TM_FILENAME_BASE}}\", order = ${3:0})]", - "public class ${TM_FILENAME_BASE} : ScriptableObject%LINE_BREAK%{", + "%CLASS_ACCESSIBILITY_LEVEL%class ${TM_FILENAME_BASE} : ScriptableObject%LINE_BREAK%{", "\t$0", "}" ] @@ -59,7 +59,7 @@ "using UnityEditor;", "", "[CustomEditor(typeof(${1:${TM_FILENAME_BASE/(.*)Editor/${1}/}}))]", - "public class ${TM_FILENAME_BASE} : Editor%LINE_BREAK%{", + "%CLASS_ACCESSIBILITY_LEVEL%class ${TM_FILENAME_BASE} : Editor%LINE_BREAK%{", "\tpublic override void OnInspectorGUI()%LINE_BREAK%%TAB%{", "\t\tbase.OnInspectorGUI();", "\t\t$0", @@ -77,7 +77,7 @@ "using UnityEditorInternal;", "", "[CustomEditor(typeof(${1:${TM_FILENAME_BASE/(.*)Editor/${1}/}}))]", - "public class ${TM_FILENAME_BASE} : Editor%LINE_BREAK%{", + "%CLASS_ACCESSIBILITY_LEVEL%class ${TM_FILENAME_BASE} : Editor%LINE_BREAK%{", "\t%PRIVATE%SerializedProperty _property;", "\t%PRIVATE%ReorderableList _list;", "", @@ -115,7 +115,7 @@ "using UnityEngine;", "using UnityEditor;", "", - "public class ${TM_FILENAME_BASE} : EditorWindow%LINE_BREAK%{", + "%CLASS_ACCESSIBILITY_LEVEL%class ${TM_FILENAME_BASE} : EditorWindow%LINE_BREAK%{", "\t[MenuItem(\"${1:${TM_FILEPATH/.*\\\\(.*)\\\\Assets\\\\.*/${1}/}/${TM_FILENAME_BASE/(.*)Editor/${1}/}}\")]", "\t%PRIVATE%static void ShowWindow()%LINE_BREAK%%TAB%{", "\t\tvar window = GetWindow<${TM_FILENAME_BASE}>();", @@ -138,7 +138,7 @@ "using UnityEditor;", "", "[CustomPropertyDrawer(typeof(${1:${TM_FILENAME_BASE/(.*)Drawer/${1}/}}))]", - "public class ${TM_FILENAME_BASE}: PropertyDrawer%LINE_BREAK%{", + "%CLASS_ACCESSIBILITY_LEVEL%class ${TM_FILENAME_BASE}: PropertyDrawer%LINE_BREAK%{", "\tpublic override void OnGUI(Rect position, SerializedProperty property, GUIContent label)%LINE_BREAK%%TAB%{", "\t\t$0", "\t}", @@ -153,7 +153,7 @@ "using UnityEngine;", "using UnityEditor;", "", - "public class ${TM_FILENAME_BASE}: ScriptableWizard%LINE_BREAK%{", + "%CLASS_ACCESSIBILITY_LEVEL%class ${TM_FILENAME_BASE}: ScriptableWizard%LINE_BREAK%{", "\t[MenuItem(\"${1:${TM_FILEPATH/.*\\\\(.*)\\\\Assets\\\\.*/${1}/}/${TM_FILENAME_BASE/(.*)Wizard/${1}/}}\")]", "\t%PRIVATE%static void MenuEntryCall()%LINE_BREAK%%TAB%{", "\t\tDisplayWizard<${TM_FILENAME_BASE}>(\"${2:Title}\");", @@ -169,7 +169,7 @@ "General class": { "prefix": "class", "description": "Creates a standard class.", - "body": ["public class ${TM_FILENAME_BASE}%LINE_BREAK%{", "\t$0", "}"] + "body": ["%CLASS_ACCESSIBILITY_LEVEL%class ${TM_FILENAME_BASE}%LINE_BREAK%{", "\t$0", "}"] }, "General interface": {