From d96752f303c83e65d04fb26b2b8bdd7871913dc5 Mon Sep 17 00:00:00 2001 From: Martin Sundhaug Date: Thu, 22 Jun 2017 00:36:47 +0200 Subject: [PATCH 01/34] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e5dde3f..b4b1ee8 100644 --- a/README.md +++ b/README.md @@ -48,8 +48,8 @@ Thanks! | dc | Dictionary comprehension if filter | | sc | Set comprehension | | sci | Set Comprehension if filter | -| gc | Gerator comprehension | -| gci | Gerator comprehension if filter | +| gc | Generator comprehension | +| gci | Generator comprehension if filter | ### Unittest @@ -106,4 +106,4 @@ Thanks! ## 0.0.5 - Fix duplicate snippets, adding some doc -See [changelog](CHANGELOG.md) for all changes and releases. \ No newline at end of file +See [changelog](CHANGELOG.md) for all changes and releases. From 1cf917e6be7d1ef0f6e5031d35ca452e3d2a31ce Mon Sep 17 00:00:00 2001 From: Raphael Lechner Date: Tue, 11 Jul 2017 20:29:42 +0200 Subject: [PATCH 02/34] Add IPython set trace --- snippets/debug.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/snippets/debug.json b/snippets/debug.json index 32244e1..41cd821 100644 --- a/snippets/debug.json +++ b/snippets/debug.json @@ -14,5 +14,9 @@ "PuDB set trace": { "prefix": "pudb", "body": "import pudb; pudb.set_trace()$0" + }, + "IPython set trace": { + "prefix": "ipydb", + "body": "from IPython import embed; embed()$0" } -} \ No newline at end of file +} From 9f3e8cafdf4d72e016ea66088848c70b19aaee93 Mon Sep 17 00:00:00 2001 From: Christian Strappazzon Date: Tue, 17 Oct 2017 10:28:33 +0200 Subject: [PATCH 03/34] Update CHANGELOG.md --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eed5c88..34db1cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ # Change Log All notable changes to the "python-snippets" extension will be documented in this file. +## [0.0.6] +- Merge PR #1 #3 #5 fix typo, new snippets added + ## [0.0.5] - Fix duplicate snippets, adding some doc @@ -17,4 +20,4 @@ All notable changes to the "python-snippets" extension will be documented in thi ## [0.0.1] - Initial release - Porting Atom [language-python](https://github.com/atom/language-python) with [atomizr](https://www.npmjs.com/package/node-atomizr) -- Added some snippets ported from PyCharm \ No newline at end of file +- Added some snippets ported from PyCharm From 2a1dc9f52be605f4703cefd07e1ab5a4c41df625 Mon Sep 17 00:00:00 2001 From: Christian Strappazzon Date: Tue, 17 Oct 2017 10:32:14 +0200 Subject: [PATCH 04/34] bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 19b6f27..c724c3a 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "python-snippets", "displayName": "python-snippets", "description": "Python Snippets", - "version": "0.0.5", + "version": "0.1.0", "publisher": "cstrap", "icon": "images/python.png", "engines": { From 7242d323f11f2a334741750c435437c6b1f7cbd4 Mon Sep 17 00:00:00 2001 From: Andriy Orehov Date: Wed, 28 Mar 2018 17:35:59 +0300 Subject: [PATCH 05/34] changed prefix for 'Dictionary comprehension if filter' --- README.md | 6 +++--- snippets/comprehension.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b4b1ee8..74ecd29 100644 --- a/README.md +++ b/README.md @@ -45,11 +45,11 @@ Thanks! | lcie | List comprehension if else | | lci | List comprehension if filter | | dc | Dictionary comprehension | -| dc | Dictionary comprehension if filter | +| dci | Dictionary comprehension if filter | | sc | Set comprehension | | sci | Set Comprehension if filter | -| gc | Generator comprehension | -| gci | Generator comprehension if filter | +| gc | Generator comprehension | +| gci | Generator comprehension if filter | ### Unittest diff --git a/snippets/comprehension.json b/snippets/comprehension.json index a0f5c57..8150dbf 100644 --- a/snippets/comprehension.json +++ b/snippets/comprehension.json @@ -16,7 +16,7 @@ "body": "{${1:key}: ${2:value} for ${3:key}, ${4:value} in ${5:iterable}}$0" }, "Dictionary comprehension if filter": { - "prefix": "dc", + "prefix": "dci", "body": "{${1:key}: ${2:value} for ${3:key}, ${4:value} in ${5:iterable} if ${6:condition}}$0" }, "Set comprehension": { From 33b27641088f8252c5c2e227cb80f08644ae78d3 Mon Sep 17 00:00:00 2001 From: Christian Strappazzon Date: Tue, 10 Apr 2018 18:19:26 +0200 Subject: [PATCH 06/34] bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c724c3a..b79709d 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "python-snippets", "displayName": "python-snippets", "description": "Python Snippets", - "version": "0.1.0", + "version": "0.2.0", "publisher": "cstrap", "icon": "images/python.png", "engines": { From 09c1ef971c529f8f0c6226f60ec56b126de2c805 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20F=2E=20Jim=C3=A9nez?= Date: Sun, 24 Mar 2019 16:02:50 -0500 Subject: [PATCH 07/34] Update comprehension.json --- snippets/comprehension.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/snippets/comprehension.json b/snippets/comprehension.json index 8150dbf..8e4644f 100644 --- a/snippets/comprehension.json +++ b/snippets/comprehension.json @@ -27,12 +27,12 @@ "prefix": "sci", "body": "{${1:value} for ${2:value} in ${3:iterable} if ${4:condition}}$0" }, - "Gerator comprehension": { + "Generator comprehension": { "prefix": "gc", "body": "(${1:key} for ${2:value} in ${3:iterable})$0" }, - "Gerator comprehension if filter": { + "Generator comprehension if filter": { "prefix": "gci", "body": "(${1:key} for ${2:value} in ${3:iterable} if ${4:condition})$0" } -} \ No newline at end of file +} From f6e5db679e0aec6b0f217fdbbf8e4b51a2830120 Mon Sep 17 00:00:00 2001 From: Christian Strappazzon Date: Mon, 25 Mar 2019 10:23:21 +0100 Subject: [PATCH 08/34] 0.3.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b79709d..6499148 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "python-snippets", "displayName": "python-snippets", "description": "Python Snippets", - "version": "0.2.0", + "version": "0.3.0", "publisher": "cstrap", "icon": "images/python.png", "engines": { @@ -43,4 +43,4 @@ } ] } -} \ No newline at end of file +} From db9c115f1c37f4a5caaf4e60bed88dced8582893 Mon Sep 17 00:00:00 2001 From: Christian Strappazzon Date: Mon, 25 Mar 2019 10:35:41 +0100 Subject: [PATCH 09/34] Bump version 0.0.7 --- CHANGELOG.md | 3 +++ package.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 34db1cf..f2d7e69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ # Change Log All notable changes to the "python-snippets" extension will be documented in this file. +## [0.0.7] +- Merge PR #7 + ## [0.0.6] - Merge PR #1 #3 #5 fix typo, new snippets added diff --git a/package.json b/package.json index 6499148..7ce3cd8 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "python-snippets", "displayName": "python-snippets", "description": "Python Snippets", - "version": "0.3.0", + "version": "0.0.7", "publisher": "cstrap", "icon": "images/python.png", "engines": { From 2263d167a447bcea1d51773b1ef1d1683da8e3f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C2=A8h3ct0rjs=C2=A8?= <¨hfjimenez@utp.edu.co¨> Date: Tue, 26 Mar 2019 08:50:50 -0500 Subject: [PATCH 10/34] Add descriptions for comprehension.json and base.json :happy: --- snippets/base.json | 66 ++++++++++++++++++++++++------------- snippets/comprehension.json | 27 ++++++++++----- 2 files changed, 62 insertions(+), 31 deletions(-) diff --git a/snippets/base.json b/snippets/base.json index 2203da3..94ffd8f 100644 --- a/snippets/base.json +++ b/snippets/base.json @@ -1,96 +1,118 @@ { "#!/usr/bin/env python": { "prefix": "env", - "body": "#!/usr/bin/env python\n$0" + "body": "#!/usr/bin/env python\n$0", + "description" : "Adds shebang line for default python interpreter." }, "#!/usr/bin/env python3": { "prefix": "env3", - "body": "#!/usr/bin/env python3\n$0" + "body": "#!/usr/bin/env python3\n$0", + "description" : "Adds shebang line for default python 3 interpreter." }, "# -*- coding=utf-8 -*-": { "prefix": "enc", - "body": "# -*- coding=utf-8 -*-\n$0" + "body": "# -*- coding=utf-8 -*-\n$0", + "description" : "set default python2.x encoding specification to utf-8 as it is mentioned in pep-0263." }, "# coding=utf-8": { "prefix": "enco", - "body": "# coding=utf-8\n$0" + "body": "# coding=utf-8\n$0", + "description" : "set default python3 encoding specification to utf-8, by default this is the encoding for python3.x as it is mentioned in pep-3120." }, "from future import ...": { "prefix": "fenc", "body": [ "# -*- coding: utf-8 -*-", "from __future__ import absolute_import, division, print_function, unicode_literals" - ] + ], + "description" : "Import future statement definitions for python2.x scripts using utf-8 as encoding." }, "from future import ... v1": { "prefix": "fenco", "body": [ "# coding: utf-8", "from __future__ import absolute_import, division, print_function, unicode_literals" - ] + ], + "description" : "Import future statement definitions for python3.x scripts using utf-8 as encoding." }, "import": { "prefix": "im", - "body": "import ${1:package/module}$0" + "body": "import ${1:package/module}$0", + "description" : "Import a package or module" }, "from ... import ...": { "prefix": "fim", - "body": "from ${1:package/module} import ${2:names}$0" + "body": "from ${1:package/module} import ${2:names}$0", + "description" : "Import statement that allows individual objects from the module to be imported directly into the caller’s symbol table." }, "New class": { "prefix": "class", - "body": "class ${1:ClassName}(${2:object}):\n\t\"\"\"${3:docstring for $1.}\"\"\"\n\tdef __init__(self, ${4:arg}):\n\t\t${5:super($1, self).__init__()}\n\t\tself.arg = arg\n\t\t$0" + "body": "class ${1:ClassName}(${2:object}):\n\t\"\"\"${3:docstring for $1.}\"\"\"\n\tdef __init__(self, ${4:arg}):\n\t\t${5:super($1, self).__init__()}\n\t\tself.arg = arg\n\t\t$0", + "description" : "Code snippet for a class definition." }, "New method": { "prefix": "defs", - "body": "def ${1:mname}(self, ${2:arg}):\n\t${3:pass}$0" + "body": "def ${1:mname}(self, ${2:arg}):\n\t${3:pass}$0", + "description" : "Code snippet for a class method definition." }, "New function": { "prefix": "def", - "body": "def ${1:fname}(${2:arg}):\n\t${3:pass}$0" + "body": "def ${1:fname}(${2:arg}):\n\t${3:pass}$0", + "description" : "Code snippet for function definition." }, "New froperty": { "prefix": "property", - "body": "def ${1:foo}():\n doc = \"${2:The $1 property.}\"\n def fget(self):\n ${3:return self._$1}\n def fset(self, value):\n ${4:self._$1 = value}\n def fdel(self):\n ${5:del self._$1}\n return locals()\n$1 = property(**$1())$0" + "body": "def ${1:foo}():\n doc = \"${2:The $1 property.}\"\n def fget(self):\n ${3:return self._$1}\n def fset(self, value):\n ${4:self._$1 = value}\n def fdel(self):\n ${5:del self._$1}\n return locals()\n$1 = property(**$1())$0", + "description" : "" }, "if": { "prefix": "if", - "body": "if ${1:condition}:\n\t${2:pass}$0" + "body": "if ${1:condition}:\n\t${2:pass}$0", + "description" : "Code snippet for the if statement." }, "for": { "prefix": "for", - "body": "for ${1:value} in ${2:iterable}:\n\t${3:pass}$0" + "body": "for ${1:value} in ${2:iterable}:\n\t${3:pass}$0", + "description" : "Code snippet to create a for loop structure." }, "while": { "prefix": "while", - "body": "while ${1:condition}:\n\t${2:pass}$0" + "body": "while ${1:condition}:\n\t${2:pass}$0", + "description" : "Code snippet to create a while loop structure." }, "try:except:": { "prefix": "try", - "body": "try:\n\t${1:pass}\nexcept ${2:Exception} as ${3:e}:\n\t${4:raise $3}$0" + "body": "try:\n\t${1:pass}\nexcept ${2:Exception} as ${3:e}:\n\t${4:raise $3}$0", + "description" : "Code Snippet for a try and except blocks." }, "try:except:else:finally": { "prefix": "tryef", - "body": "try:\n\t${1:pass}\nexcept${2: ${3:Exception} as ${4:e}}:\n\t${5:raise}\nelse:\n\t${6:pass}\nfinally:\n\t${7:pass}$0" + "body": "try:\n\t${1:pass}\nexcept${2: ${3:Exception} as ${4:e}}:\n\t${5:raise}\nelse:\n\t${6:pass}\nfinally:\n\t${7:pass}$0", + "description" : "Code Snippet for a try/except/finally with else statement." }, "try:except:else": { "prefix": "trye", - "body": "try:\n\t${1:pass}\nexcept ${2:Exception} as ${3:e}:\n\t${4:raise $3}\nelse:\n\t${5:pass}$0" + "body": "try:\n\t${1:pass}\nexcept ${2:Exception} as ${3:e}:\n\t${4:raise $3}\nelse:\n\t${5:pass}$0", + "description" : "Code Snippet for a try/except with else statement." }, "try:except:finally": { "prefix": "tryf", - "body": "try:\n\t${1:pass}\nexcept ${2:Exception} as ${3:e}:\n\t${4:raise $3}\nfinally:\n\t${5:pass}$0" + "body": "try:\n\t${1:pass}\nexcept ${2:Exception} as ${3:e}:\n\t${4:raise $3}\nfinally:\n\t${5:pass}$0", + "description" : "Code Snippet for a try/except/finally." }, "self": { "prefix": ".", - "body": "self.$0" + "body": "self.$0", + "description" : "shortend snippet to reference the self property in an object." }, "__magic__": { "prefix": "__", - "body": "__${1:init}__$0" + "body": "__${1:init}__$0", + "description" : "Code snippet to create magic methods." }, "if __name__ == \"__main__\"": { "prefix": "ifmain", - "body": "if __name__ == \"__main__\":\n\t${1:main()}$0" + "body": "if __name__ == \"__main__\":\n\t${1:main()}$0", + "description" : "Create implicitly all the code at the top level using the __name__ special variable." } } \ No newline at end of file diff --git a/snippets/comprehension.json b/snippets/comprehension.json index 8e4644f..064c5e4 100644 --- a/snippets/comprehension.json +++ b/snippets/comprehension.json @@ -1,38 +1,47 @@ { "List comprehension": { "prefix": "lc", - "body": "[${1:value} for ${2:value} in ${3:iterable}]$0" + "body": "[${1:value} for ${2:value} in ${3:iterable}]$0", + "description" : "list comprehension for creating a list based on existing lists." }, "List comprehension if else": { "prefix": "lcie", - "body": "[${1:value} if ${2:condition} else ${3:condition} for ${4:value} in ${5:iterable}]$0" + "body": "[${1:value} if ${2:condition} else ${3:condition} for ${4:value} in ${5:iterable}]$0", + "description" : "list comprehension for creating a list based on existing lists, with conditional if-else statement." }, "List comprehension if filter": { "prefix": "lci", - "body": "[${1:value} for ${2:value} in ${3:iterable} if ${4:condition}$0]" + "body": "[${1:value} for ${2:value} in ${3:iterable} if ${4:condition}$0]", + "description" : "list comprehension for creating a list based on existing lists, with conditional if statement." }, "Dictionary comprehension": { "prefix": "dc", - "body": "{${1:key}: ${2:value} for ${3:key}, ${4:value} in ${5:iterable}}$0" + "body": "{${1:key}: ${2:value} for ${3:key}, ${4:value} in ${5:iterable}}$0", + "description" : "Handy and faster way to create dictories based on existing dictionaries." }, "Dictionary comprehension if filter": { "prefix": "dci", - "body": "{${1:key}: ${2:value} for ${3:key}, ${4:value} in ${5:iterable} if ${6:condition}}$0" + "body": "{${1:key}: ${2:value} for ${3:key}, ${4:value} in ${5:iterable} if ${6:condition}}$0", + "description" : "Handy and faster way to create dictories based on existing dictionaries, with conditional if statement." }, "Set comprehension": { "prefix": "sc", - "body": "{${1:value} for ${2:value} in ${3:iterable}}$0" + "body": "{${1:value} for ${2:value} in ${3:iterable}}$0", + "description" : "Create a set based on existing iterables." }, "Set Comprehension if filter": { "prefix": "sci", - "body": "{${1:value} for ${2:value} in ${3:iterable} if ${4:condition}}$0" + "body": "{${1:value} for ${2:value} in ${3:iterable} if ${4:condition}}$0", + "description" : "Create a set based on existing iterables, with condition if statement." }, "Generator comprehension": { "prefix": "gc", - "body": "(${1:key} for ${2:value} in ${3:iterable})$0" + "body": "(${1:key} for ${2:value} in ${3:iterable})$0", + "description" : "Create a generator based on existing iterables." }, "Generator comprehension if filter": { "prefix": "gci", - "body": "(${1:key} for ${2:value} in ${3:iterable} if ${4:condition})$0" + "body": "(${1:key} for ${2:value} in ${3:iterable} if ${4:condition})$0", + "description" : "Create a generator based on existing iterables, with condition if statement." } } From 533dc0bf1a4019512e70f4febf02fec3585a0b0c Mon Sep 17 00:00:00 2001 From: Christian Strappazzon Date: Mon, 1 Apr 2019 15:21:51 +0200 Subject: [PATCH 11/34] Some improvemets, see changelog --- CHANGELOG.md | 4 ++++ package.json | 2 +- snippets/base.json | 9 +++++++-- snippets/comprehension.json | 6 +++--- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f2d7e69..1cbb18d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Change Log All notable changes to the "python-snippets" extension will be documented in this file. +## [0.0.8] +- Merge PR #9, #10 +- Add "New property", issue #2 + ## [0.0.7] - Merge PR #7 diff --git a/package.json b/package.json index 7ce3cd8..d80a74c 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "python-snippets", "displayName": "python-snippets", "description": "Python Snippets", - "version": "0.0.7", + "version": "0.0.8", "publisher": "cstrap", "icon": "images/python.png", "engines": { diff --git a/snippets/base.json b/snippets/base.json index 94ffd8f..96d5fee 100644 --- a/snippets/base.json +++ b/snippets/base.json @@ -17,7 +17,7 @@ "# coding=utf-8": { "prefix": "enco", "body": "# coding=utf-8\n$0", - "description" : "set default python3 encoding specification to utf-8, by default this is the encoding for python3.x as it is mentioned in pep-3120." + "description" : "Set default python3 encoding specification to utf-8, by default this is the encoding for python3.x as it is mentioned in pep-3120." }, "from future import ...": { "prefix": "fenc", @@ -60,6 +60,11 @@ "body": "def ${1:fname}(${2:arg}):\n\t${3:pass}$0", "description" : "Code snippet for function definition." }, + "New property": { + "prefix": "property", + "body": "@property\ndef ${1:foo}(self):\n \"\"\"${2:The $1 property.}\"\"\"\n ${3:return self._$1}\n@${4:$1}.setter\ndef ${5:$1}(self, value):\n ${6:self._$1} = value", + "description": "New property: get and set via decorator" + }, "New froperty": { "prefix": "property", "body": "def ${1:foo}():\n doc = \"${2:The $1 property.}\"\n def fget(self):\n ${3:return self._$1}\n def fset(self, value):\n ${4:self._$1 = value}\n def fdel(self):\n ${5:del self._$1}\n return locals()\n$1 = property(**$1())$0", @@ -103,7 +108,7 @@ "self": { "prefix": ".", "body": "self.$0", - "description" : "shortend snippet to reference the self property in an object." + "description" : "Shortend snippet to reference the self property in an object." }, "__magic__": { "prefix": "__", diff --git a/snippets/comprehension.json b/snippets/comprehension.json index 064c5e4..0bc0db1 100644 --- a/snippets/comprehension.json +++ b/snippets/comprehension.json @@ -2,17 +2,17 @@ "List comprehension": { "prefix": "lc", "body": "[${1:value} for ${2:value} in ${3:iterable}]$0", - "description" : "list comprehension for creating a list based on existing lists." + "description" : "List comprehension for creating a list based on existing lists." }, "List comprehension if else": { "prefix": "lcie", "body": "[${1:value} if ${2:condition} else ${3:condition} for ${4:value} in ${5:iterable}]$0", - "description" : "list comprehension for creating a list based on existing lists, with conditional if-else statement." + "description" : "List comprehension for creating a list based on existing lists, with conditional if-else statement." }, "List comprehension if filter": { "prefix": "lci", "body": "[${1:value} for ${2:value} in ${3:iterable} if ${4:condition}$0]", - "description" : "list comprehension for creating a list based on existing lists, with conditional if statement." + "description" : "List comprehension for creating a list based on existing lists, with conditional if statement." }, "Dictionary comprehension": { "prefix": "dc", From 15d2083b74bc1249e6b6e2262651af1692ca891e Mon Sep 17 00:00:00 2001 From: Santosh Kumar Date: Thu, 17 Sep 2020 23:15:06 +0530 Subject: [PATCH 12/34] Add async function definition Since Python 3.5 we can use keywords _async_ and _await_ for asynchronous programming. https://docs.python.org/3/whatsnew/3.5.html#pep-492-coroutines-with-async-and-await-syntax --- snippets/base.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/snippets/base.json b/snippets/base.json index 96d5fee..e123f59 100644 --- a/snippets/base.json +++ b/snippets/base.json @@ -60,6 +60,11 @@ "body": "def ${1:fname}(${2:arg}):\n\t${3:pass}$0", "description" : "Code snippet for function definition." }, + "New async function": { + "prefix": "adef", + "body": "async def ${1:fname}(${2:arg}):\n\t${3:pass}$0", + "description" : "Code snippet for async function definition." + }, "New property": { "prefix": "property", "body": "@property\ndef ${1:foo}(self):\n \"\"\"${2:The $1 property.}\"\"\"\n ${3:return self._$1}\n@${4:$1}.setter\ndef ${5:$1}(self, value):\n ${6:self._$1} = value", @@ -120,4 +125,4 @@ "body": "if __name__ == \"__main__\":\n\t${1:main()}$0", "description" : "Create implicitly all the code at the top level using the __name__ special variable." } -} \ No newline at end of file +} From 4da7935addff031c63bd3da30bee77ce40ca0c86 Mon Sep 17 00:00:00 2001 From: Christian Strappazzon Date: Tue, 2 Mar 2021 10:48:49 +0100 Subject: [PATCH 13/34] Bump version 0.0.9 --- CHANGELOG.md | 3 +++ README.md | 6 ++---- package.json | 7 +++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cbb18d..363f51c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ # Change Log All notable changes to the "python-snippets" extension will be documented in this file. +## [0.0.9] +- Merge PR #11 + ## [0.0.8] - Merge PR #9, #10 - Add "New property", issue #2 diff --git a/README.md b/README.md index 74ecd29..4743f74 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Python snippets +# Python snippets Python snippets collections. @@ -25,6 +25,7 @@ Thanks! | class | New class | | defs | New method | | def | New function | +| adef | Async function | | property | New property | | if | if | | for | for | @@ -103,7 +104,4 @@ Thanks! ## Release Notes -## 0.0.5 -- Fix duplicate snippets, adding some doc - See [changelog](CHANGELOG.md) for all changes and releases. diff --git a/package.json b/package.json index d80a74c..f9a1ac3 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "python-snippets", "displayName": "python-snippets", "description": "Python Snippets", - "version": "0.0.8", + "version": "0.0.9", "publisher": "cstrap", "icon": "images/python.png", "engines": { @@ -20,8 +20,7 @@ "url": "https://github.com/cstrap/python-snippets.git" }, "contributes": { - "snippets": [ - { + "snippets": [{ "language": "python", "path": "./snippets/base.json" }, @@ -43,4 +42,4 @@ } ] } -} +} \ No newline at end of file From 2b547ce178e268162a963acd95a359ab577ced15 Mon Sep 17 00:00:00 2001 From: Julian Torres Date: Tue, 12 Oct 2021 23:57:28 -0400 Subject: [PATCH 14/34] Switch '.' to '..' --- README.md | 2 +- snippets/base.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4743f74..4f6c862 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ Thanks! | tryef | try:except:else:finally: | | trye | try:except:else: | | tryf | try:except:finally: | -| . | self | +| .. | self | | __ | __magic__ | | ifmain | if __name__ == "__main__" | diff --git a/snippets/base.json b/snippets/base.json index e123f59..f6c84a2 100644 --- a/snippets/base.json +++ b/snippets/base.json @@ -111,7 +111,7 @@ "description" : "Code Snippet for a try/except/finally." }, "self": { - "prefix": ".", + "prefix": "..", "body": "self.$0", "description" : "Shortend snippet to reference the self property in an object." }, From b9f1d147dc0b44a951c215c940bdc8128af605c9 Mon Sep 17 00:00:00 2001 From: Julian Torres Date: Wed, 13 Oct 2021 00:12:29 -0400 Subject: [PATCH 15/34] Switch '..' to 's' instead? --- README.md | 2 +- snippets/base.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4f6c862..3d7c860 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ Thanks! | tryef | try:except:else:finally: | | trye | try:except:else: | | tryf | try:except:finally: | -| .. | self | +| s | self | | __ | __magic__ | | ifmain | if __name__ == "__main__" | diff --git a/snippets/base.json b/snippets/base.json index f6c84a2..8bcaa62 100644 --- a/snippets/base.json +++ b/snippets/base.json @@ -111,7 +111,7 @@ "description" : "Code Snippet for a try/except/finally." }, "self": { - "prefix": "..", + "prefix": "s", "body": "self.$0", "description" : "Shortend snippet to reference the self property in an object." }, From 679dd46279feeb3b31901f8b579e5e77d196c84b Mon Sep 17 00:00:00 2001 From: Julian Torres Date: Wed, 13 Oct 2021 01:11:15 -0400 Subject: [PATCH 16/34] Add `classd` snippet for creating a dataclass --- README.md | 1 + snippets/base.json | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/README.md b/README.md index 4743f74..4a5e582 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ Thanks! | im | import | | fim | from ... import ... | | class | New class | +| classd | New dataclass | | defs | New method | | def | New function | | adef | Async function | diff --git a/snippets/base.json b/snippets/base.json index e123f59..233e98c 100644 --- a/snippets/base.json +++ b/snippets/base.json @@ -50,6 +50,18 @@ "body": "class ${1:ClassName}(${2:object}):\n\t\"\"\"${3:docstring for $1.}\"\"\"\n\tdef __init__(self, ${4:arg}):\n\t\t${5:super($1, self).__init__()}\n\t\tself.arg = arg\n\t\t$0", "description" : "Code snippet for a class definition." }, + "New dataclass": { + "prefix": "classd", + "body": [ + "from dataclasses import dataclass\n", + "@dataclass", + "class ${1:ClassName}(${2:object}):", + "\t\"\"\"${3:Docstring for $1.}\"\"\"", + "\t${4:property}: ${type}", + "\t$0" + ], + "description": "Code snippet for a dataclass definition." + }, "New method": { "prefix": "defs", "body": "def ${1:mname}(self, ${2:arg}):\n\t${3:pass}$0", From c597394b91546bbaee484893e37b6e70f360535f Mon Sep 17 00:00:00 2001 From: Julian Torres Date: Wed, 13 Oct 2021 01:12:04 -0400 Subject: [PATCH 17/34] Fix spacing --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4a5e582..c0a3b5d 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Thanks! | im | import | | fim | from ... import ... | | class | New class | -| classd | New dataclass | +| classd | New dataclass | | defs | New method | | def | New function | | adef | Async function | From 074943404328ab16e9aebe36750547f1af850610 Mon Sep 17 00:00:00 2001 From: Julian Torres Date: Wed, 13 Oct 2021 01:16:12 -0400 Subject: [PATCH 18/34] Add another break to satisfy PEP8 --- snippets/base.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snippets/base.json b/snippets/base.json index 233e98c..46e28f1 100644 --- a/snippets/base.json +++ b/snippets/base.json @@ -53,7 +53,7 @@ "New dataclass": { "prefix": "classd", "body": [ - "from dataclasses import dataclass\n", + "from dataclasses import dataclass\n\n", "@dataclass", "class ${1:ClassName}(${2:object}):", "\t\"\"\"${3:Docstring for $1.}\"\"\"", From d7c18491f60c52ba88045637fe4e0e534bc03ea9 Mon Sep 17 00:00:00 2001 From: Julian Torres Date: Wed, 13 Oct 2021 01:28:35 -0400 Subject: [PATCH 19/34] Add `enum` snippet for creating enums --- README.md | 1 + snippets/base.json | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/README.md b/README.md index 4743f74..52f8e77 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ Thanks! | def | New function | | adef | Async function | | property | New property | +| enum | New Enum | | if | if | | for | for | | while | while | diff --git a/snippets/base.json b/snippets/base.json index e123f59..02a68e4 100644 --- a/snippets/base.json +++ b/snippets/base.json @@ -75,6 +75,17 @@ "body": "def ${1:foo}():\n doc = \"${2:The $1 property.}\"\n def fget(self):\n ${3:return self._$1}\n def fset(self, value):\n ${4:self._$1 = value}\n def fdel(self):\n ${5:del self._$1}\n return locals()\n$1 = property(**$1())$0", "description" : "" }, + "New enum": { + "prefix": "enum", + "body": [ + "from enum import Enum\n\n", + "class ${1:MyEnum}(Enum):", + "\t\"\"\"${2:Docstring for $1.}\"\"\"", + "\t${3:FIRST_ENUM} = \"some_value\"", + "\t${4:SECOND_ENUM} = \"some_other_value\"", + "\t$0" + ] + } "if": { "prefix": "if", "body": "if ${1:condition}:\n\t${2:pass}$0", From 49317e5e1529fa0126a31049d3844f69643c0226 Mon Sep 17 00:00:00 2001 From: Julian Torres Date: Wed, 13 Oct 2021 01:32:48 -0400 Subject: [PATCH 20/34] Fix broken JSON and add "description" field. --- snippets/base.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/snippets/base.json b/snippets/base.json index 02a68e4..7b82134 100644 --- a/snippets/base.json +++ b/snippets/base.json @@ -84,8 +84,9 @@ "\t${3:FIRST_ENUM} = \"some_value\"", "\t${4:SECOND_ENUM} = \"some_other_value\"", "\t$0" - ] - } + ], + "description": "Code snippet for enum definition." + }, "if": { "prefix": "if", "body": "if ${1:condition}:\n\t${2:pass}$0", From a43e319be1efb3af642e0ed1f2e8c8d757a14297 Mon Sep 17 00:00:00 2001 From: Julian Torres Date: Wed, 13 Oct 2021 01:48:12 -0400 Subject: [PATCH 21/34] Split lines out into an array, and make `arg` update when editing it. --- snippets/base.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/snippets/base.json b/snippets/base.json index e123f59..a58a67d 100644 --- a/snippets/base.json +++ b/snippets/base.json @@ -47,7 +47,13 @@ }, "New class": { "prefix": "class", - "body": "class ${1:ClassName}(${2:object}):\n\t\"\"\"${3:docstring for $1.}\"\"\"\n\tdef __init__(self, ${4:arg}):\n\t\t${5:super($1, self).__init__()}\n\t\tself.arg = arg\n\t\t$0", + "body":[ + "class ${1:ClassName}(${2:object}):", + "\t\"\"\"${3:docstring for $1.}\"\"\"", + "\tdef __init__(self, ${4:arg}):", + "\t\t${5:super($1, self).__init__()}\n\t\tself.$4 = $4", + "\t\t$0" + ], "description" : "Code snippet for a class definition." }, "New method": { From 33f5c7149a2d28a0522f11a61ff50693bb582ba8 Mon Sep 17 00:00:00 2001 From: Julian Torres Date: Wed, 13 Oct 2021 01:50:14 -0400 Subject: [PATCH 22/34] Fix spacing. --- snippets/base.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snippets/base.json b/snippets/base.json index a58a67d..0ce4dc0 100644 --- a/snippets/base.json +++ b/snippets/base.json @@ -47,7 +47,7 @@ }, "New class": { "prefix": "class", - "body":[ + "body": [ "class ${1:ClassName}(${2:object}):", "\t\"\"\"${3:docstring for $1.}\"\"\"", "\tdef __init__(self, ${4:arg}):", From 9466904be71b6ea793f1b05a7cd21833e5a27fb7 Mon Sep 17 00:00:00 2001 From: Julian Torres Date: Wed, 13 Oct 2021 01:50:55 -0400 Subject: [PATCH 23/34] More line breakouts --- snippets/base.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/snippets/base.json b/snippets/base.json index 0ce4dc0..315ec2f 100644 --- a/snippets/base.json +++ b/snippets/base.json @@ -51,7 +51,8 @@ "class ${1:ClassName}(${2:object}):", "\t\"\"\"${3:docstring for $1.}\"\"\"", "\tdef __init__(self, ${4:arg}):", - "\t\t${5:super($1, self).__init__()}\n\t\tself.$4 = $4", + "\t\t${5:super($1, self).__init__()}", + "\t\tself.$4 = $4", "\t\t$0" ], "description" : "Code snippet for a class definition." From 31e42b5caa7701d9ef782b42284414b071c272d3 Mon Sep 17 00:00:00 2001 From: Christian Strappazzon <146691+cstrap@users.noreply.github.com> Date: Wed, 13 Oct 2021 14:50:48 +0200 Subject: [PATCH 24/34] Bump version 0.1.0 --- CHANGELOG.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 363f51c..eaacbdb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Change Log All notable changes to the "python-snippets" extension will be documented in this file. +## [0.1.0] + +- Merge PRs #15, #16, #17 + ## [0.0.9] - Merge PR #11 diff --git a/package.json b/package.json index f9a1ac3..e720e12 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "python-snippets", "displayName": "python-snippets", "description": "Python Snippets", - "version": "0.0.9", + "version": "0.1.0", "publisher": "cstrap", "icon": "images/python.png", "engines": { From 140c6f5ca618272fcd50e8bff82963bec86dfa43 Mon Sep 17 00:00:00 2001 From: Christian Strappazzon <146691+cstrap@users.noreply.github.com> Date: Thu, 14 Oct 2021 09:27:30 +0200 Subject: [PATCH 25/34] Bump version 0.1.1 --- CHANGELOG.md | 14 ++++++++++++++ package.json | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eaacbdb..783b41d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,37 +1,51 @@ # Change Log + All notable changes to the "python-snippets" extension will be documented in this file. +## [0.1.1] 2021-10-14 + +- Merge PR #14 + ## [0.1.0] - Merge PRs #15, #16, #17 ## [0.0.9] + - Merge PR #11 ## [0.0.8] + - Merge PR #9, #10 - Add "New property", issue #2 ## [0.0.7] + - Merge PR #7 ## [0.0.6] + - Merge PR #1 #3 #5 fix typo, new snippets added ## [0.0.5] + - Fix duplicate snippets, adding some doc ## [0.0.4] + - Added abbreviations list with description on README file ## [0.0.3] + - Initial support for Tkinter, ported from Atom snippets found on [GitHub](https://github.com/adiultra/python-snippets) - Splitting snippets into category files ## [0.0.2] + - Public repo on [GitHub](https://github.com/cstrap/python-snippets), feel free to contribute! :-) ## [0.0.1] + - Initial release - Porting Atom [language-python](https://github.com/atom/language-python) with [atomizr](https://www.npmjs.com/package/node-atomizr) - Added some snippets ported from PyCharm diff --git a/package.json b/package.json index e720e12..135675d 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "python-snippets", "displayName": "python-snippets", "description": "Python Snippets", - "version": "0.1.0", + "version": "0.1.1", "publisher": "cstrap", "icon": "images/python.png", "engines": { From 6d026e339053be8da964537d77a3d4e202b5a06e Mon Sep 17 00:00:00 2001 From: Paul Choisel Date: Tue, 16 Nov 2021 16:03:40 +0100 Subject: [PATCH 26/34] Improve class snippet to format the __init__ args By pressing tab after entering the __init__ method args, the args are formatted to be assigned as class attributes. --- README.md | 4 ++++ snippets/base.json | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5f0ae0e..2614cbf 100644 --- a/README.md +++ b/README.md @@ -107,3 +107,7 @@ Thanks! ## Release Notes See [changelog](CHANGELOG.md) for all changes and releases. + +## Troubleshooting + +If you experience problems with the auto-formatting of certain snippets, make sure you have the option `editor.tabCompletion` set on `onlySnippets` or `on`. \ No newline at end of file diff --git a/snippets/base.json b/snippets/base.json index f99bd4a..9bdf36b 100644 --- a/snippets/base.json +++ b/snippets/base.json @@ -52,8 +52,8 @@ "\t\"\"\"${3:docstring for $1.}\"\"\"", "\tdef __init__(self, ${4:arg}):", "\t\t${5:super($1, self).__init__()}", - "\t\tself.$4 = $4", - "\t\t$0" + "\t${4/([^,=]+)(?:=[^,]+)?(,\\s*|)/\tself.$1 = $1${2:+\n\t}/g}", + "\n\t$0" ], "description" : "Code snippet for a class definition." }, From 52ef2d5c3390ca59dd71aac290151f9cff74fb2e Mon Sep 17 00:00:00 2001 From: Rohan Pandit Date: Wed, 19 Jan 2022 10:11:13 +0000 Subject: [PATCH 27/34] Code snippet for do-while loop equivalent --- snippets/base.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/snippets/base.json b/snippets/base.json index f99bd4a..13d507f 100644 --- a/snippets/base.json +++ b/snippets/base.json @@ -121,6 +121,11 @@ "body": "while ${1:condition}:\n\t${2:pass}$0", "description" : "Code snippet to create a while loop structure." }, + "dowhile": { + "prefix": "dowhile", + "body": "do = True \nwhile do or ${1:condition}:\n\t{2:body}\n\tdo = False$0", + "description" : "Code snippet to create a do-while loop structure." + }, "try:except:": { "prefix": "try", "body": "try:\n\t${1:pass}\nexcept ${2:Exception} as ${3:e}:\n\t${4:raise $3}$0", From 97f44062e7ba7414ae7ed148394e77a3fe211224 Mon Sep 17 00:00:00 2001 From: Rohan Pandit Date: Wed, 19 Jan 2022 10:12:24 +0000 Subject: [PATCH 28/34] Code snippet for lambda function --- snippets/base.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/snippets/base.json b/snippets/base.json index 13d507f..ae28ea1 100644 --- a/snippets/base.json +++ b/snippets/base.json @@ -160,5 +160,10 @@ "prefix": "ifmain", "body": "if __name__ == \"__main__\":\n\t${1:main()}$0", "description" : "Create implicitly all the code at the top level using the __name__ special variable." + }, + "lambda": { + "prefix": "lam", + "body": "lambda ${1:args}: ${2:expr}", + "description": "Create template for lambda function" } } From b2268c76822a2fcff60b4560918cb4134a40ce12 Mon Sep 17 00:00:00 2001 From: Rohan Pandit Date: Wed, 19 Jan 2022 10:28:50 +0000 Subject: [PATCH 29/34] Edit body before condition in dowhile snippet --- snippets/base.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snippets/base.json b/snippets/base.json index ae28ea1..357db23 100644 --- a/snippets/base.json +++ b/snippets/base.json @@ -123,7 +123,7 @@ }, "dowhile": { "prefix": "dowhile", - "body": "do = True \nwhile do or ${1:condition}:\n\t{2:body}\n\tdo = False$0", + "body": "do = True \nwhile do or ${2:condition}:\n\t${1:body}\n\tdo = False$0", "description" : "Code snippet to create a do-while loop structure." }, "try:except:": { From 6a4df81ea4076e91e15f415978ecba72e94be462 Mon Sep 17 00:00:00 2001 From: Rohan Pandit Date: Wed, 19 Jan 2022 10:40:33 +0000 Subject: [PATCH 30/34] Set do to False before loop body --- snippets/base.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snippets/base.json b/snippets/base.json index 357db23..a05c405 100644 --- a/snippets/base.json +++ b/snippets/base.json @@ -123,7 +123,7 @@ }, "dowhile": { "prefix": "dowhile", - "body": "do = True \nwhile do or ${2:condition}:\n\t${1:body}\n\tdo = False$0", + "body": "do = True \nwhile do or ${2:condition}:\n\tdo = False\n\t${1:body}$0", "description" : "Code snippet to create a do-while loop structure." }, "try:except:": { From c2631eb855b4aa24d68d9dacf895e974cdebd858 Mon Sep 17 00:00:00 2001 From: Rohan Pandit Date: Wed, 19 Jan 2022 10:43:29 +0000 Subject: [PATCH 31/34] Remove whitespace after do = True --- snippets/base.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snippets/base.json b/snippets/base.json index a05c405..d44d22f 100644 --- a/snippets/base.json +++ b/snippets/base.json @@ -123,7 +123,7 @@ }, "dowhile": { "prefix": "dowhile", - "body": "do = True \nwhile do or ${2:condition}:\n\tdo = False\n\t${1:body}$0", + "body": "do = True\nwhile do or ${2:condition}:\n\tdo = False\n\t${1:body}$0", "description" : "Code snippet to create a do-while loop structure." }, "try:except:": { From 7c2242e5e57cb5abb697035d43b64fd1b1d426b5 Mon Sep 17 00:00:00 2001 From: Christian Strappazzon <146691+cstrap@users.noreply.github.com> Date: Thu, 17 Feb 2022 17:49:52 +0100 Subject: [PATCH 32/34] update docs in readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2614cbf..23d82de 100644 --- a/README.md +++ b/README.md @@ -26,11 +26,13 @@ Thanks! | classd | New dataclass | | defs | New method | | def | New function | +| dowhile | Do while structure | | adef | Async function | | property | New property | | enum | New Enum | | if | if | | for | for | +| lambda | lambda expression | | while | while | | try | try:except: | | tryef | try:except:else:finally: | From c08439527778f9b2c53f05731c4bee89e63f7e42 Mon Sep 17 00:00:00 2001 From: Christian Strappazzon <146691+cstrap@users.noreply.github.com> Date: Thu, 17 Feb 2022 17:50:38 +0100 Subject: [PATCH 33/34] bump version 0.1.3 --- CHANGELOG.md | 4 ++++ package.json | 2 +- python-snippets-0.1.2.vsix | Bin 0 -> 17452 bytes 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 python-snippets-0.1.2.vsix diff --git a/CHANGELOG.md b/CHANGELOG.md index 783b41d..5cb51aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ All notable changes to the "python-snippets" extension will be documented in this file. +## [0.1.2] 2022-02-17 + +- Merge PR #18, #19 + ## [0.1.1] 2021-10-14 - Merge PR #14 diff --git a/package.json b/package.json index 135675d..0bf5373 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "python-snippets", "displayName": "python-snippets", "description": "Python Snippets", - "version": "0.1.1", + "version": "0.1.2", "publisher": "cstrap", "icon": "images/python.png", "engines": { diff --git a/python-snippets-0.1.2.vsix b/python-snippets-0.1.2.vsix new file mode 100644 index 0000000000000000000000000000000000000000..c70467702bdc30b7fc60f5fef423c7f1a2790017 GIT binary patch literal 17452 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 LZMbcGe|`Hux!Y)h literal 0 HcmV?d00001 From adeadc1327d05cc381e6e5206eade7e8e0f94a88 Mon Sep 17 00:00:00 2001 From: Christian Strappazzon <146691+cstrap@users.noreply.github.com> Date: Thu, 17 Feb 2022 17:51:26 +0100 Subject: [PATCH 34/34] gitignore --- .gitignore | 3 ++- python-snippets-0.1.2.vsix | Bin 17452 -> 0 bytes 2 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 python-snippets-0.1.2.vsix diff --git a/.gitignore b/.gitignore index 3d858e1..815b42a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .vscode/ vsc-* -.DS_Store +.DS_Store/ +flask-snippets-* \ No newline at end of file diff --git a/python-snippets-0.1.2.vsix b/python-snippets-0.1.2.vsix deleted file mode 100644 index c70467702bdc30b7fc60f5fef423c7f1a2790017..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17452 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 LZMbcGe|`Hux!Y)h