Skip to content

Commit

Permalink
[feat] New variables and functions added
Browse files Browse the repository at this point in the history
- Grammars, snippets and hovers for built-in variables and functions updated to Pinescript release November 2023
- Minor fix
  • Loading branch information
salbert11 committed Dec 5, 2023
1 parent 60369c3 commit 1d5c18b
Show file tree
Hide file tree
Showing 11 changed files with 731 additions and 210 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# Change Log

#### **3.2.2**

*05.12.2023 **Update***
- Grammars and snippets for built-in variables, functions and constants updated to Pinescript release November 2023.

---

#### **3.2.1**

*24.10.2023 **Update***
Expand Down
9 changes: 4 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,10 @@ The PineScript Helper extension supports the following file extensions:
---

## Release Notes
#### **3.2.1**
#### **3.2.2**

*24.10.2023 **Update***
- Snippets fixed.
- Grammars bug fixed.
*05.12.2023 **Update***
- Grammars and snippets for built-in variables, functions and constants updated to Pinescript release November 2023.

---

Expand All @@ -132,4 +131,4 @@ This extension is released under the [MIT License](./LICENSE.md).

---

*Version 3.2.1*
*Version 3.2.2*
39 changes: 35 additions & 4 deletions SNIPPET-LIST.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
*Version 3.2.1*
*Version 3.2.2*
# Snippet's Prefix's

