From 20423ae0053b328cebb142b092f48b9b0452687e Mon Sep 17 00:00:00 2001 From: Ajinkya Hingne Date: Tue, 23 Jun 2020 22:12:12 +0530 Subject: [PATCH] Initial commit with first version --- .vscode/launch.json | 18 ++ .vscodeignore | 3 + CHANGELOG.md | 9 + LICENSE.txt | 21 ++ README.md | 31 +++ docs/apex-snippets.md | 91 +++++++ docs/html-snippets.md | 19 ++ docs/javascript-snippets.md | 13 + images/icon.png | Bin 0 -> 31856 bytes package.json | 44 ++++ snippets/apex-snippets.json | 400 ++++++++++++++++++++++++++++++ snippets/html-snippets.json | 110 ++++++++ snippets/javascript-snippets.json | 78 ++++++ 13 files changed, 837 insertions(+) create mode 100644 .vscode/launch.json create mode 100644 .vscodeignore create mode 100644 CHANGELOG.md create mode 100644 LICENSE.txt create mode 100644 README.md create mode 100644 docs/apex-snippets.md create mode 100644 docs/html-snippets.md create mode 100644 docs/javascript-snippets.md create mode 100644 images/icon.png create mode 100644 package.json create mode 100644 snippets/apex-snippets.json create mode 100644 snippets/html-snippets.json create mode 100644 snippets/javascript-snippets.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..7bc18a4 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,18 @@ +// A launch configuration that launches the extension inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Extension", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ] + } + ] +} \ No newline at end of file diff --git a/.vscodeignore b/.vscodeignore new file mode 100644 index 0000000..43e4e83 --- /dev/null +++ b/.vscodeignore @@ -0,0 +1,3 @@ +.vscode/** +.vscode-test/** +.gitignore \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..ea53ea0 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog +All notable changes to this project will be documented in this file. + +## [1.0.0] - 2020-06-23 +### Added +- Snippets for Apex Language, Aura Component Markup and Aura Component JavaScript +- Reference doc for all the snippets + +[1.0.0]: https://github.com/meajinkya/salesforce-snippets/releases/tag/v1.0.0 \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..55a0cf9 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Ajinkya Hingne + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..dc304ca --- /dev/null +++ b/README.md @@ -0,0 +1,31 @@ +# Salesforce Snippets + +A VS Code Extension for Salesforce code snippets. + +## Features + +This extension will give you a lot of Salesforce code snippets which you can easily use while writing code in Apex, Aura Components and Lightning Web Components. + +The [docs](https://github.com/meajinkya/salesforce-snippets/tree/master/docs) folder contains documentation listing all the available snippets. + +Snippet Reference Quick Links: +[Apex](https://github.com/meajinkya/salesforce-snippets/blob/master/docs/apex-snippets.md) - List of all the Apex snippets. +[HTML](https://github.com/meajinkya/salesforce-snippets/blob/master/docs/html-snippets.md) - List of all the HTML based code snippets. +[JavaScript](https://github.com/meajinkya/salesforce-snippets/blob/master/docs/javascript-snippets.md) - List of all the JavaScript based code snippets. + +> Note: The snippets will be added continuously as and when we find more use cases. Any feedback and pull requests are welcome. + +## Requirements + +VC Code Extension installation is as easy as clicking a button from Extensions window in VS Code. +To install, +1. Go to File > Preferences > Extensions *or* press Ctrl + Shift + X +2. Search for *Salesforce Snippets* +3. Click Install + +## Release Notes + +### 1.0.0 +This release includes snippets for Apex, Aura Component HTML and Aura Component JavaScript. + +----------------------------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/docs/apex-snippets.md b/docs/apex-snippets.md new file mode 100644 index 0000000..ff95dd5 --- /dev/null +++ b/docs/apex-snippets.md @@ -0,0 +1,91 @@ +# Apex Snippets Reference + +Following tables contains a list of the available snippets and the prefixes for them. + +### Assignment +|Snippet Name|Snippet Prefix| +|------------|--------------| +|List|list| +|Set|set| +|Map|map| + +### Conditional/Branching +|Snippet Name|Snippet Prefix| +|------------|--------------| +|If|if| +|If-Else|ifelse| +|Switch statement|switch| + +### Loops +|Snippet Name|Snippet Prefix| +|------------|--------------| +|Traditional for loop|fort| +|Advanced for loop|fora| +|SOQL for loop|forsoql| +|While|while| +|Do While|dowhile| + +### Debug +|Snippet Name|Snippet Prefix| +|------------|--------------| +|System debug without variable|debug| +|System debug with variable|debugvar| + +### Testing +|Snippet Name|Snippet Prefix| +|------------|--------------| +|Test method|testmethod| +|Assert|assert| +|Assert Equals|asserte| +|Assert Not Equals|assertne| + +### Aura +|Snippet Name|Snippet Prefix| +|------------|--------------| +|AuraEnabled method|auramethod| +|AuraHandledException|auraHandledException| + +### Method types +|Snippet Name|Snippet Prefix| +|------------|--------------| +|Future method|futuremethod| +|InvocableMethod|invocablemethod| +|RemoteAction|remoteaction| +|Test Setup|testsetup| + +### Class types +|Snippet Name|Snippet Prefix| +|------------|--------------| +|Batch|batchclass| +|Schedulable class|schedulableclass| +|Test class|testclass| +|Custom Exception|customexception| + +### Exception/Error handling +|Snippet Name|Snippet Prefix| +|------------|--------------| +|try-catch|tryc| +|try-catch-finally|trycf| + +### Database +|Snippet Name|Snippet Prefix| +|------------|--------------| +|SOQL|soql| +|Database.query|dbquery| +|Database.insert Single|dbinserts| +|Database.insert Multiple|dbinsertm| +|Database.update Single|dbupdates| +|Database.update Multiple|dbupdatem| +|Database.delete Single|dbdeletes| +|Database.delete Multiple|dbdeletem| + +### Transaction Control +|Snippet Name|Snippet Prefix| +|------------|--------------| +|Add Savepoint|savepoint| +|Rollback|rollback| + +### Other +|Snippet Name|Snippet Prefix| +|------------|--------------| +|Ternary expression|ternary| \ No newline at end of file diff --git a/docs/html-snippets.md b/docs/html-snippets.md new file mode 100644 index 0000000..f10ce32 --- /dev/null +++ b/docs/html-snippets.md @@ -0,0 +1,19 @@ +# HTML Snippets Reference + +Following tables contains a list of the available snippets and the prefixes for them. + +## Aura Component +|Snippet Name|Snippet Prefix| +|------------|--------------| +|Aura Attribute|attr| +|Aura Method|aura-method| +|Aura Method With Params|aura-method-params| +|Init Handler|init-handler| +|Component Event Handler|compevent-handler| +|Application Event Handler|aappevent-handler| +|Component Event Register|cevent-reg| +|Aura If|if| +|Aura If-Else|ifelse| +|Aura Iteration|iteration| +|Aura Set|aura-set| +|Label Reference|label-ref| \ No newline at end of file diff --git a/docs/javascript-snippets.md b/docs/javascript-snippets.md new file mode 100644 index 0000000..d578308 --- /dev/null +++ b/docs/javascript-snippets.md @@ -0,0 +1,13 @@ +# JavaScript Snippets Reference + +Following tables contains a list of the available snippets and the prefixes for them. + +## Aura Component JS +|Snippet Name|Snippet Prefix| +|------------|--------------| +|Function|aura-func| +|Call Apex Action|call-apex-action| +|Fire Component Event|fire-compevent| +|Fire Application Event|fire-appevent| +|Toast|toast-event| +|Label Reference|label-ref| \ No newline at end of file diff --git a/images/icon.png b/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..56f6a26a07bcac8d3cc7b1b9b1ee03270903dc3f GIT binary patch literal 31856 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 qCho4XzQSUSdB)VnOG9x|Uigobiuqr2 ${2:listName} = new List<${1:Object}>();" + ], + "description": "Apex List declaration" + }, + + "Set" : { + "prefix": "newset", + "body": [ + "Set<${1:Object}> ${2:setName} = new Set<${1:Object}>();" + ], + "description": "Apex Set declaration" + }, + + "Map" : { + "prefix": "newmap", + "body": [ + "Map<${1:String}, ${2:Object}> ${3:mapName} = new Map<${1:String}, ${2:Object}>();" + ], + "description": "Apex Map declaration" + }, + + "If" : { + "prefix": "if", + "body": [ + "if (${1:condition}) {", + "\t$2", + "}" + ], + "description": "if" + }, + + "If-Else" : { + "prefix": "ifelse", + "body": [ + "if (${1:condition}) {", + "\t$2", + "}", + "else {", + "\t$3", + "}" + ], + "description": "If else" + }, + + "Switch statement" : { + "prefix": "switch", + "body": [ + "switch on ${1:expression} {", + "\twhen ${2:value} {", + "\t$3", + "\t}", + "\twhen ${4:value} {", + "\t$5", + "\t}", + "\twhen else {", + "\t$6", + "\t}", + "}" + ], + "description": "Switch case" + }, + + "Traditional for loop" : { + "prefix": "fort", + "body": [ + "for (Integer ${1:i} = 0; ${1:i} < ${2:length}; ${1:i}++) {", + "\t$3", + "}" + ], + "description": "Traditional for loop" + }, + + "Advanced for loop" : { + "prefix": "fora", + "body": [ + "for (${1:type} ${2:variable} : ${3:collection}) {", + "\t$4", + "}" + ], + "description": "Advanced for loop" + }, + + "SOQL for loop" : { + "prefix": "forsoql", + "body": [ + "for (${1:sobjectName} ${2:sobjectVar} : [SELECT ${3:fieldNames} FROM ${1:sobjectName}]) {", + "\t$5", + "}" + ], + "description": "SOQL for loop" + }, + + "While" : { + "prefix": "while", + "body": [ + "while (${1:condition}) {", + "\t$2", + "}" + ], + "description": "While loop" + }, + + "Do While" : { + "prefix": "dowhile", + "body": [ + "do {", + "\t$2", + "} while (${1:condition});" + ], + "description": "Do while loop" + }, + + "System debug without variable": { + "prefix": "debug", + "body": [ + "System.debug('$1');" + ], + "description": "Print debug to log without any variable" + }, + + "System debug with variable": { + "prefix": "debugvar", + "body": [ + "System.debug('$1' + ${2:variable});" + ], + "description": "Print debug to log with a variable value" + }, + + "Test method" : { + "prefix": "testmethod", + "body": [ + "@isTest", + "private static void test${1:TestCase}() {", + "\t//Test data setup\n", + "\t//Actual test", + "\tSystem.startTest();", + "\tSystem.stopTest();", + "\t//Asserts", + "}" + ], + "description": "Test method" + }, + + "Assert" : { + "prefix": "assert", + "body": [ + "System.assert(${1:booleanExpression});" + ], + "description": "Assert for single boolean expression" + }, + + "Assert Equals" : { + "prefix": "asserte", + "body": [ + "System.assertEquals(${1:expectedValue, ${2:actualValue});" + ], + "description": "Assert for comparing two values" + }, + + "Assert Not Equals" : { + "prefix": "assertne", + "body": [ + "System.assertNotEquals(${1:expectedValue, ${2:actualValue});" + ], + "description": "Assert for comparing two values negative" + }, + + "AuraEnabled method": { + "prefix": "auramethod", + "body": [ + "@AuraEnabled", + "${1:public} static ${2:void} ${3:methodName}() {", + "\t$4", + "}" + ], + "description": "Aura Enabled method" + }, + + "AuraHandledException" : { + "prefix": "auraHandledException", + "body": [ + "throw new AuraHandledException(${1:exceptionMessage});" + ], + "description": "Throw the AuraHandledException which can be handled by Aura" + }, + + "Future method" : { + "prefix": "futuremethod", + "body": [ + "@future", + "public static void ${1:methodName}() {", + "\t$2", + "}" + ], + "description": "Future method" + }, + + "InvocableMethod" : { + "prefix": "invocablemethod", + "body": [ + "@InvocableMethod(label='${1:label}' description='${2:description}')", + "public static ${3:void} ${4:methodName}(${5:List ids}) {", + "\t$6", + "}" + ], + "description": "Invocable method to be called from Process/Flow" + }, + + "RemoteAction" : { + "prefix": "remoteaction", + "body": [ + "@RemoteAction", + "public static ${1:void} ${2:methodName}() {", + "\t$6", + "}" + ], + "description": "Remote action method to be called from Visualforce page" + }, + + "Test Setup" : { + "prefix": "testsetup", + "body": [ + "@testSetup", + "private static void ${1:testSetup}() {", + "\t$2", + "}" + ], + "description": "Test Setup method" + }, + + "Batch class" : { + "prefix": "batchclass", + "body": [ + "public class ${1:className} implements Database.Batchable {\n", + "\tpublic ${1:className}() {", + "\t}\n", + "\tpublic Database.QueryLocator start(Database.BatchableContext BC) {", + "\t}\n", + "\tpublic void execute(Database.BatchableContext BC, List scope) {", + "\t}\n", + "\tpublic void finish(Database.BatchableContext BC) {", + "\t}\n", + "}" + ], + "description": "Batch class" + }, + + "Schedulable class" : { + "prefix": "schedulableclass", + "body": [ + "public class ${1:className} implements Schedulable {\n", + "\tpublic void execute(SchedulableContext SC) {", + "\t}\n", + "}" + ], + "description": "Schedulable class" + }, + + "Test class" : { + "prefix": "testclass", + "body": [ + "@isTest", + "private class ${1:className} {\n", + "\t@isTest", + "\tprivate static void test${2:TestCase}() {", + "\t\t// Test data setup\n", + "\t\t// Actual test", + "\t\tSystem.startTest();\n", + "\t\tSystem.stopTest();\n", + "\t\t// Asserts", + "\t}\n", + "}" + ], + "description": "Test class" + }, + + "Custom Exception" : { + "prefix": "customexception", + "body": [ + "public class ${1:exceptionName}Exception extends Exception {", + "}" + ], + "description": "Custom Exception class" + }, + + "try-catch" : { + "prefix": "tryc", + "body": [ + "try {", + "\t", + "}", + "catch (Exception ex) {", + "\t", + "}" + ], + "description": "Try Catch" + }, + + "try-catch-finally" : { + "prefix": "tryc", + "body": [ + "try {", + "\t", + "}", + "catch (Exception ex) {", + "\t", + "}", + "finally {", + "\t", + "}" + ], + "description": "Try Catch Finally" + }, + + "SOQL" : { + "prefix": "soql", + "body": [ + "[SELECT ${1:field1, field2} FROM ${2:SobjectName} WHERE ${3:clause}];" + ], + "description": "Apex SOQL query" + }, + + "Database Query" : { + "prefix": "dbquery", + "body": [ + "List<${1:sObject}> sobjects = Database.query(${2:queryString});" + ], + "description": "Database.query for dynamic queries" + }, + + "Database Insert Single" : { + "prefix": "dbinserts", + "body": [ + "Database.SaveResult insertResult = Database.insert(${1:recordToInsert});"], + "description": "Database.insert single record" + }, + + "Database Insert Multiple" : { + "prefix": "dbinsertm", + "body": [ + "Database.SaveResult[] insertResults = Database.insert(${1:recordsToInsert});"], + "description": "Database.insert multiple records" + }, + + "Database Update Single" : { + "prefix": "dbupdates", + "body": [ + "Database.SaveResult updateResult = Database.update(${1:recordToUpdate});"], + "description": "Database.update single record" + }, + + "Database Update Multiple" : { + "prefix": "dbupdatem", + "body": [ + "Database.SaveResult[] updateResults = Database.update(${1:recordsToUpdate});"], + "description": "Database.update multiple records" + }, + + "Database Delete Single" : { + "prefix": "dbdeletes", + "body": [ + "Database.DeleteResult deleteResult = Database.delete(${1:recordToDelete});"], + "description": "Database.delete single record" + }, + + "Database Delete Multiple" : { + "prefix": "dbdeletem", + "body": [ + "Database.DeleteResult[] deleteResults = Database.delete(${1:recordsToDelete});"], + "description": "Database.delete multiple records" + }, + + "Add Savepoint" : { + "prefix": "savepoint", + "body": [ + "System.Savepoint ${1:savepoint} = Database.setSavepoint();" + ], + "description": "Create Savepoint" + }, + + "Rollback" : { + "prefix": "rollback", + "body": [ + "Database.rollback(${1:savepoint});" + ], + "description": "Rollback" + }, + + "Ternary expression" : { + "prefix": "ternary", + "body": [ + "${1:condition} ? ${2:exprIfTrue} : ${3:exprIfFalse}" + ], + "description": "Ternary expression" + } +} \ No newline at end of file diff --git a/snippets/html-snippets.json b/snippets/html-snippets.json new file mode 100644 index 0000000..583288e --- /dev/null +++ b/snippets/html-snippets.json @@ -0,0 +1,110 @@ +{ + "Aura Attribute" : { + "prefix": "attr", + "body": [ + "" + ], + "description": "Aura component attribute" + }, + + "Aura Method" : { + "prefix": "aura-method", + "body": [ + "" + ], + "description": "Aura method" + }, + + "Aura Method With Params" : { + "prefix": "aura-method-params", + "body": [ + "", + "\t", + "" + ], + "description": "Aura method with parameters" + }, + + "Init Handler" : { + "prefix": "init-handler", + "body": [ + "" + ], + "description": "Init Handler" + }, + + "Component Event Handler" : { + "prefix": "compevent-handler", + "body": [ + "" + ], + "description": "Component event handler" + }, + + "Application Event Handler" : { + "prefix": "appevent-handler", + "body": [ + "" + ], + "description": "Application event handler" + }, + + "Component Event Register" : { + "prefix": "cevent-reg", + "body": [ + "" + ], + "description": "Component event registration" + }, + + "Aura If" : { + "prefix": "if", + "body": [ + "", + "\t$2", + "" + ], + "description": "Aura if" + }, + + "Aura If-Else" : { + "prefix": "ifelse", + "body": [ + "", + "\t$2", + "\t", + "\t\t$3", + "\t", + "" + ], + "description": "Aura if-else" + }, + + "Aura Iteration" : { + "prefix": "iteration", + "body": [ + "", + "\t$3", + "" + ], + "description": "Aura iteration" + }, + + "Aura Set" : { + "prefix": "aura-set", + "body": [ + "", + "\t$2", + "" + ], + "description": "Set attribute" + }, + + "Label Reference" : { + "prefix": "label-ref", + "body": [ + "\\$Label.c.${1:labelName}" + ], + "description": "Reference a custom label" + } +} \ No newline at end of file diff --git a/snippets/javascript-snippets.json b/snippets/javascript-snippets.json new file mode 100644 index 0000000..15e2cff --- /dev/null +++ b/snippets/javascript-snippets.json @@ -0,0 +1,78 @@ +{ + "Aura Function" : { + "prefix": "aura-func", + "body": [ + "${1:functionName} : function(component, event, helper) {", + "\t$2", + "}" + ], + "description": "Aura JS Function" + }, + + "Call Apex Action" : { + "prefix": "call-apex-action", + "body": [ + "var ${1:actionName} = component.get(\"c.${2:methodName}\");", + "${1:actionName}.setParams({", + "\t\"${3:paramName}\" : ${4:value}", + "});", + "${1:actionName}.setCallback(this, function(response) {", + "\tvar state = response.getState();", + "\tif (state === \"SUCCESS\") {", + "\t\tvar ${5:returnValueVar} = response.getReturnValue();", + "\t}", + "\telse if (state === \"ERROR\") {", + "\t\tvar errors = response.getError();", + "\t}", + "});", + "\\$A.enqueueAction(${1:actionName});" + ], + "description": "Call Apex Action" + }, + + "Fire Component Event" : { + "prefix": "fire-compevent", + "body": [ + "var compEvent = component.get(\"${1:componentEventName}\");", + "compEvent.setParams({", + "\t\"${2:paramName}\" : ${3:value}", + "});", + "compEvent.fire();" + ], + "description": "Fire component event" + }, + + "Fire Application Event" : { + "prefix": "fire-appevent", + "body": [ + "var appEvent = \\$A.get(\"e.c:${1:appEventName}\");", + "appEvent.setParams({", + "\t\"${2:paramName}\" : ${3:value}", + "});", + "appEvent.fire();" + ], + "description": "Fire application event" + }, + + "Toast" : { + "prefix": "toast-event", + "body": [ + "var toastEvent = \\$A.get(\"e.force:showToast\");", + "toastEvent.setParams({", + "\t\"title\": ${1:title},", + "\t\"type\": ${2:type},", + "\t\"message\": ${3:message}", + "});", + "toastEvent.fire();" + ], + "description": "Toast event" + }, + + "Label Reference" : { + "prefix": "label-ref", + "body": [ + "\\$A.get(\"\\$Label.c.${1:labelName}\");" + ], + "description": "Refer custom label in Aura JS" + } +} \ No newline at end of file