From 4a830642f4c7b20ada01425924be1da2cd8e17d7 Mon Sep 17 00:00:00 2001 From: Daniel Hirsch Date: Mon, 27 Jan 2020 18:22:08 +0100 Subject: [PATCH 01/10] Add a README draft --- README.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..3829e9b --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# PHP binary flags + +This is a simple extension to create PHP flags that act like keyword arguments. A flag is a constant defining an integer that can be use for bitwise operations (combined with other flags) and provide multiple configuration entries in one variable. Read more about underlying concept in the [documentation](https://www.php.net/manual/en/language.operators.bitwise.php). + +For now, this extension only provides object-oriented flags. \ No newline at end of file From b75f5bffb622b35ab88cfe78a34ae4c997711dd7 Mon Sep 17 00:00:00 2001 From: Daniel Hirsch Date: Mon, 27 Jan 2020 18:26:51 +0100 Subject: [PATCH 02/10] define a convenient way of escaping the script --- src/lib/Escape.ts | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/lib/Escape.ts diff --git a/src/lib/Escape.ts b/src/lib/Escape.ts new file mode 100644 index 0000000..7f82dda --- /dev/null +++ b/src/lib/Escape.ts @@ -0,0 +1 @@ +export class Escape extends Error { } \ No newline at end of file From 7e3ca1fe88752d7807ef5d466ec29a830208a927 Mon Sep 17 00:00:00 2001 From: Daniel Hirsch Date: Mon, 27 Jan 2020 18:28:32 +0100 Subject: [PATCH 03/10] Add utilities for input parsing and handling an escape --- src/lib/entries.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/lib/entries.ts diff --git a/src/lib/entries.ts b/src/lib/entries.ts new file mode 100644 index 0000000..9549d34 --- /dev/null +++ b/src/lib/entries.ts @@ -0,0 +1,27 @@ +import { Escape } from "./Escape"; + +function parse(input: string): number { + return Number.parseInt(input.trim()); +} + +export function validate(input: string): string | null { + try { + var actual = parse(input); + } catch (error) { + return 'Input must be a valid integer.'; + } + + if (actual < 1) { + return 'Input must be an integer greater that zero.' + } + + return null; +} + +export function parseResult(result: string | undefined) { + if (result == undefined) { + throw new Escape(); + } + + return parse(result); +} \ No newline at end of file From 83c179f5c353a13f970d5b7b4db10660a017ccef Mon Sep 17 00:00:00 2001 From: Daniel Hirsch Date: Mon, 27 Jan 2020 23:46:48 +0100 Subject: [PATCH 04/10] Add main class doing all the important work --- src/lib/Generator.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/lib/Generator.ts diff --git a/src/lib/Generator.ts b/src/lib/Generator.ts new file mode 100644 index 0000000..3415d8c --- /dev/null +++ b/src/lib/Generator.ts @@ -0,0 +1,18 @@ +export class Generator +{ + public static generate(count: number, from: number): string + { + const lines: Array = []; + + let num = (from > 1) + ? from * 2 + : from; + for (let i = 1; i < count; i++) { + const line = `public const $${i} = ${num};`; + lines.push(line); + num *= 2; + } + + return lines.join('\n'); + } +} \ No newline at end of file From f349a24ddbf957da934416571d2e5f606d10188a Mon Sep 17 00:00:00 2001 From: Daniel Hirsch Date: Mon, 27 Jan 2020 23:47:27 +0100 Subject: [PATCH 05/10] Put everything together in the entry file --- src/extension.ts | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/extension.ts diff --git a/src/extension.ts b/src/extension.ts new file mode 100644 index 0000000..60f5c6c --- /dev/null +++ b/src/extension.ts @@ -0,0 +1,38 @@ +import * as vscode from 'vscode'; +import { Generator } from './lib/Generator'; +import { validate, parseResult } from './lib/entries'; +import { Escape } from './lib/Escape'; + +export function activate(context: vscode.ExtensionContext) { + let disposable = vscode.commands.registerCommand('extension.generateFlags', () => { + try { + const args = Object(); + + vscode.window.showInputBox({ + prompt: 'How many flags should be created?', + validateInput: validate + }) + .then((result) => { + args.count = parseResult(result); + + return vscode.window.showInputBox({ + prompt: 'Select a base, i.e. last flag that already exists (leave empty for no base)', + validateInput: validate + }); + }) + .then((result) => { + args.from = parseResult(result); + const text = Generator.generate(args.count, args.from); + const snippet = new vscode.SnippetString(text); + + vscode.window.activeTextEditor?.insertSnippet(snippet); + }); + } catch (err) { + if (err instanceof Escape) return; + } + }); + + context.subscriptions.push(disposable); +} + +export function deactivate() {} \ No newline at end of file From 5ecea8b74e4c76c534b8f92d6e13aa83c57ba288 Mon Sep 17 00:00:00 2001 From: Daniel Hirsch Date: Tue, 28 Jan 2020 01:21:43 +0100 Subject: [PATCH 06/10] Dispose of assumptions for correct processing in every scenario --- src/lib/Generator.ts | 8 ++++---- src/lib/entries.ts | 20 ++++++++++++++------ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/lib/Generator.ts b/src/lib/Generator.ts index 3415d8c..411c24e 100644 --- a/src/lib/Generator.ts +++ b/src/lib/Generator.ts @@ -1,12 +1,12 @@ export class Generator { - public static generate(count: number, from: number): string + public static generate(count: number, from: number | null): string { const lines: Array = []; - let num = (from > 1) - ? from * 2 - : from; + let num = (from === null) + ? 1 + : from * 2; for (let i = 1; i < count; i++) { const line = `public const $${i} = ${num};`; lines.push(line); diff --git a/src/lib/entries.ts b/src/lib/entries.ts index 9549d34..3164317 100644 --- a/src/lib/entries.ts +++ b/src/lib/entries.ts @@ -1,25 +1,33 @@ import { Escape } from "./Escape"; -function parse(input: string): number { +function parse(input: string): number | null { + if (!input) { + return null; + } + return Number.parseInt(input.trim()); } export function validate(input: string): string | null { try { var actual = parse(input); + + if (actual === null) { + return null; + } + + if (actual < 1) { + return 'Input must be an integer greater that zero.' + } } catch (error) { return 'Input must be a valid integer.'; } - if (actual < 1) { - return 'Input must be an integer greater that zero.' - } - return null; } export function parseResult(result: string | undefined) { - if (result == undefined) { + if (result === undefined) { throw new Escape(); } From 66adbbef2c7a701fdda6ded293799cf1dd2728d8 Mon Sep 17 00:00:00 2001 From: Daniel Hirsch Date: Tue, 28 Jan 2020 01:32:38 +0100 Subject: [PATCH 07/10] Prepare to publish the extension :rocket: --- package.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/package.json b/package.json index e189eb5..1009de3 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,12 @@ "name": "phpbinaryflags", "displayName": "PHP binary flags", "description": "Automatically generate sets of binary flags", + "publisher": "bloohirsch", + "repository": { + "type": "git", + "url": "https://github.com/butteredptarmigan/vscode-php-binary-flags" + }, + "license": "GNU GPL 3.0", "version": "0.0.1", "engines": { "vscode": "^1.41.0" From 38e160fbbff796c94d7f075845e3dc58503e324a Mon Sep 17 00:00:00 2001 From: Daniel Hirsch Date: Fri, 31 Jan 2020 03:00:53 +0100 Subject: [PATCH 08/10] Separate cursor index from iteration count --- src/lib/Generator.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/Generator.ts b/src/lib/Generator.ts index 411c24e..45b5efc 100644 --- a/src/lib/Generator.ts +++ b/src/lib/Generator.ts @@ -7,8 +7,8 @@ export class Generator let num = (from === null) ? 1 : from * 2; - for (let i = 1; i < count; i++) { - const line = `public const $${i} = ${num};`; + for (let i = 0; i < count; i++) { + const line = `public const $${i + 1} = ${num};`; lines.push(line); num *= 2; } From aaebc93f48bf0b821efcdb72e51377af02eb0f88 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jul 2020 10:08:11 +0000 Subject: [PATCH 09/10] Bump lodash from 4.17.15 to 4.17.19 Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19) Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6c40941..77b548c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -536,9 +536,9 @@ } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", "dev": true }, "log-symbols": { From d7b2f470304983fafcc9b970a557f9f934e79358 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 May 2021 01:37:25 +0000 Subject: [PATCH 10/10] Bump lodash from 4.17.19 to 4.17.21 Bumps [lodash](https://github.com/lodash/lodash) from 4.17.19 to 4.17.21. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.19...4.17.21) Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 77b548c..c1a8324 100644 --- a/package-lock.json +++ b/package-lock.json @@ -536,9 +536,9 @@ } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "log-symbols": {