- [Snippet's Prefix's](#snippets-prefixs)
Expand Down Expand Up @@ -63,7 +63,7 @@
|`na` |
|`ohlc4` |
|`open` |
|`polyline.all` _**new!**_ |
|`polyline.all` |
|`second` |
|`session.isfirstbar` |
|`session.isfirstbar_regular` |
Expand All @@ -78,6 +78,8 @@
|`strategy.eventrades` |
|`strategy.grossloss` |
|`strategy.grossprofit` |
|`strategy.grossloss_percent` _**new!**_ |
|`strategy.grossprofit_percent` _**new!**_ |
|`strategy.initial_capital` |
|`strategy.long` |
|`strategy.losstrades` |
Expand All @@ -89,6 +91,10 @@
|`strategy.max_runup` |
|`strategy.netprofit` |
|`strategy.openprofit` |
|`strategy.max_drawdown_percent` _**new!**_ |
|`strategy.max_runup_percent` _**new!**_ |
|`strategy.netprofit_percent` _**new!**_ |
|`strategy.openprofit_percent` _**new!**_ |
|`strategy.opentrades` |
|`strategy.position_avg_price` |
|`strategy.position_entry_name` |
Expand All @@ -99,15 +105,32 @@
|`syminfo.country` |
|`syminfo.currency` |
|`syminfo.description` |
|`syminfo.employees` _**new!**_ |
|`syminfo.industry` |
|`syminfo.minmove` |
|`syminfo.mintick` |
|`syminfo.pointvalue` |
|`syminfo.prefix` |
|`syminfo.pricescale` |
|`syminfo.recommendations_buy` _**new!**_ |
|`syminfo.recommendations_buy_strong` _**new!**_ |
|`syminfo.recommendations_date` _**new!**_ |
|`syminfo.recommendations_hold` _**new!**_ |
|`syminfo.recommendations_sell` _**new!**_ |
|`syminfo.recommendations_sell_strong` _**new!**_ |
|`syminfo.recommendations_total` _**new!**_ |
|`syminfo.root` |
|`syminfo.sector` |
|`syminfo.session` |
|`syminfo.shareholders` _**new!**_ |
|`syminfo.shares_outstanding_float` _**new!**_ |
|`syminfo.shares_outstanding_total` _**new!**_ |
|`syminfo.target_price_average` _**new!**_ |
|`syminfo.target_price_date` _**new!**_ |
|`syminfo.target_price_estimates` _**new!**_ |
|`syminfo.target_price_high` _**new!**_ |
|`syminfo.target_price_low` _**new!**_ |
|`syminfo.target_price_median` _**new!**_ |
|`syminfo.ticker` |
|`syminfo.tickerid` |
|`syminfo.timezone` |
Expand Down Expand Up @@ -426,8 +449,8 @@
|`plotchar` |
|`plotshape.block` |
|`plotshape` |
|`polyline.delete` _**new!**_ |
|`polyline.new` _**new!**_ |
|`polyline.delete` |
|`polyline.new` |
|`request.currency_rate` |
|`request.dividends` |
|`request.earnings` |
Expand Down Expand Up @@ -474,6 +497,9 @@
|`strategy.closedtrades.max_drawdown` |
|`strategy.closedtrades.max_runup` |
|`strategy.closedtrades.profit` |
|`strategy.closedtrades.max_drawdown_percent` _**new!**_ |
|`strategy.closedtrades.max_runup_percent` _**new!**_ |
|`strategy.closedtrades.profit_percent` _**new!**_ |
|`strategy.closedtrades.size` |
|`strategy.convert_to_account` |
|`strategy.convert_to_symbol` |
Expand All @@ -491,6 +517,9 @@
|`strategy.opentrades.max_drawdown` |
|`strategy.opentrades.max_runup` |
|`strategy.opentrades.profit` |
|`strategy.opentrades.max_drawdown_percent` _**new!**_ |
|`strategy.opentrades.max_runup_percent` _**new!**_ |
|`strategy.opentrades.profit_percent` _**new!**_ |
|`strategy.opentrades.size` |
|`strategy.order.block` |
|`strategy.order` |
Expand Down Expand Up @@ -866,6 +895,8 @@
| `while` |
| `true` |
| `false` |
| `continue` |
| `break` |

-----

Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"icon": "images/pineicon.png",
"publisher": "salbert11",
"license": "MIT",
"version": "3.2.1",
"version": "3.2.2-beta-4",
"engines": {
"vscode": "^1.62.0"
},
Expand Down
44 changes: 43 additions & 1 deletion snippets/built-in_functions.json
Original file line number Diff line number Diff line change
Expand Up @@ -932,7 +932,7 @@
"input.time ⇨ 𝑓": {
"prefix": "input.time",
"body": [
"input.time(defval = timestamp(${1|TZ,syminfo.timezone,\"GMT-12\",\"GMT-11\",\"GMT-10\",\"GMT-9\",\"GMT-8\",\"GMT-7\",\"GMT-6\",\"GMT-5\",\"GMT-4\",\"GMT-3\",\"GMT-2\",\"GMT-1\",\"GMT+0\",\"GMT+1\",\"GMT+2\",\"GMT+3\",\"GMT+4\",\"GMT+5\",\"GMT+6\",\"GMT+7\",\"GMT+8\",\"GMT+9\",\"GMT+10\",\"GMT+11\",\"GMT+12\"|}, ${2|Y,2025,2024,2023,2022,2021,2020,2019,2018,2017,2016,2015,2014,2013,2012,2011,2010,2009,2008,2007,2006,2005,2004,2003,2002,2001,2000|}, ${3|M,01,02,03,04,05,06,07,08,09,10,11,12|}, ${4|D,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31|}, ${5|h,00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23|}, ${6|m,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59|}${7:, ${8|s,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59|}}), title = \"${9| ,Time|}\"${10:${11:, tooltip = ${12:\"${13:}\"}}${14:, inline = \"${15| ,01,02,03,04,05,06,07,08,09,10|}\"}${16:, group = ${17| ,\"🌲 Source 🌲\",\"🟣 Backtesting Start 🟢\",\"🟣 Backtesting End ❎\",\"🟢 Entry 🟢\",\"❎ Exit ❎\",\"⛔ Exit ⛔\",\"🔵 Colors 🔵\",\"💬 Comments 💬\",\"🎨 Drawings 🎨\",\"🟤 Length 🟤\",\"🟢 Long 🟢\",\"⚪ Options ⚪\",\"⏱ Session ⏱\",\"🟠 Settings 🟠\",\"🔴 Short 🔴\",\"🔶 Statistics 🔶\",\"🟤 Strategy 🟤\",\"🔱 Symbol 🔱\",\"⏱ Timeframe ⏱\",\"🌲 🌲\",\"⛔ ⛔\",\"💬 💬\",\"🎨 🎨\",\"⏱ ⏱\",\"🔴 🔴\",\"🟠 🟠\",\"🟡 🟡\",\"🟢 🟢\",\"🔵 🔵\",\"🟣 🟣\",\"🟤 🟤\",\"⚫ ⚫\",\"⚪ ⚪\",\"🟥 🟥\",\"🟧 🟧\",\"🟨 🟨\",\"🟩 🟩\",\"🟦 🟦\",\"🟪 🟪\",\"🟫 🟫\",\"⬛ ⬛\",\"⬜ ⬜\",\"🔶 🔶\",\"🔷 🔷\",\"🔸 🔸\",\"🔹 🔹\",\"🔺 🔺\",\"🔻 🔻\",\"💠 💠\",\"🔱 🔱\",\"🔘 🔘\",\"🔳 🔳\",\"🔲 🔲\",\"🏁 🏁\",\"🚩 🚩\",\"🎌 🎌\",\"🏴 🏴\",\"🏳️‍🌈 🏳️‍🌈\",\"🏴‍☠️ 🏴‍☠️\",\"📍 📍\",\"📌 📌\",\"📊 📊\",\"📉 📉\",\"📈 📈\",\"🌎 🌎\",\"🌐 🌐\",\"🧭 🧭\",\"🌋 🌋\",\"🚀 🚀\",\"⌛ ⌛\",\"🌑 🌑\",\"🌗 🌗\",\"🌕 🌕\",\"🌙 🌙\",\"⭐ ⭐\",\"🌟 🌟\",\"🌞 🌞\",\"🪐 🪐\",\"🌈 🌈\",\"🌀 🌀\",\"🧨 🧨\",\"🎈 🎈\",\"🔊 🔊\",\"📢 📢\",\"📣 📣\",\"📯 📯\",\"🔔 🔔\",\"🔋 🔋\",\"🔍 🔍\",\"💾 💾\",\"💰 💰\",\"💴 💴\",\"💸 💸\",\"📐 📐\",\"📏 📏\",\"🔒 🔒\",\"🔓 🔓\",\"🔑 🔑\",\"🔐 🔐\",\"🔨 🔨\",\"⛓ ⛓\",\"🧲 🧲\",\"📡 📡\",\"🩸 🩸\",\"🗿 🗿\",\"🛂 🛂\",\"⛔ ⛔\",\"🚫 🚫\",\"☢ ☢\",\"☣ ☣\",\"▶ ▶\",\"⏯ ⏯\",\"🔂 🔂\",\"🔀 🔀\",\"📶 📶\",\"🔅 🔅\",\"✖ ✖\",\"➕ ➕\",\"➖ ➖\",\"➗ ➗\",\"💲 💲\",\"💱 💱\",\"♻ ♻\",\"📛 📛\",\"🔰 🔰\",\"⭕ ⭕\",\"✅ ✅\",\"✔ ✔\",\"❌ ❌\",\"❎ ❎\",\"➰ ➰\",\"™ ™\",\"#️⃣ #️⃣\",\"*️⃣ *️⃣\",\"0️⃣ 0️⃣\",\"1️⃣ 1️⃣\",\"2️⃣ 2️⃣\",\"3️⃣ 3️⃣\",\"4️⃣ 4️⃣\",\"5️⃣ 5️⃣\",\"6️⃣ 6️⃣\",\"7️⃣ 7️⃣\",\"8️⃣ 8️⃣\",\"9️⃣ 9️⃣\",\"🔟 🔟\",\"🅰 🅰\",\"🆎 🆎\",\"🅱 🅱\",\"🆑 🆑\",\"🆗 🆗\",\"🆙 🆙\"|}}${18:, confirm = ${19| ,false,true|}}${20:, display = ${21|display.none,display.all,display.data_window,display.status_line|}}})",
"input.time(defval = timestamp(\"${1|Y,2025,2024,2023,2022,2021,2020,2019,2018,2017,2016,2015,2014,2013,2012,2011,2010,2009,2008,2007,2006,2005,2004,2003,2002,2001,2000|}-${2|M,01,02,03,04,05,06,07,08,09,10,11,12|}-${3|D,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31|} ${5|h,00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23|}:${6|m,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59|}${7::${8|s,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59|}}${9: ${10|TZ,GMT-12,GMT-11,GMT-10,GMT-9,GMT-8,GMT-7,GMT-6,GMT-5,GMT-4,GMT-3,GMT-2,GMT-1,GMT+0,GMT+1,GMT+2,GMT+3,GMT+4,GMT+5,GMT+6,GMT+7,GMT+8,GMT+9,GMT+10,GMT+11,GMT+12|}}\"), title = \"${11| ,Time|}\"${12:${13:, tooltip = ${14:\"${15:}\"}}${16:, inline = \"${17| ,01,02,03,04,05,06,07,08,09,10|}\"}${18:, group = ${19| ,\"🌲 Source 🌲\",\"🟣 Backtesting Start 🟢\",\"🟣 Backtesting End ❎\",\"🟢 Entry 🟢\",\"❎ Exit ❎\",\"⛔ Exit ⛔\",\"🔵 Colors 🔵\",\"💬 Comments 💬\",\"🎨 Drawings 🎨\",\"🟤 Length 🟤\",\"🟢 Long 🟢\",\"⚪ Options ⚪\",\"⏱ Session ⏱\",\"🟠 Settings 🟠\",\"🔴 Short 🔴\",\"🔶 Statistics 🔶\",\"🟤 Strategy 🟤\",\"🔱 Symbol 🔱\",\"⏱ Timeframe ⏱\",\"🌲 🌲\",\"⛔ ⛔\",\"💬 💬\",\"🎨 🎨\",\"⏱ ⏱\",\"🔴 🔴\",\"🟠 🟠\",\"🟡 🟡\",\"🟢 🟢\",\"🔵 🔵\",\"🟣 🟣\",\"🟤 🟤\",\"⚫ ⚫\",\"⚪ ⚪\",\"🟥 🟥\",\"🟧 🟧\",\"🟨 🟨\",\"🟩 🟩\",\"🟦 🟦\",\"🟪 🟪\",\"🟫 🟫\",\"⬛ ⬛\",\"⬜ ⬜\",\"🔶 🔶\",\"🔷 🔷\",\"🔸 🔸\",\"🔹 🔹\",\"🔺 🔺\",\"🔻 🔻\",\"💠 💠\",\"🔱 🔱\",\"🔘 🔘\",\"🔳 🔳\",\"🔲 🔲\",\"🏁 🏁\",\"🚩 🚩\",\"🎌 🎌\",\"🏴 🏴\",\"🏳️‍🌈 🏳️‍🌈\",\"🏴‍☠️ 🏴‍☠️\",\"📍 📍\",\"📌 📌\",\"📊 📊\",\"📉 📉\",\"📈 📈\",\"🌎 🌎\",\"🌐 🌐\",\"🧭 🧭\",\"🌋 🌋\",\"🚀 🚀\",\"⌛ ⌛\",\"🌑 🌑\",\"🌗 🌗\",\"🌕 🌕\",\"🌙 🌙\",\"⭐ ⭐\",\"🌟 🌟\",\"🌞 🌞\",\"🪐 🪐\",\"🌈 🌈\",\"🌀 🌀\",\"🧨 🧨\",\"🎈 🎈\",\"🔊 🔊\",\"📢 📢\",\"📣 📣\",\"📯 📯\",\"🔔 🔔\",\"🔋 🔋\",\"🔍 🔍\",\"💾 💾\",\"💰 💰\",\"💴 💴\",\"💸 💸\",\"📐 📐\",\"📏 📏\",\"🔒 🔒\",\"🔓 🔓\",\"🔑 🔑\",\"🔐 🔐\",\"🔨 🔨\",\"⛓ ⛓\",\"🧲 🧲\",\"📡 📡\",\"🩸 🩸\",\"🗿 🗿\",\"🛂 🛂\",\"⛔ ⛔\",\"🚫 🚫\",\"☢ ☢\",\"☣ ☣\",\"▶ ▶\",\"⏯ ⏯\",\"🔂 🔂\",\"🔀 🔀\",\"📶 📶\",\"🔅 🔅\",\"✖ ✖\",\"➕ ➕\",\"➖ ➖\",\"➗ ➗\",\"💲 💲\",\"💱 💱\",\"♻ ♻\",\"📛 📛\",\"🔰 🔰\",\"⭕ ⭕\",\"✅ ✅\",\"✔ ✔\",\"❌ ❌\",\"❎ ❎\",\"➰ ➰\",\"™ ™\",\"#️⃣ #️⃣\",\"*️⃣ *️⃣\",\"0️⃣ 0️⃣\",\"1️⃣ 1️⃣\",\"2️⃣ 2️⃣\",\"3️⃣ 3️⃣\",\"4️⃣ 4️⃣\",\"5️⃣ 5️⃣\",\"6️⃣ 6️⃣\",\"7️⃣ 7️⃣\",\"8️⃣ 8️⃣\",\"9️⃣ 9️⃣\",\"🔟 🔟\",\"🅰 🅰\",\"🆎 🆎\",\"🅱 🅱\",\"🆑 🆑\",\"🆗 🆗\",\"🆙 🆙\"|}}${20:, confirm = ${21| ,false,true|}}${22:, display = ${23|display.none,display.all,display.data_window,display.status_line|}}})",
"${0}"
],
"description": "Time input ⇨ 𝑓 | input.time(defval = const int, title = string, tooltip = string, inline = string, group = string, confirm = bool, display = plot_display) → input int"
Expand Down Expand Up @@ -2543,20 +2543,41 @@
],
"description": "Maximum possible loss during the closed trades ⇨ 𝑓 | strategy.closedtrades.max_drawdown(trade_num = int) → series float"
},
"strategy.closedtrades.max_drawdown_percent ⇨ 𝑓": {
"prefix": "strategy.closedtrades.max_drawdown_percent",
"body": [
"strategy.closedtrades.max_drawdown_percent(trade_num = ${1})"
],
"description": "Returns the maximum drawdown of the closed trade, i.e., the maximum possible loss during the trade, expressed as a percentage and calculated by formula: Lowest Value During Trade / (Entry Price x Quantity) * 100. ⇨ 𝑓 | strategy.closedtrades.max_drawdown_percent(trade_num = int) → series float"
},
"strategy.closedtrades.max_runup ⇨ 𝑓": {
"prefix": "strategy.closedtrades.max_runup",
"body": [
"strategy.closedtrades.max_runup(trade_num = ${1})"
],
"description": "Maximum possible profit during the closed trade ⇨ 𝑓 | strategy.closedtrades.max_runup(trade_num = int) → series float"
},
"strategy.closedtrades.max_runup_percent ⇨ 𝑓": {
"prefix": "strategy.closedtrades.max_runup_percent",
"body": [
"strategy.closedtrades.max_runup_percent(trade_num = ${1})"
],
"description": "Returns the maximum run-up of the closed trade, i.e., the maximum possible profit during the trade, expressed as a percentage and calculated by formula: Highest Value During Trade / (Entry Price x Quantity) * 100. ⇨ 𝑓 | strategy.closedtrades.max_runup_percent(trade_num = int) → series float"
},
"strategy.closedtrades.profit ⇨ 𝑓": {
"prefix": "strategy.closedtrades.profit",
"body": [
"strategy.closedtrades.profit(trade_num = ${1})"
],
"description": "profit/loss of the closed trade ⇨ 𝑓 | strategy.closedtrades.profit(trade_num = int) → series float"
},
"strategy.closedtrades.profit_percent ⇨ 𝑓": {
"prefix": "strategy.closedtrades.profit_percent",
"body": [
"strategy.closedtrades.profit_percent(trade_num = ${1})"
],
"description": "Returns the profit/loss value of the closed trade, expressed as a percentage. Losses are expressed as negative values. ⇨ 𝑓 | strategy.closedtrades.profit_percent(trade_num = int) → series float"
},
"strategy.closedtrades.size ⇨ 𝑓": {
"prefix": "strategy.closedtrades.size",
"body": [
Expand Down Expand Up @@ -2698,20 +2719,41 @@
],
"description": "Maximum possible loss during the trade ⇨ 𝑓 | strategy.opentrades.max_drawdown(trade_num = int) → float"
},
"strategy.opentrades.max_drawdown_percent ⇨ 𝑓": {
"prefix": "strategy.opentrades.max_drawdown_percent",
"body": [
"strategy.opentrades.max_drawdown_percent(trade_num = ${1})"
],
"description": "Returns the maximum drawdown of the open trade, i.e., the maximum possible loss during the trade, expressed as a percentage and calculated by formula: Lowest Value During Trade / (Entry Price x Quantity) * 100. ⇨ 𝑓 | strategy.opentrades.max_drawdown_percent(trade_num = int) → series float"
},
"strategy.opentrades.max_runup ⇨ 𝑓": {
"prefix": "strategy.opentrades.max_runup",
"body": [
"strategy.opentrades.max_runup(trade_num = ${1})"
],
"description": "Maximum possible profit during the trade ⇨ 𝑓 | strategy.opentrades.max_runup(trade_num = int) → float"
},
"strategy.opentrades.max_runup_percent ⇨ 𝑓": {
"prefix": "strategy.opentrades.max_runup_percent",
"body": [
"strategy.opentrades.max_runup_percent(trade_num = ${1})"
],
"description": "Returns the maximum run-up of the open trade, i.e., the maximum possible profit during the trade, expressed as a percentage and calculated by formula: Highest Value During Trade / (Entry Price x Quantity) * 100. ⇨ 𝑓 | strategy.opentrades.max_runup_percent(trade_num = int) → series float"
},
"strategy.opentrades.profit ⇨ 𝑓": {
"prefix": "strategy.opentrades.profit",
"body": [
"strategy.opentrades.profit(trade_num = ${1})"
],
"description": "profit/loss of the open trade ⇨ 𝑓 | strategy.opentrades.profit(trade_num = int) → float"
},
"strategy.opentrades.profit_percent ⇨ 𝑓": {
"prefix": "strategy.opentrades.profit_percent",
"body": [
"strategy.opentrades.profit_percent(trade_num = ${1})"
],
"description": "Returns the profit/loss of the open trade, expressed as a percentage. Losses are expressed as negative values. ⇨ 𝑓 | strategy.opentrades.profit_percent(trade_num = int) → series float"
},
"strategy.opentrades.size ⇨ 𝑓": {
"prefix": "strategy.opentrades.size",
"body": [
Expand Down
17 changes: 15 additions & 2 deletions snippets/built-in_language_operators.json
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,19 @@
"false$0"
],
"description" : "false | Language Operator"
},
"continue ⇨ ⟗" : {
"prefix" : "continue",
"body" : [
"continue$0"
],
"description" : "continue | Language Operator"
},
"break ⇨ ⟗" : {
"prefix" : "break",
"body" : [
"break$0"
],
"description" : "break | Language Operator"
}
}

}
Loading

0 comments on commit 1d5c18b

Please sign in to comment.