├── .gitattributes ├── .gitignore ├── .vscode └── launch.json ├── .vscodeignore ├── CHANGELOG.md ├── LICENSE ├── README.ja.md ├── README.md ├── aiscript ├── intellisense │ ├── extension.ts │ ├── functions │ │ ├── Arr.ts │ │ ├── Async.ts │ │ ├── Core.ts │ │ ├── Date.ts │ │ ├── Error.ts │ │ ├── Json.ts │ │ ├── Math.ts │ │ ├── Num.ts │ │ ├── Obj.ts │ │ ├── Str.ts │ │ ├── TopLevel.ts │ │ ├── Uri.ts │ │ └── Util.ts │ ├── misc │ │ └── createCompletionItemKindFn.ts │ ├── misskey │ │ ├── Components.ts │ │ ├── Mk.ts │ │ ├── Plugin.ts │ │ ├── TopLevel.ts │ │ └── Ui.ts │ ├── primitive │ │ ├── array.ts │ │ ├── number.ts │ │ └── string.ts │ └── server │ │ └── index.ts ├── language-configuration.json └── syntaxes │ └── aiscript.tmLanguage.json ├── assets └── aiscript_gd.png ├── package-lock.json ├── package.json ├── readme-assets └── screenshot.png ├── scripts └── clean.js └── tsconfig.json /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set default behavior to automatically normalize line endings. 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | *.vsix -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that launches the extension inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "args": [ 13 | "--extensionDevelopmentPath=${workspaceFolder}" 14 | ], 15 | "outFiles": [ 16 | "${workspaceFolder}/dist/**/*.js" 17 | ], 18 | "preLaunchTask": "npm: build" 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | readme-assets/** 4 | aiscript/intellisense/** 5 | node_modules/** 6 | scripts/** 7 | .gitignore 8 | *.vsix 9 | vsc-extension-quickstart.md 10 | tsconfig.json 11 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to the "aiscript" extension will be documented in this file. 4 | 5 | Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. 6 | 7 | ## 0.1.16 8 | - ハイライト:do-while, while, breakのサポート, ラベル構文のサポート 9 | - 関数のIntellisenseを追加 10 | - `Obj:pick` 11 | 12 | ## 0.1.15 13 | - ネームスペース関数の引数でテンプレートリテラルがハイライトされない問題を修正 14 | 15 | ## 0.1.14 16 | - 依存パッケージを更新 17 | - 関数の引数にテンプレート文字列を取るとハイライトされない問題を修正 18 | 19 | ## 0.1.13 20 | - AiScriptロゴを追加 21 | - 名前空間ブロックのハイライトに対応 22 | - テンプレートリテラル内の波括弧のエスケープが効いていない問題を修正 23 | 24 | ## 0.1.12 25 | - 関数のIntellisenseを追加 26 | - https://github.com/aiscript-dev/aiscript/pull/661 - `[].at()` 27 | 28 | ## 0.1.11 29 | - 変数名に`let`や`var`などが含まれるときにハイライトに失敗する問題を修正 30 | 31 | ## 0.1.10 32 | - tmLanguageの言語指定の後方互換性を追加 33 | 34 | ## 0.1.9 35 | - `each`文が正しくhighlightされない問題を修正(#11) 36 | 37 | ## 0.1.8 38 | - 関数のIntellisenseを追加 39 | - https://github.com/aiscript-dev/aiscript/pull/621 - `[].splice()` 40 | - https://github.com/aiscript-dev/aiscript/pull/622 - `[].flat()`, `[].flat_map()` 41 | - https://github.com/aiscript-dev/aiscript/pull/654 - `[].insert()`, `[].remove()` 42 | - https://github.com/aiscript-dev/aiscript/pull/608 - `Uri:` 系 43 | - https://github.com/aiscript-dev/aiscript/pull/653 - `''.pad_start()`, `''.pad_end()` 44 | 45 | ## 0.1.7 46 | - 関数のIntellisenseを追加 47 | - https://github.com/aiscript-dev/aiscript/pull/620 - `[].every()`, `[].some()` 48 | - https://github.com/aiscript-dev/aiscript/pull/623 - `Date:to_iso_str()` 49 | 50 | ## 0.1.6 51 | - 関数のIntellisenseを追加 52 | - https://github.com/aiscript-dev/aiscript/pull/411 … `[].index_of()` 53 | - https://github.com/aiscript-dev/aiscript/pull/372 … `Core:abort()` 54 | - https://github.com/aiscript-dev/aiscript/pull/486 … 文字列に関する関数 複数 55 | 56 | ## 0.1.5 57 | - 関数のIntellisenseを追加 58 | - https://github.com/aiscript-dev/aiscript/pull/552 … `Date:millisecond()` 59 | - https://github.com/aiscript-dev/aiscript/pull/581 … `[].fill()`, `[].repeat()`, `Arr:create()` 60 | 61 | ## 0.1.4 62 | - (fix) 依存関係を修正 63 | 64 | ## 0.1.3 65 | - (change) AiScript Language Serverを更新 66 | (このプログラムをパッケージとしてインストールした際にbinが存在しないというWARNが出てしまう問題を修正できるかも) 67 | 68 | ※拡張機能自体に更新はありません 69 | 70 | ## 0.1.2 71 | - (change) tmLanguageの言語名設定を変更 (https://github.com/misskey-dev/misskey/issues/13204) 72 | 73 | ## 0.1.1 74 | - (change) セキュリティ上の懸念があるAiScript関数に対しての入力補助機能を削除 75 | 76 | ## 0.1.0 77 | - (add) Language Serverを統合(文法チェックが利用できるように) 78 | - (enhance) バンドラとしてesbuildを使用するように 79 | - (change) パッケージマネージャがnpmに変更されました 80 | 81 | ## 0.0.6 82 | - (add) `Mk:nyaize`のIntellisenseを追加 83 | - (fix) 複数行にわたるテンプレート文字列のハイライトに失敗する問題を修正 84 | 85 | ## 0.0.5 86 | - (fix) namespaceの区切り文字のハイライトを修正 87 | - (fix) ビルドエラーを修正 88 | 89 | ## 0.0.4 90 | - (fix) Intellisenseの実装漏れ(`Core:`標準関数) 91 | - (fix) `<:`のシンタックスハイライトがない 92 | 93 | ## 0.0.3 94 | - (fix) ClassConstantのハイライトが正しく行われない問題を修正 95 | 96 | ## 0.0.2 97 | - Intellisenseを追加(簡易版) 98 | 99 | ## 0.0.1 100 | 101 | - Initial release 102 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Misskey Project and other contributors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.ja.md: -------------------------------------------------------------------------------- 1 | # AiScript VSCode 拡張機能 2 | 3 | ![Screenshot](./readme-assets/screenshot.png) 4 | 5 | ## 特徴 6 | 7 | **AiScript VSCode 拡張機能** は、AiScriptのシンタックスハイライティングなどを提供するVisual Studio Code向けの拡張機能です。 8 | 9 | - フツーに動く、VSCode向けのAiScriptシンタックスハイライト 10 | - 単なるスニペットではなくIntellisense(VSCodeの予測変換機能)としてAiScriptの全機能を網羅 11 | - (Misskey関連のプロパティにも対応!) 12 | 13 | ## インストールのやりかた 14 | 15 | [Releases ページ](https://github.com/aiscript-dev/aiscript-vscode/releases) に移動し、拡張子が `.vsix` のファイルをダウンロード・インストールしてください。 16 | 17 | ## 動作環境 18 | 19 | Visual Studio Code v1.83.0 以降 20 | 21 | ## リリースノート 22 | 23 | CHANGELOG.md をご覧ください 24 | 25 | ## 開発環境の構築 26 | 27 | ### ローカルでビルドする 28 | 29 | 以下のコマンドを実行してください 30 | 31 | ```bash 32 | # 依存関係のインストール 33 | $ npm i 34 | 35 | # VSCEを使いvsixパッケージ化 36 | $ npx @vscode/vsce package 37 | 38 | # もしnpxでうまくいかなければ、以下をお試しください: 39 | $ npm install -g @vscode/vsce 40 | $ vsce package 41 | ``` 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AiScript Highlighting VSCode Extension (Experimental) 2 | 3 | [日本語](https://github.com/aiscript-dev/aiscript-vscode/blob/main/README.ja.md) 4 | 5 | ![Screenshot](./readme-assets/screenshot.png) 6 | 7 | ## Features 8 | 9 | AiScript Highlighting is an extension for Visual Studio Code that provides syntax highlighting for AiScript. 10 | 11 | - Syntax highlighting for AiScript ~~that just works~~ 12 | - Intellisense for all AiScript features, not just a snippet 13 | - (Comes with Misskey-related properties!) 14 | 15 | ## How to Install 16 | 17 | Head to the [releases page](https://github.com/aiscript-dev/aiscript-vscode/releases) and download the latest version of the `.vsix` file. 18 | 19 | ## Requirements 20 | 21 | Works with Visual Studio Code v1.83.0 or later 22 | 23 | ## Release Notes 24 | 25 | Please refer to CHANGELOG.md 26 | 27 | ## Development 28 | 29 | ### Build Locally 30 | 31 | Run: 32 | 33 | ```bash 34 | # Install dependencies 35 | $ npm i 36 | 37 | # Pack into .vsix file using VSCE 38 | $ npx @vscode/vsce package 39 | 40 | # (If command above didn't work, try below) 41 | $ npm install -g @vscode/vsce 42 | $ vsce package 43 | ``` 44 | -------------------------------------------------------------------------------- /aiscript/intellisense/extension.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | 3 | import { LanguageClient, TransportKind } from "vscode-languageclient/node"; 4 | 5 | import string from "./primitive/string"; 6 | import array from "./primitive/array"; 7 | import number from "./primitive/number"; 8 | import AisTopLevel from "./functions/TopLevel"; 9 | import AisCore from "./functions/Core"; 10 | import AisUtil from "./functions/Util"; 11 | import AisDate from "./functions/Date"; 12 | import AisMath from "./functions/Math"; 13 | import AisNum from "./functions/Num"; 14 | import AisStr from "./functions/Str"; 15 | import AisObj from "./functions/Obj"; 16 | import AisArr from "./functions/Arr"; 17 | import AisUri from "./functions/Uri"; 18 | import AisError from "./functions/Error"; 19 | import AisAsync from "./functions/Async"; 20 | import MiTopLevel from "./misskey/TopLevel"; 21 | import MiMk from "./misskey/Mk"; 22 | import MiUi from "./misskey/Ui"; 23 | import MiComponents from "./misskey/Components"; 24 | import MiPlugin from "./misskey/Plugin"; 25 | 26 | export function activate(context: vscode.ExtensionContext) { 27 | const providers: vscode.Disposable[] = [ 28 | // Primitive 29 | number, 30 | string, 31 | array, 32 | 33 | // Functions 34 | AisTopLevel, 35 | AisCore, 36 | AisUtil, 37 | AisDate, 38 | AisMath, 39 | AisNum, 40 | AisStr, 41 | AisObj, 42 | AisArr, 43 | AisUri, 44 | AisError, 45 | AisAsync, 46 | 47 | // Misskey 48 | MiTopLevel, 49 | MiMk, 50 | MiUi, 51 | MiComponents, 52 | MiPlugin, 53 | ]; 54 | 55 | const client = new LanguageClient( 56 | "aiscript", 57 | { 58 | module: context.asAbsolutePath("./dist/server/index.js"), 59 | transport: TransportKind.stdio, 60 | }, 61 | { 62 | documentSelector: [{ language: "aiscript" }], 63 | } 64 | ); 65 | 66 | client.start(); 67 | 68 | context.subscriptions.push(...providers); 69 | } 70 | -------------------------------------------------------------------------------- /aiscript/intellisense/functions/Arr.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/Arr:$/).test(linePrefix)) { 8 | if (/(:|\.)[^)\s]*$/.test(linePrefix)) { 9 | return undefined; 10 | } 11 | 12 | const ObjRoot = new CompletionItem('Arr:'); 13 | ObjRoot.kind = CompletionItemKind.Class; 14 | ObjRoot.command = { command: 'editor.action.triggerSuggest', title: 'Re-trigger completions...' }; 15 | return [ObjRoot]; 16 | } 17 | 18 | return [ 19 | createCompletionItemKindMethod('create'), 20 | ]; 21 | } 22 | }, ':'); -------------------------------------------------------------------------------- /aiscript/intellisense/functions/Async.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/Async:$/).test(linePrefix)) { 8 | if (/(:|\.)[^)\s]*$/.test(linePrefix)) { 9 | return undefined; 10 | } 11 | 12 | const AsyncRoot = new CompletionItem('Async:'); 13 | AsyncRoot.kind = CompletionItemKind.Class; 14 | AsyncRoot.command = { command: 'editor.action.triggerSuggest', title: 'Re-trigger completions...' }; 15 | return [AsyncRoot]; 16 | } 17 | 18 | return [ 19 | createCompletionItemKindMethod('interval'), 20 | createCompletionItemKindMethod('timeout'), 21 | ]; 22 | } 23 | }, ':'); -------------------------------------------------------------------------------- /aiscript/intellisense/functions/Core.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/Core:$/).test(linePrefix)) { 8 | if (/(:|\.)[^)\s]*$/.test(linePrefix)) { 9 | return undefined; 10 | } 11 | 12 | const CoreRoot = new CompletionItem('Core:'); 13 | CoreRoot.kind = CompletionItemKind.Class; 14 | CoreRoot.command = { command: 'editor.action.triggerSuggest', title: 'Re-trigger completions...' }; 15 | return [CoreRoot]; 16 | } 17 | 18 | return [ 19 | new CompletionItem('v', CompletionItemKind.Value), 20 | 21 | createCompletionItemKindMethod('add'), 22 | createCompletionItemKindMethod('sub'), 23 | createCompletionItemKindMethod('mul'), 24 | createCompletionItemKindMethod('pow'), 25 | createCompletionItemKindMethod('div'), 26 | createCompletionItemKindMethod('mod'), 27 | createCompletionItemKindMethod('eq'), 28 | createCompletionItemKindMethod('and'), 29 | createCompletionItemKindMethod('or'), 30 | createCompletionItemKindMethod('gt'), 31 | createCompletionItemKindMethod('lt'), 32 | 33 | createCompletionItemKindMethod('type'), 34 | createCompletionItemKindMethod('to_str'), 35 | createCompletionItemKindMethod('sleep'), 36 | createCompletionItemKindMethod('abort'), 37 | ]; 38 | } 39 | }, ':'); -------------------------------------------------------------------------------- /aiscript/intellisense/functions/Date.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/Date:$/).test(linePrefix)) { 8 | if (/(:|\.)[^)\s]*$/.test(linePrefix)) { 9 | return undefined; 10 | } 11 | 12 | const DateRoot = new CompletionItem('Date:'); 13 | DateRoot.kind = CompletionItemKind.Class; 14 | DateRoot.command = { command: 'editor.action.triggerSuggest', title: 'Re-trigger completions...' }; 15 | return [DateRoot]; 16 | } 17 | 18 | return [ 19 | createCompletionItemKindMethod('now'), 20 | createCompletionItemKindMethod('year'), 21 | createCompletionItemKindMethod('month'), 22 | createCompletionItemKindMethod('day'), 23 | createCompletionItemKindMethod('hour'), 24 | createCompletionItemKindMethod('minute'), 25 | createCompletionItemKindMethod('second'), 26 | createCompletionItemKindMethod('millisecond'), 27 | createCompletionItemKindMethod('parse'), 28 | createCompletionItemKindMethod('to_iso_str'), 29 | ]; 30 | } 31 | }, ':'); 32 | -------------------------------------------------------------------------------- /aiscript/intellisense/functions/Error.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/Error:$/).test(linePrefix)) { 8 | if (/(:|\.)[^)\s]*$/.test(linePrefix)) { 9 | return undefined; 10 | } 11 | 12 | const ErrorRoot = new CompletionItem('Error:'); 13 | ErrorRoot.kind = CompletionItemKind.Class; 14 | ErrorRoot.command = { command: 'editor.action.triggerSuggest', title: 'Re-trigger completions...' }; 15 | return [ErrorRoot]; 16 | } 17 | 18 | return [ 19 | createCompletionItemKindMethod('create'), 20 | ]; 21 | } 22 | }, ':'); -------------------------------------------------------------------------------- /aiscript/intellisense/functions/Json.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/Json:$/).test(linePrefix)) { 8 | if (/(:|\.)[^)\s]*$/.test(linePrefix)) { 9 | return undefined; 10 | } 11 | 12 | const JsonRoot = new CompletionItem('Json:'); 13 | JsonRoot.kind = CompletionItemKind.Class; 14 | JsonRoot.command = { command: 'editor.action.triggerSuggest', title: 'Re-trigger completions...' }; 15 | return [JsonRoot]; 16 | } 17 | 18 | return [ 19 | createCompletionItemKindMethod('stringify'), 20 | createCompletionItemKindMethod('parse'), 21 | createCompletionItemKindMethod('parsable'), 22 | ]; 23 | } 24 | }, ':'); -------------------------------------------------------------------------------- /aiscript/intellisense/functions/Math.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/Math:$/).test(linePrefix)) { 8 | if (/(:|\.)[^)\s]*$/.test(linePrefix)) { 9 | return undefined; 10 | } 11 | 12 | const MathRoot = new CompletionItem('Math:'); 13 | MathRoot.kind = CompletionItemKind.Class; 14 | MathRoot.command = { command: 'editor.action.triggerSuggest', title: 'Re-trigger completions...' }; 15 | return [MathRoot]; 16 | } 17 | 18 | return [ 19 | new CompletionItem('Infinity', CompletionItemKind.Value), 20 | new CompletionItem('E', CompletionItemKind.Value), 21 | new CompletionItem('LN2', CompletionItemKind.Value), 22 | new CompletionItem('LN10', CompletionItemKind.Value), 23 | new CompletionItem('LOG2E', CompletionItemKind.Value), 24 | new CompletionItem('LOG10E', CompletionItemKind.Value), 25 | new CompletionItem('PI', CompletionItemKind.Value), 26 | new CompletionItem('SQRT1_2', CompletionItemKind.Value), 27 | new CompletionItem('SQRT2', CompletionItemKind.Value), 28 | 29 | createCompletionItemKindMethod('abs'), 30 | createCompletionItemKindMethod('sign'), 31 | createCompletionItemKindMethod('round'), 32 | createCompletionItemKindMethod('ceil'), 33 | createCompletionItemKindMethod('floor'), 34 | createCompletionItemKindMethod('trunc'), 35 | createCompletionItemKindMethod('min'), 36 | createCompletionItemKindMethod('max'), 37 | createCompletionItemKindMethod('sqrt'), 38 | createCompletionItemKindMethod('cbrt'), 39 | createCompletionItemKindMethod('hypot'), 40 | 41 | createCompletionItemKindMethod('sin'), 42 | createCompletionItemKindMethod('cos'), 43 | createCompletionItemKindMethod('tan'), 44 | createCompletionItemKindMethod('asin'), 45 | createCompletionItemKindMethod('acos'), 46 | createCompletionItemKindMethod('atan'), 47 | createCompletionItemKindMethod('atan2'), 48 | 49 | createCompletionItemKindMethod('sinh'), 50 | createCompletionItemKindMethod('cosh'), 51 | createCompletionItemKindMethod('tanh'), 52 | createCompletionItemKindMethod('asinh'), 53 | createCompletionItemKindMethod('acosh'), 54 | createCompletionItemKindMethod('atanh'), 55 | 56 | createCompletionItemKindMethod('pow'), 57 | createCompletionItemKindMethod('exp'), 58 | createCompletionItemKindMethod('expm1'), 59 | createCompletionItemKindMethod('log'), 60 | createCompletionItemKindMethod('log1p'), 61 | createCompletionItemKindMethod('log10'), 62 | createCompletionItemKindMethod('log2'), 63 | 64 | createCompletionItemKindMethod('rnd'), 65 | createCompletionItemKindMethod('gen_rng'), 66 | 67 | createCompletionItemKindMethod('clz32'), 68 | createCompletionItemKindMethod('fround'), 69 | createCompletionItemKindMethod('imul'), 70 | ]; 71 | } 72 | }, ':'); -------------------------------------------------------------------------------- /aiscript/intellisense/functions/Num.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/Num:$/).test(linePrefix)) { 8 | if (/(:|\.)[^)\s]*$/.test(linePrefix)) { 9 | return undefined; 10 | } 11 | 12 | const NumRoot = new CompletionItem('Num:'); 13 | NumRoot.kind = CompletionItemKind.Class; 14 | NumRoot.command = { command: 'editor.action.triggerSuggest', title: 'Re-trigger completions...' }; 15 | return [NumRoot]; 16 | } 17 | 18 | return [ 19 | createCompletionItemKindMethod('to_hex'), 20 | createCompletionItemKindMethod('from_hex'), 21 | ]; 22 | } 23 | }, ':'); -------------------------------------------------------------------------------- /aiscript/intellisense/functions/Obj.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/Obj:$/).test(linePrefix)) { 8 | if (/(:|\.)[^)\s]*$/.test(linePrefix)) { 9 | return undefined; 10 | } 11 | 12 | const ObjRoot = new CompletionItem('Obj:'); 13 | ObjRoot.kind = CompletionItemKind.Class; 14 | ObjRoot.command = { command: 'editor.action.triggerSuggest', title: 'Re-trigger completions...' }; 15 | return [ObjRoot]; 16 | } 17 | 18 | return [ 19 | createCompletionItemKindMethod('keys'), 20 | createCompletionItemKindMethod('vals'), 21 | createCompletionItemKindMethod('kvs'), 22 | createCompletionItemKindMethod('get'), 23 | createCompletionItemKindMethod('set'), 24 | createCompletionItemKindMethod('has'), 25 | createCompletionItemKindMethod('copy'), 26 | createCompletionItemKindMethod('merge'), 27 | createCompletionItemKindMethod('pick'), 28 | ]; 29 | } 30 | }, ':'); -------------------------------------------------------------------------------- /aiscript/intellisense/functions/Str.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/Str:$/).test(linePrefix)) { 8 | if (/(:|\.)[^)\s]*$/.test(linePrefix)) { 9 | return undefined; 10 | } 11 | 12 | const StrRoot = new CompletionItem('Str:'); 13 | StrRoot.kind = CompletionItemKind.Class; 14 | StrRoot.command = { command: 'editor.action.triggerSuggest', title: 'Re-trigger completions...' }; 15 | return [StrRoot]; 16 | } 17 | 18 | return [ 19 | new CompletionItem('lf', CompletionItemKind.Value), 20 | 21 | createCompletionItemKindMethod('lt'), 22 | createCompletionItemKindMethod('gt'), 23 | createCompletionItemKindMethod('from_codepoint'), 24 | createCompletionItemKindMethod('from_unicode_codepoints'), 25 | createCompletionItemKindMethod('from_utf8_bytes'), 26 | ]; 27 | } 28 | }, ':'); -------------------------------------------------------------------------------- /aiscript/intellisense/functions/TopLevel.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (/(:|\.)[^)\s]*$/.test(linePrefix)) { 8 | return undefined; 9 | } 10 | 11 | return [ 12 | createCompletionItemKindMethod('print'), 13 | createCompletionItemKindMethod('readline'), 14 | ]; 15 | } 16 | }); -------------------------------------------------------------------------------- /aiscript/intellisense/functions/Uri.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/Uri:$/).test(linePrefix)) { 8 | if (/(:|\.)[^)\s]*$/.test(linePrefix)) { 9 | return undefined; 10 | } 11 | 12 | const UriRoot = new CompletionItem('Uri:'); 13 | UriRoot.kind = CompletionItemKind.Class; 14 | UriRoot.command = { command: 'editor.action.triggerSuggest', title: 'Re-trigger completions...' }; 15 | return [UriRoot]; 16 | } 17 | 18 | return [ 19 | createCompletionItemKindMethod('encode_full'), 20 | createCompletionItemKindMethod('encode_component'), 21 | createCompletionItemKindMethod('decode_full'), 22 | createCompletionItemKindMethod('decode_component'), 23 | ]; 24 | } 25 | }, ':'); -------------------------------------------------------------------------------- /aiscript/intellisense/functions/Util.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/Util:$/).test(linePrefix)) { 8 | if (/(:|\.)[^)\s]*$/.test(linePrefix)) { 9 | return undefined; 10 | } 11 | 12 | const MkRoot = new CompletionItem('Mk:'); 13 | MkRoot.kind = CompletionItemKind.Class; 14 | MkRoot.command = { command: 'editor.action.triggerSuggest', title: 'Re-trigger completions...' }; 15 | return [MkRoot]; 16 | } 17 | 18 | return [ 19 | createCompletionItemKindMethod('uuid'), 20 | ]; 21 | } 22 | }, ':'); -------------------------------------------------------------------------------- /aiscript/intellisense/misc/createCompletionItemKindFn.ts: -------------------------------------------------------------------------------- 1 | import { CompletionItem, CompletionItemKind } from "vscode"; 2 | 3 | export function createCompletionItemKindMethod(label: string, defaultVal?: string) { 4 | const c = new CompletionItem(label, CompletionItemKind.Method); 5 | c.insertText = defaultVal ?? `${label}()`; 6 | return c; 7 | } -------------------------------------------------------------------------------- /aiscript/intellisense/misskey/Components.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/Ui:(C:)?[^)\s]*$/).test(linePrefix)) { 8 | return undefined; 9 | } 10 | 11 | if ((/Ui:$/).test(linePrefix)) { 12 | const ComponentsRoot = new CompletionItem('C:'); 13 | ComponentsRoot.kind = CompletionItemKind.Class; 14 | ComponentsRoot.command = { command: 'editor.action.triggerSuggest', title: 'Re-trigger completions...' }; 15 | return [ComponentsRoot]; 16 | } 17 | 18 | return [ 19 | createCompletionItemKindMethod('container'), 20 | createCompletionItemKindMethod('text'), 21 | createCompletionItemKindMethod('mfm'), 22 | createCompletionItemKindMethod('textarea'), 23 | createCompletionItemKindMethod('textInput'), 24 | createCompletionItemKindMethod('numberInput'), 25 | createCompletionItemKindMethod('button'), 26 | createCompletionItemKindMethod('buttons'), 27 | createCompletionItemKindMethod('switch'), 28 | createCompletionItemKindMethod('select'), 29 | createCompletionItemKindMethod('folder'), 30 | createCompletionItemKindMethod('postFormButton'), 31 | createCompletionItemKindMethod('postForm'), 32 | ]; 33 | } 34 | }, ':'); -------------------------------------------------------------------------------- /aiscript/intellisense/misskey/Mk.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/Mk:$/).test(linePrefix)) { 8 | if (/(:|\.)[^)\s]*$/.test(linePrefix)) { 9 | return undefined; 10 | } 11 | 12 | const MkRoot = new CompletionItem('Mk:'); 13 | MkRoot.kind = CompletionItemKind.Class; 14 | MkRoot.command = { command: 'editor.action.triggerSuggest', title: 'Re-trigger completions...' }; 15 | return [MkRoot]; 16 | } 17 | 18 | return [ 19 | createCompletionItemKindMethod('dialog'), 20 | createCompletionItemKindMethod('confirm'), 21 | createCompletionItemKindMethod('api'), 22 | createCompletionItemKindMethod('save'), 23 | createCompletionItemKindMethod('load'), 24 | createCompletionItemKindMethod('url'), 25 | createCompletionItemKindMethod('nyaize'), 26 | ]; 27 | } 28 | }, ':'); 29 | -------------------------------------------------------------------------------- /aiscript/intellisense/misskey/Plugin.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/Plugin:$/).test(linePrefix)) { 8 | if (/(:|\.)[^)\s]*$/.test(linePrefix)) { 9 | return undefined; 10 | } 11 | 12 | const PluginRoot = new CompletionItem('Plugin:'); 13 | PluginRoot.kind = CompletionItemKind.Class; 14 | PluginRoot.command = { command: 'editor.action.triggerSuggest', title: 'Re-trigger completions...' }; 15 | return [PluginRoot]; 16 | } 17 | 18 | return [ 19 | new CompletionItem('config', CompletionItemKind.Constant), 20 | 21 | createCompletionItemKindMethod('register_post_form_action'), 22 | createCompletionItemKindMethod('register_user_action'), 23 | createCompletionItemKindMethod('register_note_action'), 24 | createCompletionItemKindMethod('register_note_view_interruptor'), 25 | createCompletionItemKindMethod('register_note_post_interruptor'), 26 | createCompletionItemKindMethod('register_page_view_interruptor'), 27 | createCompletionItemKindMethod('open_url'), 28 | ]; 29 | } 30 | }, ':'); -------------------------------------------------------------------------------- /aiscript/intellisense/misskey/TopLevel.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | 3 | export default languages.registerCompletionItemProvider('aiscript', { 4 | provideCompletionItems(document, position) { 5 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 6 | if (/(:|\.)[^)\s]*$/.test(linePrefix)) { 7 | return undefined; 8 | } 9 | 10 | return [ 11 | new CompletionItem('USER_ID', CompletionItemKind.Constant), 12 | new CompletionItem('USER_NAME', CompletionItemKind.Constant), 13 | new CompletionItem('USER_USERNAME', CompletionItemKind.Constant), 14 | new CompletionItem('CUSTOM_EMOJIS', CompletionItemKind.Constant), 15 | new CompletionItem('LOCALE', CompletionItemKind.Constant), 16 | new CompletionItem('SERVER_URL', CompletionItemKind.Constant), 17 | new CompletionItem('THIS_URL', CompletionItemKind.Constant), 18 | new CompletionItem('THIS_ID', CompletionItemKind.Constant), 19 | ]; 20 | } 21 | }); -------------------------------------------------------------------------------- /aiscript/intellisense/misskey/Ui.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/Ui:$/).test(linePrefix)) { 8 | if (/(:|\.)[^)\s]*$/.test(linePrefix)) { 9 | return undefined; 10 | } 11 | 12 | const MkRoot = new CompletionItem('Ui:'); 13 | MkRoot.kind = CompletionItemKind.Class; 14 | MkRoot.command = { command: 'editor.action.triggerSuggest', title: 'Re-trigger completions...' }; 15 | return [MkRoot]; 16 | } 17 | 18 | return [ 19 | new CompletionItem('root', CompletionItemKind.Constant), 20 | 21 | createCompletionItemKindMethod('patch'), 22 | createCompletionItemKindMethod('get'), 23 | createCompletionItemKindMethod('render'), 24 | ]; 25 | } 26 | }, ':'); -------------------------------------------------------------------------------- /aiscript/intellisense/primitive/array.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/\]\.$/).test(linePrefix)) { 8 | return undefined; 9 | } 10 | 11 | return [ 12 | new CompletionItem('len', CompletionItemKind.Variable), 13 | 14 | createCompletionItemKindMethod('push'), 15 | createCompletionItemKindMethod('unshift'), 16 | createCompletionItemKindMethod('pop'), 17 | createCompletionItemKindMethod('shift'), 18 | createCompletionItemKindMethod('concat'), 19 | createCompletionItemKindMethod('join'), 20 | createCompletionItemKindMethod('slice'), 21 | createCompletionItemKindMethod('incl'), 22 | createCompletionItemKindMethod('map'), 23 | createCompletionItemKindMethod('reduce'), 24 | createCompletionItemKindMethod('find'), 25 | createCompletionItemKindMethod('reverse'), 26 | createCompletionItemKindMethod('copy'), 27 | createCompletionItemKindMethod('sort'), 28 | createCompletionItemKindMethod('fill'), 29 | createCompletionItemKindMethod('repeat'), 30 | createCompletionItemKindMethod('index_of'), 31 | createCompletionItemKindMethod('every'), 32 | createCompletionItemKindMethod('some'), 33 | createCompletionItemKindMethod('splice'), 34 | createCompletionItemKindMethod('flat'), 35 | createCompletionItemKindMethod('flat_map'), 36 | createCompletionItemKindMethod('insert'), 37 | createCompletionItemKindMethod('remove'), 38 | createCompletionItemKindMethod('at'), 39 | ]; 40 | } 41 | }, '.'); 42 | -------------------------------------------------------------------------------- /aiscript/intellisense/primitive/number.ts: -------------------------------------------------------------------------------- 1 | import { languages } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/[0-9]\.$/).test(linePrefix)) { 8 | return undefined; 9 | } 10 | 11 | return [ 12 | createCompletionItemKindMethod('to_str'), 13 | ]; 14 | } 15 | }, '.'); -------------------------------------------------------------------------------- /aiscript/intellisense/primitive/string.ts: -------------------------------------------------------------------------------- 1 | import { languages, CompletionItem, CompletionItemKind } from 'vscode'; 2 | import { createCompletionItemKindMethod } from '../misc/createCompletionItemKindFn'; 3 | 4 | export default languages.registerCompletionItemProvider('aiscript', { 5 | provideCompletionItems(document, position) { 6 | const linePrefix = document.lineAt(position).text.slice(0, position.character); 7 | if (!(/(?='|"|`)('|"|`)\.$/).test(linePrefix)) { 8 | return undefined; 9 | } 10 | 11 | return [ 12 | new CompletionItem('len', CompletionItemKind.Variable), 13 | 14 | createCompletionItemKindMethod('to_num'), 15 | createCompletionItemKindMethod('pick'), 16 | createCompletionItemKindMethod('incl'), 17 | createCompletionItemKindMethod('slice'), 18 | createCompletionItemKindMethod('split'), 19 | createCompletionItemKindMethod('replace'), 20 | createCompletionItemKindMethod('index_of'), 21 | createCompletionItemKindMethod('trim'), 22 | createCompletionItemKindMethod('upper'), 23 | createCompletionItemKindMethod('lower'), 24 | createCompletionItemKindMethod('codepoint_at'), 25 | createCompletionItemKindMethod('charcode_at'), 26 | createCompletionItemKindMethod('to_arr'), 27 | createCompletionItemKindMethod('to_unicode_arr'), 28 | createCompletionItemKindMethod('to_unicode_codepoint_arr'), 29 | createCompletionItemKindMethod('to_char_arr'), 30 | createCompletionItemKindMethod('to_charcode_arr'), 31 | createCompletionItemKindMethod('to_utf8_byte_arr'), 32 | createCompletionItemKindMethod('pad_start'), 33 | createCompletionItemKindMethod('pad_end'), 34 | createCompletionItemKindMethod('starts_with'), 35 | createCompletionItemKindMethod('ends_with'), 36 | ]; 37 | } 38 | }, '.'); -------------------------------------------------------------------------------- /aiscript/intellisense/server/index.ts: -------------------------------------------------------------------------------- 1 | import("@aiscript-dev/aiscript-languageserver/cli"); 2 | -------------------------------------------------------------------------------- /aiscript/language-configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "comments": { 3 | // symbol used for single line comment. Remove this entry if your language does not support line comments 4 | "lineComment": "//", 5 | // symbols used for start and end a block comment. Remove this entry if your language does not support block comments 6 | "blockComment": [ "/*", "*/" ] 7 | }, 8 | // symbols used as brackets 9 | "brackets": [ 10 | ["{", "}"], 11 | ["[", "]"], 12 | ["(", ")"] 13 | ], 14 | // symbols that are auto closed when typing 15 | "autoClosingPairs": [ 16 | ["{", "}"], 17 | ["[", "]"], 18 | ["(", ")"], 19 | ["\"", "\""], 20 | ["'", "'"], 21 | ["`", "`"] 22 | ], 23 | // symbols that can be used to surround a selection 24 | "surroundingPairs": [ 25 | ["{", "}"], 26 | ["[", "]"], 27 | ["(", ")"], 28 | ["\"", "\""], 29 | ["'", "'"], 30 | ["`", "`"] 31 | ] 32 | } -------------------------------------------------------------------------------- /aiscript/syntaxes/aiscript.tmLanguage.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", 3 | "name": "aiscript", 4 | "displayName": "AiScript", 5 | "aliases": [ 6 | "is", 7 | "ais", 8 | "AiScript" 9 | ], 10 | "patterns": [ 11 | { 12 | "include": "#namespace" 13 | }, 14 | { 15 | "include": "#syntax" 16 | }, 17 | { 18 | "include": "#template-strings" 19 | } 20 | ], 21 | "repository": { 22 | "syntax": { 23 | "patterns": [ 24 | { 25 | "include": "#comments" 26 | }, 27 | { 28 | "include": "#functions" 29 | }, 30 | { 31 | "include": "#strings" 32 | }, 33 | { 34 | "include": "#declarations" 35 | }, 36 | { 37 | "include": "#numbers" 38 | }, 39 | { 40 | "include": "#keywords" 41 | }, 42 | { 43 | "include": "#operators" 44 | }, 45 | { 46 | "include": "#presets" 47 | }, 48 | { 49 | "include": "#labels" 50 | }, 51 | { 52 | "include": "#variables" 53 | } 54 | ] 55 | }, 56 | "declarations": { 57 | "patterns": [ 58 | { 59 | "name": "storage.type.aiscript", 60 | "match": "(@|true|false|null|exists)|(^#{3}(?= +\\{))|((var|let)(?= +))" 61 | } 62 | ] 63 | }, 64 | "keywords": { 65 | "patterns": [ 66 | { 67 | "name": "keyword.control.aiscript", 68 | "match": "(return|<:|break|if|elif|else|for|each|eval|loop|while|do|match)(?=[\\s(])" 69 | } 70 | ] 71 | }, 72 | "operators": { 73 | "patterns": [ 74 | { 75 | "name": "keyword.operator.aiscript", 76 | "match": "(\\+|\\-|\\*|\\*\\*|\\/|%|<<|>>|&&|\\|\\||\\^|~|<|>|<=|=>|!=|=)" 77 | }, 78 | { 79 | "name": "punctuation.accessor.aiscript", 80 | "match": "(:|\\.)" 81 | } 82 | ] 83 | }, 84 | "namespace": { 85 | "patterns": [ 86 | { 87 | "name": "meta.namespaceblock.aiscript", 88 | "match": "^(:{2})\\s?([a-zA-Z0-9_]+)\\s?\\{", 89 | "captures": { 90 | "1": { 91 | "name": "storage.type.aiscript" 92 | }, 93 | "2": { 94 | "name": "entity.name.class.aiscript" 95 | } 96 | } 97 | } 98 | ] 99 | }, 100 | "functions": { 101 | "patterns": [ 102 | { 103 | "name": "meta.classfunction.aiscript", 104 | "begin": "([A-Z][A-Za-z0-9_:]*(?=:):)*((?<=:)[a-zA-Z0-9_]+(?=\\())\\(", 105 | "beginCaptures": { 106 | "1": { 107 | "name": "meta.classnamechain.aiscript", 108 | "patterns": [ 109 | { 110 | "match": ":", 111 | "name": "keyword.operator.aiscript" 112 | }, 113 | { 114 | "name": "entity.name.class.aiscript", 115 | "match": "[^:]*" 116 | } 117 | ] 118 | }, 119 | "2": { 120 | "name": "entity.name.function.aiscript" 121 | } 122 | }, 123 | "patterns": [ 124 | { 125 | "include": "#syntax" 126 | }, 127 | { 128 | "include": "#template-strings" 129 | } 130 | ], 131 | "end": "\\)" 132 | }, 133 | { 134 | "name": "meta.function.aiscript", 135 | "begin": "[:.]?([a-zA-Z_][a-zA-Z0-9_]*)\\(", 136 | "beginCaptures": { 137 | "1": { 138 | "name": "entity.name.function.aiscript" 139 | } 140 | }, 141 | "patterns": [ 142 | { 143 | "include": "#syntax" 144 | }, 145 | { 146 | "include": "#template-strings" 147 | } 148 | ], 149 | "end": "\\)" 150 | } 151 | ] 152 | }, 153 | "strings": { 154 | "patterns": [ 155 | { 156 | "name": "string.quoted.single.aiscript", 157 | "begin": "'", 158 | "end": "'", 159 | "patterns": [ 160 | { 161 | "name": "constant.character.escape.aiscript", 162 | "match": "\\\\['\"\\\\]" 163 | } 164 | ] 165 | }, 166 | { 167 | "name": "string.quoted.double.aiscript", 168 | "begin": "\"", 169 | "end": "\"", 170 | "patterns": [ 171 | { 172 | "name": "constant.character.escape.aiscript", 173 | "match": "\\\\['\"\\\\]" 174 | } 175 | ] 176 | } 177 | ] 178 | }, 179 | "template-strings": { 180 | "patterns": [ 181 | { 182 | "name": "meta.template-string.aiscript", 183 | "begin": "`", 184 | "beginCaptures": { 185 | "0": { 186 | "name": "string.other.aiscript" 187 | } 188 | }, 189 | "end": "`", 190 | "endCaptures": { 191 | "0": { 192 | "name": "string.other.aiscript" 193 | } 194 | }, 195 | "patterns": [ 196 | { 197 | "name": "constant.character.escape.aiscript", 198 | "match": "\\\\['\"`\\\\{}]" 199 | }, 200 | { 201 | "name": "meta.string-template.aiscript", 202 | "begin": "\\{", 203 | "beginCaptures": { 204 | "0": { 205 | "name": "entity.name.tag.aiscript" 206 | } 207 | }, 208 | "end": "\\}", 209 | "endCaptures": { 210 | "0": { 211 | "name": "entity.name.tag.aiscript" 212 | } 213 | }, 214 | "patterns": [ 215 | { 216 | "include": "#syntax" 217 | } 218 | ] 219 | }, 220 | { 221 | "name": "string.other.aiscript", 222 | "match": "[^`{]+" 223 | } 224 | ] 225 | } 226 | ] 227 | }, 228 | "numbers": { 229 | "patterns": [ 230 | { 231 | "name": "constant.numeric.aiscript", 232 | "match": "-?[0-9]+" 233 | } 234 | ] 235 | }, 236 | "variables": { 237 | "patterns": [ 238 | { 239 | "name": "variable.other.readwrite.aiscript", 240 | "match": "[a-zA-Z][a-zA-Z0-9_]*" 241 | } 242 | ] 243 | }, 244 | "labels": { 245 | "patterns": [ 246 | { 247 | "name": "entity.name.label.aiscript", 248 | "match": "#[a-zA-Z][a-zA-Z0-9_]*" 249 | } 250 | ] 251 | }, 252 | "presets": { 253 | "patterns": [ 254 | { 255 | "name": "variable.other.constant.aiscript", 256 | "match": "USER_ID|USER_NAME|CUSTOM_EMOJIS|LOCALE|SERVER_URL|THIS_ID|THIS_URL" 257 | }, 258 | { 259 | "name": "meta.classconstant.aiscript", 260 | "match": "([A-Z][A-Za-z0-9_:]*(?=:):)*((?<=:)[a-zA-Z0-9_]+)", 261 | "captures": { 262 | "1": { 263 | "name": "meta.classnamechain.aiscript", 264 | "patterns": [ 265 | { 266 | "match": ":", 267 | "name": "punctuation.accessor.aiscript" 268 | }, 269 | { 270 | "name": "entity.name.class.aiscript", 271 | "match": "[^:]*" 272 | } 273 | ] 274 | }, 275 | "2": { 276 | "name": "variable.other.constant.aiscript" 277 | } 278 | } 279 | } 280 | ] 281 | }, 282 | "comments": { 283 | "patterns": [ 284 | { 285 | "name": "comment.line.double-slash.aiscript", 286 | "match": "//.*" 287 | }, 288 | { 289 | "name": "comment.block.aiscript", 290 | "begin": "/\\*", 291 | "end": "\\*/" 292 | } 293 | ] 294 | } 295 | }, 296 | "scopeName": "source.aiscript" 297 | } 298 | -------------------------------------------------------------------------------- /assets/aiscript_gd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aiscript-dev/aiscript-vscode/1dc7f60cda78d030dadfc518a33c472202b2ef67/assets/aiscript_gd.png -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "aiscript-vscode", 3 | "version": "0.1.16", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "aiscript-vscode", 9 | "version": "0.1.16", 10 | "dependencies": { 11 | "@aiscript-dev/aiscript-languageserver": "https://github.com/aiscript-dev/aiscript-languageserver/releases/download/0.1.6/aiscript-dev-aiscript-languageserver-0.1.6.tgz", 12 | "vscode-languageclient": "^9.0.1" 13 | }, 14 | "devDependencies": { 15 | "@types/node": "^22.10.2", 16 | "@types/vscode": "^1.83.0", 17 | "esbuild": "^0.24.2", 18 | "typescript": "^5.7.2" 19 | }, 20 | "engines": { 21 | "vscode": "^1.83.0" 22 | } 23 | }, 24 | "node_modules/@aiscript-dev/aiscript-languageserver": { 25 | "version": "0.1.6", 26 | "resolved": "https://github.com/aiscript-dev/aiscript-languageserver/releases/download/0.1.6/aiscript-dev-aiscript-languageserver-0.1.6.tgz", 27 | "integrity": "sha512-DBcHPHTeAVthlVi4lR4uFBYQU8AakaTYGMMVecGA8s8jFJPxscjkOgQ8/oOnJTcxbQx71V59ECQcoKahXMKcDw==", 28 | "license": "MIT", 29 | "dependencies": { 30 | "seedrandom": "3.0.5", 31 | "stringz": "2.1.0", 32 | "uuid": "9.0.1", 33 | "vscode-languageserver": "^9.0.1", 34 | "vscode-languageserver-textdocument": "^1.0.11" 35 | }, 36 | "bin": { 37 | "aiscript-languageserver": ".dist/features/cli/index.js" 38 | } 39 | }, 40 | "node_modules/@esbuild/aix-ppc64": { 41 | "version": "0.24.2", 42 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", 43 | "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", 44 | "cpu": [ 45 | "ppc64" 46 | ], 47 | "dev": true, 48 | "optional": true, 49 | "os": [ 50 | "aix" 51 | ], 52 | "engines": { 53 | "node": ">=18" 54 | } 55 | }, 56 | "node_modules/@esbuild/android-arm": { 57 | "version": "0.24.2", 58 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", 59 | "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", 60 | "cpu": [ 61 | "arm" 62 | ], 63 | "dev": true, 64 | "optional": true, 65 | "os": [ 66 | "android" 67 | ], 68 | "engines": { 69 | "node": ">=18" 70 | } 71 | }, 72 | "node_modules/@esbuild/android-arm64": { 73 | "version": "0.24.2", 74 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", 75 | "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", 76 | "cpu": [ 77 | "arm64" 78 | ], 79 | "dev": true, 80 | "optional": true, 81 | "os": [ 82 | "android" 83 | ], 84 | "engines": { 85 | "node": ">=18" 86 | } 87 | }, 88 | "node_modules/@esbuild/android-x64": { 89 | "version": "0.24.2", 90 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", 91 | "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", 92 | "cpu": [ 93 | "x64" 94 | ], 95 | "dev": true, 96 | "optional": true, 97 | "os": [ 98 | "android" 99 | ], 100 | "engines": { 101 | "node": ">=18" 102 | } 103 | }, 104 | "node_modules/@esbuild/darwin-arm64": { 105 | "version": "0.24.2", 106 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", 107 | "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", 108 | "cpu": [ 109 | "arm64" 110 | ], 111 | "dev": true, 112 | "optional": true, 113 | "os": [ 114 | "darwin" 115 | ], 116 | "engines": { 117 | "node": ">=18" 118 | } 119 | }, 120 | "node_modules/@esbuild/darwin-x64": { 121 | "version": "0.24.2", 122 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", 123 | "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", 124 | "cpu": [ 125 | "x64" 126 | ], 127 | "dev": true, 128 | "optional": true, 129 | "os": [ 130 | "darwin" 131 | ], 132 | "engines": { 133 | "node": ">=18" 134 | } 135 | }, 136 | "node_modules/@esbuild/freebsd-arm64": { 137 | "version": "0.24.2", 138 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", 139 | "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", 140 | "cpu": [ 141 | "arm64" 142 | ], 143 | "dev": true, 144 | "optional": true, 145 | "os": [ 146 | "freebsd" 147 | ], 148 | "engines": { 149 | "node": ">=18" 150 | } 151 | }, 152 | "node_modules/@esbuild/freebsd-x64": { 153 | "version": "0.24.2", 154 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", 155 | "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", 156 | "cpu": [ 157 | "x64" 158 | ], 159 | "dev": true, 160 | "optional": true, 161 | "os": [ 162 | "freebsd" 163 | ], 164 | "engines": { 165 | "node": ">=18" 166 | } 167 | }, 168 | "node_modules/@esbuild/linux-arm": { 169 | "version": "0.24.2", 170 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", 171 | "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", 172 | "cpu": [ 173 | "arm" 174 | ], 175 | "dev": true, 176 | "optional": true, 177 | "os": [ 178 | "linux" 179 | ], 180 | "engines": { 181 | "node": ">=18" 182 | } 183 | }, 184 | "node_modules/@esbuild/linux-arm64": { 185 | "version": "0.24.2", 186 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", 187 | "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", 188 | "cpu": [ 189 | "arm64" 190 | ], 191 | "dev": true, 192 | "optional": true, 193 | "os": [ 194 | "linux" 195 | ], 196 | "engines": { 197 | "node": ">=18" 198 | } 199 | }, 200 | "node_modules/@esbuild/linux-ia32": { 201 | "version": "0.24.2", 202 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", 203 | "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", 204 | "cpu": [ 205 | "ia32" 206 | ], 207 | "dev": true, 208 | "optional": true, 209 | "os": [ 210 | "linux" 211 | ], 212 | "engines": { 213 | "node": ">=18" 214 | } 215 | }, 216 | "node_modules/@esbuild/linux-loong64": { 217 | "version": "0.24.2", 218 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", 219 | "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", 220 | "cpu": [ 221 | "loong64" 222 | ], 223 | "dev": true, 224 | "optional": true, 225 | "os": [ 226 | "linux" 227 | ], 228 | "engines": { 229 | "node": ">=18" 230 | } 231 | }, 232 | "node_modules/@esbuild/linux-mips64el": { 233 | "version": "0.24.2", 234 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", 235 | "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", 236 | "cpu": [ 237 | "mips64el" 238 | ], 239 | "dev": true, 240 | "optional": true, 241 | "os": [ 242 | "linux" 243 | ], 244 | "engines": { 245 | "node": ">=18" 246 | } 247 | }, 248 | "node_modules/@esbuild/linux-ppc64": { 249 | "version": "0.24.2", 250 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", 251 | "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", 252 | "cpu": [ 253 | "ppc64" 254 | ], 255 | "dev": true, 256 | "optional": true, 257 | "os": [ 258 | "linux" 259 | ], 260 | "engines": { 261 | "node": ">=18" 262 | } 263 | }, 264 | "node_modules/@esbuild/linux-riscv64": { 265 | "version": "0.24.2", 266 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", 267 | "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", 268 | "cpu": [ 269 | "riscv64" 270 | ], 271 | "dev": true, 272 | "optional": true, 273 | "os": [ 274 | "linux" 275 | ], 276 | "engines": { 277 | "node": ">=18" 278 | } 279 | }, 280 | "node_modules/@esbuild/linux-s390x": { 281 | "version": "0.24.2", 282 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", 283 | "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", 284 | "cpu": [ 285 | "s390x" 286 | ], 287 | "dev": true, 288 | "optional": true, 289 | "os": [ 290 | "linux" 291 | ], 292 | "engines": { 293 | "node": ">=18" 294 | } 295 | }, 296 | "node_modules/@esbuild/linux-x64": { 297 | "version": "0.24.2", 298 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", 299 | "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", 300 | "cpu": [ 301 | "x64" 302 | ], 303 | "dev": true, 304 | "optional": true, 305 | "os": [ 306 | "linux" 307 | ], 308 | "engines": { 309 | "node": ">=18" 310 | } 311 | }, 312 | "node_modules/@esbuild/netbsd-arm64": { 313 | "version": "0.24.2", 314 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", 315 | "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", 316 | "cpu": [ 317 | "arm64" 318 | ], 319 | "dev": true, 320 | "optional": true, 321 | "os": [ 322 | "netbsd" 323 | ], 324 | "engines": { 325 | "node": ">=18" 326 | } 327 | }, 328 | "node_modules/@esbuild/netbsd-x64": { 329 | "version": "0.24.2", 330 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", 331 | "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", 332 | "cpu": [ 333 | "x64" 334 | ], 335 | "dev": true, 336 | "optional": true, 337 | "os": [ 338 | "netbsd" 339 | ], 340 | "engines": { 341 | "node": ">=18" 342 | } 343 | }, 344 | "node_modules/@esbuild/openbsd-arm64": { 345 | "version": "0.24.2", 346 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", 347 | "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", 348 | "cpu": [ 349 | "arm64" 350 | ], 351 | "dev": true, 352 | "optional": true, 353 | "os": [ 354 | "openbsd" 355 | ], 356 | "engines": { 357 | "node": ">=18" 358 | } 359 | }, 360 | "node_modules/@esbuild/openbsd-x64": { 361 | "version": "0.24.2", 362 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", 363 | "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", 364 | "cpu": [ 365 | "x64" 366 | ], 367 | "dev": true, 368 | "optional": true, 369 | "os": [ 370 | "openbsd" 371 | ], 372 | "engines": { 373 | "node": ">=18" 374 | } 375 | }, 376 | "node_modules/@esbuild/sunos-x64": { 377 | "version": "0.24.2", 378 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", 379 | "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", 380 | "cpu": [ 381 | "x64" 382 | ], 383 | "dev": true, 384 | "optional": true, 385 | "os": [ 386 | "sunos" 387 | ], 388 | "engines": { 389 | "node": ">=18" 390 | } 391 | }, 392 | "node_modules/@esbuild/win32-arm64": { 393 | "version": "0.24.2", 394 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", 395 | "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", 396 | "cpu": [ 397 | "arm64" 398 | ], 399 | "dev": true, 400 | "optional": true, 401 | "os": [ 402 | "win32" 403 | ], 404 | "engines": { 405 | "node": ">=18" 406 | } 407 | }, 408 | "node_modules/@esbuild/win32-ia32": { 409 | "version": "0.24.2", 410 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", 411 | "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", 412 | "cpu": [ 413 | "ia32" 414 | ], 415 | "dev": true, 416 | "optional": true, 417 | "os": [ 418 | "win32" 419 | ], 420 | "engines": { 421 | "node": ">=18" 422 | } 423 | }, 424 | "node_modules/@esbuild/win32-x64": { 425 | "version": "0.24.2", 426 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", 427 | "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", 428 | "cpu": [ 429 | "x64" 430 | ], 431 | "dev": true, 432 | "optional": true, 433 | "os": [ 434 | "win32" 435 | ], 436 | "engines": { 437 | "node": ">=18" 438 | } 439 | }, 440 | "node_modules/@types/node": { 441 | "version": "22.10.2", 442 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", 443 | "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", 444 | "dev": true, 445 | "dependencies": { 446 | "undici-types": "~6.20.0" 447 | } 448 | }, 449 | "node_modules/@types/vscode": { 450 | "version": "1.96.0", 451 | "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.96.0.tgz", 452 | "integrity": "sha512-qvZbSZo+K4ZYmmDuaodMbAa67Pl6VDQzLKFka6rq+3WUTY4Kro7Bwoi0CuZLO/wema0ygcmpwow7zZfPJTs5jg==", 453 | "dev": true 454 | }, 455 | "node_modules/balanced-match": { 456 | "version": "1.0.2", 457 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 458 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 459 | }, 460 | "node_modules/brace-expansion": { 461 | "version": "2.0.1", 462 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 463 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 464 | "dependencies": { 465 | "balanced-match": "^1.0.0" 466 | } 467 | }, 468 | "node_modules/char-regex": { 469 | "version": "1.0.2", 470 | "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", 471 | "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", 472 | "engines": { 473 | "node": ">=10" 474 | } 475 | }, 476 | "node_modules/esbuild": { 477 | "version": "0.24.2", 478 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", 479 | "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", 480 | "dev": true, 481 | "hasInstallScript": true, 482 | "bin": { 483 | "esbuild": "bin/esbuild" 484 | }, 485 | "engines": { 486 | "node": ">=18" 487 | }, 488 | "optionalDependencies": { 489 | "@esbuild/aix-ppc64": "0.24.2", 490 | "@esbuild/android-arm": "0.24.2", 491 | "@esbuild/android-arm64": "0.24.2", 492 | "@esbuild/android-x64": "0.24.2", 493 | "@esbuild/darwin-arm64": "0.24.2", 494 | "@esbuild/darwin-x64": "0.24.2", 495 | "@esbuild/freebsd-arm64": "0.24.2", 496 | "@esbuild/freebsd-x64": "0.24.2", 497 | "@esbuild/linux-arm": "0.24.2", 498 | "@esbuild/linux-arm64": "0.24.2", 499 | "@esbuild/linux-ia32": "0.24.2", 500 | "@esbuild/linux-loong64": "0.24.2", 501 | "@esbuild/linux-mips64el": "0.24.2", 502 | "@esbuild/linux-ppc64": "0.24.2", 503 | "@esbuild/linux-riscv64": "0.24.2", 504 | "@esbuild/linux-s390x": "0.24.2", 505 | "@esbuild/linux-x64": "0.24.2", 506 | "@esbuild/netbsd-arm64": "0.24.2", 507 | "@esbuild/netbsd-x64": "0.24.2", 508 | "@esbuild/openbsd-arm64": "0.24.2", 509 | "@esbuild/openbsd-x64": "0.24.2", 510 | "@esbuild/sunos-x64": "0.24.2", 511 | "@esbuild/win32-arm64": "0.24.2", 512 | "@esbuild/win32-ia32": "0.24.2", 513 | "@esbuild/win32-x64": "0.24.2" 514 | } 515 | }, 516 | "node_modules/minimatch": { 517 | "version": "5.1.6", 518 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 519 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 520 | "dependencies": { 521 | "brace-expansion": "^2.0.1" 522 | }, 523 | "engines": { 524 | "node": ">=10" 525 | } 526 | }, 527 | "node_modules/seedrandom": { 528 | "version": "3.0.5", 529 | "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", 530 | "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" 531 | }, 532 | "node_modules/semver": { 533 | "version": "7.6.3", 534 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", 535 | "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", 536 | "bin": { 537 | "semver": "bin/semver.js" 538 | }, 539 | "engines": { 540 | "node": ">=10" 541 | } 542 | }, 543 | "node_modules/stringz": { 544 | "version": "2.1.0", 545 | "resolved": "https://registry.npmjs.org/stringz/-/stringz-2.1.0.tgz", 546 | "integrity": "sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==", 547 | "dependencies": { 548 | "char-regex": "^1.0.2" 549 | } 550 | }, 551 | "node_modules/typescript": { 552 | "version": "5.7.2", 553 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", 554 | "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", 555 | "dev": true, 556 | "bin": { 557 | "tsc": "bin/tsc", 558 | "tsserver": "bin/tsserver" 559 | }, 560 | "engines": { 561 | "node": ">=14.17" 562 | } 563 | }, 564 | "node_modules/undici-types": { 565 | "version": "6.20.0", 566 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", 567 | "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", 568 | "dev": true 569 | }, 570 | "node_modules/uuid": { 571 | "version": "9.0.1", 572 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", 573 | "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", 574 | "funding": [ 575 | "https://github.com/sponsors/broofa", 576 | "https://github.com/sponsors/ctavan" 577 | ], 578 | "bin": { 579 | "uuid": "dist/bin/uuid" 580 | } 581 | }, 582 | "node_modules/vscode-jsonrpc": { 583 | "version": "8.2.0", 584 | "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", 585 | "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", 586 | "engines": { 587 | "node": ">=14.0.0" 588 | } 589 | }, 590 | "node_modules/vscode-languageclient": { 591 | "version": "9.0.1", 592 | "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-9.0.1.tgz", 593 | "integrity": "sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==", 594 | "dependencies": { 595 | "minimatch": "^5.1.0", 596 | "semver": "^7.3.7", 597 | "vscode-languageserver-protocol": "3.17.5" 598 | }, 599 | "engines": { 600 | "vscode": "^1.82.0" 601 | } 602 | }, 603 | "node_modules/vscode-languageserver": { 604 | "version": "9.0.1", 605 | "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", 606 | "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", 607 | "dependencies": { 608 | "vscode-languageserver-protocol": "3.17.5" 609 | }, 610 | "bin": { 611 | "installServerIntoExtension": "bin/installServerIntoExtension" 612 | } 613 | }, 614 | "node_modules/vscode-languageserver-protocol": { 615 | "version": "3.17.5", 616 | "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", 617 | "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", 618 | "dependencies": { 619 | "vscode-jsonrpc": "8.2.0", 620 | "vscode-languageserver-types": "3.17.5" 621 | } 622 | }, 623 | "node_modules/vscode-languageserver-textdocument": { 624 | "version": "1.0.12", 625 | "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", 626 | "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==" 627 | }, 628 | "node_modules/vscode-languageserver-types": { 629 | "version": "3.17.5", 630 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", 631 | "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" 632 | } 633 | } 634 | } 635 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "aiscript-vscode", 3 | "publisher": "aiscript-dev", 4 | "displayName": "AiScript Highlighting", 5 | "description": "Add support for AiScript", 6 | "icon": "./assets/aiscript_gd.png", 7 | "repository": { 8 | "type": "git", 9 | "url": "https://github.com/aiscript-dev/aiscript-vscode" 10 | }, 11 | "version": "0.1.16", 12 | "engines": { 13 | "vscode": "^1.83.0" 14 | }, 15 | "categories": [ 16 | "Programming Languages" 17 | ], 18 | "main": "./dist/extension.js", 19 | "activationEvents": [ 20 | "onLanguage:aiscript" 21 | ], 22 | "scripts": { 23 | "vscode:prepublish": "npm run clean && npm run esbuild-base -- --minify", 24 | "esbuild-base": "esbuild ./aiscript/intellisense/extension.ts --bundle --outfile=dist/extension.js --external:vscode --format=cjs --platform=node", 25 | "esbuild": "npm run clean && npm run esbuild-base -- --sourcemap", 26 | "esbuild-watch": "npm run clean && npm run esbuild-base -- --sourcemap --watch", 27 | "build": "npm run clean && tsc -p ./", 28 | "watch": "npm run clean && tsc -watch -p ./", 29 | "clean": "node ./scripts/clean.js" 30 | }, 31 | "contributes": { 32 | "languages": [ 33 | { 34 | "id": "aiscript", 35 | "aliases": [ 36 | "AiScript", 37 | "aiscript" 38 | ], 39 | "extensions": [ 40 | ".is", 41 | ".ais" 42 | ], 43 | "icon": { 44 | "light": "./assets/aiscript_gd.png", 45 | "dark": "./assets/aiscript_gd.png" 46 | }, 47 | "configuration": "./aiscript/language-configuration.json" 48 | } 49 | ], 50 | "grammars": [ 51 | { 52 | "language": "aiscript", 53 | "scopeName": "source.aiscript", 54 | "path": "./aiscript/syntaxes/aiscript.tmLanguage.json" 55 | } 56 | ] 57 | }, 58 | "devDependencies": { 59 | "@types/node": "^22.10.2", 60 | "@types/vscode": "^1.83.0", 61 | "esbuild": "^0.24.2", 62 | "typescript": "^5.7.2" 63 | }, 64 | "dependencies": { 65 | "@aiscript-dev/aiscript-languageserver": "https://github.com/aiscript-dev/aiscript-languageserver/releases/download/0.1.6/aiscript-dev-aiscript-languageserver-0.1.6.tgz", 66 | "vscode-languageclient": "^9.0.1" 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /readme-assets/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aiscript-dev/aiscript-vscode/1dc7f60cda78d030dadfc518a33c472202b2ef67/readme-assets/screenshot.png -------------------------------------------------------------------------------- /scripts/clean.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | 3 | (async () => { 4 | fs.rmSync(__dirname + '/../dist', { recursive: true, force: true }); 5 | })(); 6 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "Node16", 4 | "target": "es2020", 5 | "lib": ["es2020"], 6 | "outDir": "dist", 7 | "sourceMap": true, 8 | "strict": true, 9 | "rootDir": "aiscript/intellisense" 10 | }, 11 | "exclude": [ 12 | "node_modules", 13 | ".vscode-test" 14 | ] 15 | } --------------------------------------------------------------------------------