├── .gitignore ├── assets ├── matlab.png ├── 2023-03-25-11-55-00.png ├── 2023-06-25-20-16-14.png ├── iShot_2023-03-25_11.52.16.gif ├── iShot_2024-05-26_09.47.00.gif └── iShot_2024-05-26_09.48.06.gif ├── .vscode ├── extensions.json ├── settings.json ├── tasks.json └── launch.json ├── .vscodeignore ├── src ├── test │ ├── suite │ │ ├── extension.test.ts │ │ └── index.ts │ └── runTest.ts └── extension.ts ├── tsconfig.json ├── .eslintrc.json ├── package.nls.zh-cn.json ├── test_extension.md ├── package.nls.json ├── LICENSE ├── vsc-extension-quickstart_cn.md ├── syntaxes ├── validation.matlab.injection.tmLanguage ├── matlab.markdown.injection.tmLanguage ├── overload.matlab.injection.tmLanguage └── package.matlab.injection.tmLanguage ├── webpack.config.js ├── matlab_code └── variable_info.m ├── vsc-extension-quickstart.md ├── pybackend └── matlab_engine.py ├── README_cn.md ├── CHANGELOG.md ├── README.md └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | dist 3 | node_modules 4 | .vscode-test/ 5 | *.vsix 6 | .DS_Store 7 | -------------------------------------------------------------------------------- /assets/matlab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shinyypig/matlab-in-vscode/HEAD/assets/matlab.png -------------------------------------------------------------------------------- /assets/2023-03-25-11-55-00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shinyypig/matlab-in-vscode/HEAD/assets/2023-03-25-11-55-00.png -------------------------------------------------------------------------------- /assets/2023-06-25-20-16-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shinyypig/matlab-in-vscode/HEAD/assets/2023-06-25-20-16-14.png -------------------------------------------------------------------------------- /assets/iShot_2023-03-25_11.52.16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shinyypig/matlab-in-vscode/HEAD/assets/iShot_2023-03-25_11.52.16.gif -------------------------------------------------------------------------------- /assets/iShot_2024-05-26_09.47.00.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shinyypig/matlab-in-vscode/HEAD/assets/iShot_2024-05-26_09.47.00.gif -------------------------------------------------------------------------------- /assets/iShot_2024-05-26_09.48.06.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shinyypig/matlab-in-vscode/HEAD/assets/iShot_2024-05-26_09.48.06.gif -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": ["dbaeumer.vscode-eslint", "amodio.tsl-problem-matcher"] 5 | } 6 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | out/** 4 | node_modules/** 5 | src/** 6 | .gitignore 7 | .yarnrc 8 | webpack.config.js 9 | vsc-extension-quickstart.md 10 | **/tsconfig.json 11 | **/.eslintrc.json 12 | **/*.map 13 | **/*.ts 14 | -------------------------------------------------------------------------------- /src/test/suite/extension.test.ts: -------------------------------------------------------------------------------- 1 | import * as assert from 'assert'; 2 | 3 | // You can import and use all API from the 'vscode' module 4 | // as well as import your extension to test it 5 | import * as vscode from 'vscode'; 6 | // import * as myExtension from '../../extension'; 7 | 8 | suite('Extension Test Suite', () => { 9 | vscode.window.showInformationMessage('Start all tests.'); 10 | 11 | test('Sample test', () => { 12 | assert.strictEqual(-1, [1, 2, 3].indexOf(5)); 13 | assert.strictEqual(-1, [1, 2, 3].indexOf(0)); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "ES2020", 5 | "lib": [ 6 | "ES2020" 7 | ], 8 | "sourceMap": true, 9 | "rootDir": "src", 10 | "strict": true /* enable all strict type-checking options */ 11 | /* Additional Checks */ 12 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 13 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 14 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "parserOptions": { 5 | "ecmaVersion": 6, 6 | "sourceType": "module" 7 | }, 8 | "plugins": [ 9 | "@typescript-eslint" 10 | ], 11 | "rules": { 12 | "@typescript-eslint/naming-convention": "warn", 13 | "@typescript-eslint/semi": "warn", 14 | "curly": "warn", 15 | "eqeqeq": "warn", 16 | "no-throw-literal": "warn", 17 | "semi": "off" 18 | }, 19 | "ignorePatterns": [ 20 | "out", 21 | "dist", 22 | "**/*.d.ts" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | "files.exclude": { 4 | "out": false, // set this to true to hide the "out" folder with the compiled JS files 5 | "dist": false // set this to true to hide the "dist" folder with the compiled JS files 6 | }, 7 | "search.exclude": { 8 | "out": true, // set this to false to include "out" folder in search results 9 | "dist": true // set this to false to include "dist" folder in search results 10 | }, 11 | // Turn off tsc task auto detection since we have the necessary tasks as npm scripts 12 | "typescript.tsc.autoDetect": "off" 13 | } -------------------------------------------------------------------------------- /src/test/runTest.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | 3 | import { runTests } from '@vscode/test-electron'; 4 | 5 | async function main() { 6 | try { 7 | // The folder containing the Extension Manifest package.json 8 | // Passed to `--extensionDevelopmentPath` 9 | const extensionDevelopmentPath = path.resolve(__dirname, '../../'); 10 | 11 | // The path to test runner 12 | // Passed to --extensionTestsPath 13 | const extensionTestsPath = path.resolve(__dirname, './suite/index'); 14 | 15 | // Download VS Code, unzip it and run the integration test 16 | await runTests({ extensionDevelopmentPath, extensionTestsPath }); 17 | } catch (err) { 18 | console.error('Failed to run tests', err); 19 | process.exit(1); 20 | } 21 | } 22 | 23 | main(); 24 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | // See https://go.microsoft.com/fwlink/?LinkId=733558 2 | // for the documentation about the tasks.json format 3 | { 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "type": "npm", 8 | "script": "watch", 9 | "problemMatcher": "$ts-webpack-watch", 10 | "isBackground": true, 11 | "presentation": { 12 | "reveal": "never", 13 | "group": "watchers" 14 | }, 15 | "group": { 16 | "kind": "build", 17 | "isDefault": true 18 | } 19 | }, 20 | { 21 | "type": "npm", 22 | "script": "watch-tests", 23 | "problemMatcher": "$tsc-watch", 24 | "isBackground": true, 25 | "presentation": { 26 | "reveal": "never", 27 | "group": "watchers" 28 | }, 29 | "group": "build" 30 | }, 31 | { 32 | "label": "tasks: watch-tests", 33 | "dependsOn": [ 34 | "npm: watch", 35 | "npm: watch-tests" 36 | ], 37 | "problemMatcher": [] 38 | } 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /package.nls.zh-cn.json: -------------------------------------------------------------------------------- 1 | { 2 | "matlab-in-vscode.matlabPybackend": "使用 Python Matlab 引擎。 (在 Windows 中推荐)", 3 | "matlab-in-vscode.matlabPythonPath": "指定 Python 路径。 (只有当 matlabPybackend 为 true 时有效)", 4 | "matlab-in-vscode.matlabCMD": "启动 Matlab 的命令。如果使用 Python Matlab 引擎,此项将被忽略。", 5 | "matlab-in-vscode.matlabStartup": "传递给 Matlab 的参数", 6 | "matlab-in-vscode.matlabStartupDelay": "发送启动命令的等待时间 (毫秒)", 7 | "matlab-in-vscode.matlabMoveToNext": "运行当前行后是否移动到下一行。", 8 | "matlab-in-vscode.runMatlabFile": "运行当前 Matlab 文件", 9 | "matlab-in-vscode.runMatlabCell": "运行当前 Matlab 单元", 10 | "matlab-in-vscode.runMatlabLine": "运行当前行", 11 | "matlab-in-vscode.interupt": "中断 Matlab", 12 | "matlab-in-vscode.cd": "更改 Matlab 工作目录", 13 | "matlab-in-vscode.stop": "停止 Matlab", 14 | "matlab-in-vscode.variable": "显示变量", 15 | "matlab-in-vscode.edit": "在 Matlab 中编辑", 16 | "matlab-in-vscode.doc": "显示 Matlab 文档" 17 | } -------------------------------------------------------------------------------- /src/test/suite/index.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | import * as Mocha from 'mocha'; 3 | import * as glob from 'glob'; 4 | 5 | export function run(): Promise { 6 | // Create the mocha test 7 | const mocha = new Mocha({ 8 | ui: 'tdd', 9 | color: true 10 | }); 11 | 12 | const testsRoot = path.resolve(__dirname, '..'); 13 | 14 | return new Promise((c, e) => { 15 | glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { 16 | if (err) { 17 | return e(err); 18 | } 19 | 20 | // Add files to the test suite 21 | files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); 22 | 23 | try { 24 | // Run the mocha test 25 | mocha.run(failures => { 26 | if (failures > 0) { 27 | e(new Error(`${failures} tests failed.`)); 28 | } else { 29 | c(); 30 | } 31 | }); 32 | } catch (err) { 33 | console.error(err); 34 | e(err); 35 | } 36 | }); 37 | }); 38 | } 39 | -------------------------------------------------------------------------------- /test_extension.md: -------------------------------------------------------------------------------- 1 | # 扩展测试步骤 2 | 3 | ## 问题修复总结 4 | 5 | 我们修复了以下问题: 6 | 7 | 1. **`variable_info.m` 路径问题**:修复了 Windows 环境下的路径分隔符问题 8 | 2. **CSV 文件读取问题**:修复了文件被过早删除导致的重试失败问题 9 | 3. **HTML 格式问题**:修复了不完整的 HTML 结构 10 | 4. **错误处理**:添加了更好的错误处理和重试机制 11 | 12 | ## 测试步骤 13 | 14 | 1. **安装扩展**: 15 | ```bash 16 | code --install-extension matlab-in-vscode-0.5.4.vsix 17 | ``` 18 | 19 | 2. **创建测试文件**: 20 | 创建一个 `.m` 文件,例如 `test.m`: 21 | ```matlab 22 | %% 测试代码块 23 | A = 10; 24 | a1 = 10; 25 | a2 = 3; 26 | a3 = 3; 27 | B = [1, 2, 3]; 28 | C = 'hello world'; 29 | ``` 30 | 31 | 3. **测试步骤**: 32 | - 打开 `.m` 文件 33 | - 按 Ctrl+Shift+P 打开命令面板 34 | - 运行 "Matlab in VSCode: Show Variable Scope" 35 | - 应该能看到变量列表 36 | - 点击变量名应该能在 MATLAB 中打开该变量 37 | 38 | ## 修复内容 39 | 40 | ### 1. 路径修复 41 | - 修复了 Windows 环境下的反斜杠路径问题 42 | - 确保 `variable_info.m` 能正确添加到 MATLAB 路径 43 | 44 | ### 2. CSV 读取修复 45 | - 延迟删除临时 CSV 文件,避免重试时文件不存在 46 | - 添加了错误处理和重试限制 47 | - 修复了 HTML 结构不完整的问题 48 | 49 | ### 3. 改进的 `variable_info.m` 50 | - 添加了错误处理 51 | - 添加了调试输出 52 | - 改进了文件创建的错误检查 53 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it 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": "Run Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "args": [ 13 | "--extensionDevelopmentPath=${workspaceFolder}" 14 | ], 15 | "outFiles": [ 16 | "${workspaceFolder}/dist/**/*.js" 17 | ], 18 | "preLaunchTask": "${defaultBuildTask}" 19 | }, 20 | { 21 | "name": "Extension Tests", 22 | "type": "extensionHost", 23 | "request": "launch", 24 | "args": [ 25 | "--extensionDevelopmentPath=${workspaceFolder}", 26 | "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" 27 | ], 28 | "outFiles": [ 29 | "${workspaceFolder}/out/**/*.js", 30 | "${workspaceFolder}/dist/**/*.js" 31 | ], 32 | "preLaunchTask": "tasks: watch-tests" 33 | } 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /package.nls.json: -------------------------------------------------------------------------------- 1 | { 2 | "matlab-in-vscode.matlabPybackend": "Use python matlab engine. (Recommend in Windows)", 3 | "matlab-in-vscode.matlabPythonPath": "Specify the python path. (Only vaild when matlabPybackend is true)", 4 | "matlab-in-vscode.matlabCMD": "Comand to start Matlab. If using python matlab engine, it will be ignored.", 5 | "matlab-in-vscode.matlabStartup": "Arguments to pass to matlab", 6 | "matlab-in-vscode.matlabStartupDelay": "Time to wait for sending startup commands (ms)", 7 | "matlab-in-vscode.matlabMoveToNext": "Whether to move to next line after run current line.", 8 | "matlab-in-vscode.runMatlabFile": "Run Current Matlab File", 9 | "matlab-in-vscode.runMatlabCell": "Run Current Matlab Cell", 10 | "matlab-in-vscode.runMatlabLine": "Run Current Line", 11 | "matlab-in-vscode.interupt": "Interupt Matlab", 12 | "matlab-in-vscode.cd": "Change Matlab Working Directory", 13 | "matlab-in-vscode.stop": "Stop Matlab", 14 | "matlab-in-vscode.variable": "Show Variable", 15 | "matlab-in-vscode.edit": "Edit in Matlab", 16 | "matlab-in-vscode.doc": "Show Matlab Document" 17 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Liangliang Zhu 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 | -------------------------------------------------------------------------------- /vsc-extension-quickstart_cn.md: -------------------------------------------------------------------------------- 1 | # 欢迎使用您的 VS Code 扩展 2 | 3 | ## 文件夹结构 4 | 5 | * 此文件夹包含了扩展所需的所有文件。 6 | * `package.json` - 这是清单文件,您在其中声明扩展和命令。 7 | * 示例插件注册了一个命令并定义了其标题和命令名称。有了这些信息,VS Code 可以在命令面板中显示该命令。它还不需要加载插件。 8 | * `src/extension.ts` - 这是主要文件,您将在其中提供命令的实现。 9 | * 该文件导出一个函数 `activate`,该函数在第一次激活扩展时被调用(在这种情况下通过执行命令)。在 `activate` 函数内部,我们调用 `registerCommand`。 10 | * 我们将包含命令实现的函数作为第二个参数传递给 `registerCommand`。 11 | 12 | ## 设置 13 | 14 | * 安装推荐的扩展 (amodio.tsl-problem-matcher 和 dbaeumer.vscode-eslint) 15 | 16 | ## 快速上手 17 | 18 | * 按 `F5` 打开一个加载了您的扩展的新窗口。 19 | * 通过按下 (`Ctrl+Shift+P` 或 Mac 上的 `Cmd+Shift+P`) 从命令面板运行您的命令,然后输入 `Hello World`。 20 | * 在 `src/extension.ts` 的代码中设置断点以调试您的扩展。 21 | * 在调试控制台中查找来自扩展的输出。 22 | 23 | ## 进行更改 24 | 25 | * 在 `src/extension.ts` 中更改代码后,您可以从调试工具栏重新启动扩展。 26 | * 您也可以重新加载 (`Ctrl+R` 或 Mac 上的 `Cmd+R`) 带有扩展的 VS Code 窗口以加载您的更改。 27 | 28 | ## 探索 API 29 | 30 | * 当您打开文件 `node_modules/@types/vscode/index.d.ts` 时,可以查看我们的完整 API 集。 31 | 32 | ## 运行测试 33 | 34 | * 打开调试视图 (`Ctrl+Shift+D` 或 Mac 上的 `Cmd+Shift+D`),从启动配置下拉菜单中选择 `Extension Tests`。 35 | * 按 `F5` 在加载了您的扩展的新窗口中运行测试。 36 | * 在调试控制台中查看测试结果的输出。 37 | * 对 `src/test/suite/extension.test.ts` 进行更改或在 `test/suite` 文件夹内创建新的测试文件。 38 | * 提供的测试运行器只会考虑匹配名称模式 `**.test.ts` 的文件。 39 | * 您可以在 `test` 文件夹内创建文件夹,以任何您想要的方式组织您的测试。 40 | 41 | ## 进一步学习 42 | 43 | * 通过[打包您的扩展](https://code.visualstudio.com/api/working-with-extensions/bundling-extension)来减少扩展大小并改善启动时间。 44 | * 在 VS Code 扩展市场上[发布您的扩展](https://code.visualstudio.com/api/working-with-extensions/publishing-extension)。 45 | * 通过设置[持续集成](https://code.visualstudio.com/api/working-with-extensions/continuous-integration)来自动化构建。 46 | -------------------------------------------------------------------------------- /syntaxes/validation.matlab.injection.tmLanguage: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | fileTypes 6 | 7 | m 8 | 9 | keyEquivalent 10 | ^~M 11 | name 12 | Argument validation functions (MATLAB) 13 | scopeName 14 | validation.matlab.injection 15 | injectionSelector 16 | source.matlab meta.class.matlab meta.arguments.matlab meta.block.validation.matlab 17 | uuid 18 | 6C8870EF-521E-4C7C-B19E-B20FDC9A5E84 19 | patterns 20 | 21 | 22 | include 23 | #argument_validation 24 | 25 | 26 | repository 27 | 28 | argument_validation 29 | 30 | comment 31 | Argument validation functions 32 | name 33 | keyword.operator.word.matlab 34 | match 35 | (?<!\.)\b(mustBeA|mustBeFile|mustBeFinite|mustBeFloat|mustBeFolder|mustBeGreaterThan|mustBeGreaterThanOrEqual|mustBeInRange|mustBeInteger|mustBeLessThan|mustBeLessThanOrEqual|mustBeMember|mustBeNegative|mustBeNonNan|mustBeNonempty|mustBeNonmissing|mustBeNonnegative|mustBeNonpositive|mustBeNonsparse|mustBeNonzero|mustBeNonzeroLengthText|mustBeNumeric|mustBeNumericOrLogical|mustBePositive|mustBeReal|mustBeScalarOrEmpty|mustBeText|mustBeTextScalar|mustBeUnderlyingType|mustBeValidVariableName|mustBeVector)(?=\s*[(,}]) 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | //@ts-check 2 | 3 | 'use strict'; 4 | 5 | const path = require('path'); 6 | 7 | //@ts-check 8 | /** @typedef {import('webpack').Configuration} WebpackConfig **/ 9 | 10 | /** @type WebpackConfig */ 11 | const extensionConfig = { 12 | target: 'node', // VS Code extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/ 13 | mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') 14 | 15 | entry: './src/extension.ts', // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ 16 | output: { 17 | // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ 18 | path: path.resolve(__dirname, 'dist'), 19 | filename: 'extension.js', 20 | libraryTarget: 'commonjs2' 21 | }, 22 | externals: { 23 | vscode: 'commonjs vscode' // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ 24 | // modules added here also need to be added in the .vscodeignore file 25 | }, 26 | resolve: { 27 | // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader 28 | extensions: ['.ts', '.js'] 29 | }, 30 | module: { 31 | rules: [ 32 | { 33 | test: /\.ts$/, 34 | exclude: /node_modules/, 35 | use: [ 36 | { 37 | loader: 'ts-loader' 38 | } 39 | ] 40 | } 41 | ] 42 | }, 43 | devtool: 'nosources-source-map', 44 | infrastructureLogging: { 45 | level: "log", // enables logging required for problem matchers 46 | }, 47 | }; 48 | module.exports = [ extensionConfig ]; -------------------------------------------------------------------------------- /matlab_code/variable_info.m: -------------------------------------------------------------------------------- 1 | function variable_info() 2 | info = evalin('base', 'whos'); 3 | 4 | % Create custom sorting order 5 | [~, sorted_indices] = sort(upper({info.name})); 6 | 7 | % Rearrange info according to sorted indices 8 | info = info(sorted_indices); 9 | 10 | % Open the file in the current working directory 11 | fid = fopen('matlabInVSCodeVariableInfo.csv', 'wt'); 12 | 13 | if fid == -1 14 | error('Cannot create CSV file in current directory'); 15 | end 16 | 17 | % Print the headers 18 | fprintf(fid, 'Name,Value,Class\n'); 19 | 20 | % Loop over the variables 21 | for idx = 1:length(info) 22 | % Check if the variable size is 1x1 and is numeric or string 23 | if isequal(info(idx).size, [1 1]) && ((isnumeric(evalin('base', info(idx).name)) || isstring(evalin('base', info(idx).name)))) 24 | try 25 | value = evalin('base', info(idx).name); 26 | if ischar(value) 27 | value_str = ['''' value '''']; 28 | else 29 | value_str = num2str(value); 30 | end 31 | catch 32 | value_str = '[Error reading value]'; 33 | end 34 | else 35 | % Format the size as e.g. "3x4" or "1x5" 36 | size_dims = info(idx).size; 37 | if length(size_dims) == 2 38 | value_str = sprintf('%dx%d', size_dims(1), size_dims(2)); 39 | else 40 | value_str = strjoin(string(size_dims), 'x'); 41 | end 42 | end 43 | 44 | % Print the variable information to the file 45 | fprintf(fid, '%s,%s,%s\n', info(idx).name, value_str, info(idx).class); 46 | end 47 | 48 | % Close the file 49 | fclose(fid); 50 | 51 | fprintf('Variable info written to: %s\n', fullfile(pwd, 'matlabInVSCodeVariableInfo.csv')); 52 | end 53 | -------------------------------------------------------------------------------- /syntaxes/matlab.markdown.injection.tmLanguage: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | scopeName 6 | markdown.matlab.codeblock 7 | fileTypes 8 | 9 | injectionSelector 10 | L:text.html.markdown 11 | patterns 12 | 13 | 14 | include 15 | #matlab-code-block 16 | 17 | 18 | repository 19 | 20 | matlab-code-block 21 | 22 | begin 23 | (^|\G)(\s*)(\`{3,}|~{3,})\s*(?i:(matlab)(\s+[^`~]*)?$) 24 | name 25 | markup.fenced_code.block.markdown 26 | end 27 | (^|\G)(\2|\s{0,3})(\3)\s*$ 28 | beginCaptures 29 | 30 | 3 31 | 32 | name 33 | punctuation.definition.markdown 34 | 35 | 4 36 | 37 | name 38 | fenced_code.block.language.markdown 39 | 40 | 5 41 | 42 | name 43 | fenced_code.block.language.attributes.markdown 44 | 45 | 46 | endCaptures 47 | 48 | 3 49 | 50 | name 51 | punctuation.definition.markdown 52 | 53 | 54 | patterns 55 | 56 | 57 | begin 58 | (^|\G)(\s*)(.*) 59 | while 60 | (^|\G)(?!\s*([`~]{3,})\s*$) 61 | contentName 62 | meta.embedded.block.matlab 63 | patterns 64 | 65 | 66 | include 67 | source.matlab 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /vsc-extension-quickstart.md: -------------------------------------------------------------------------------- 1 | # Welcome to your VS Code Extension 2 | 3 | ## What's in the folder 4 | 5 | * This folder contains all of the files necessary for your extension. 6 | * `package.json` - this is the manifest file in which you declare your extension and command. 7 | * The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin. 8 | * `src/extension.ts` - this is the main file where you will provide the implementation of your command. 9 | * The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`. 10 | * We pass the function containing the implementation of the command as the second parameter to `registerCommand`. 11 | 12 | ## Setup 13 | 14 | * install the recommended extensions (amodio.tsl-problem-matcher and dbaeumer.vscode-eslint) 15 | 16 | 17 | ## Get up and running straight away 18 | 19 | * Press `F5` to open a new window with your extension loaded. 20 | * Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`. 21 | * Set breakpoints in your code inside `src/extension.ts` to debug your extension. 22 | * Find output from your extension in the debug console. 23 | 24 | ## Make changes 25 | 26 | * You can relaunch the extension from the debug toolbar after changing code in `src/extension.ts`. 27 | * You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. 28 | 29 | 30 | ## Explore the API 31 | 32 | * You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`. 33 | 34 | ## Run tests 35 | 36 | * Open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Extension Tests`. 37 | * Press `F5` to run the tests in a new window with your extension loaded. 38 | * See the output of the test result in the debug console. 39 | * Make changes to `src/test/suite/extension.test.ts` or create new test files inside the `test/suite` folder. 40 | * The provided test runner will only consider files matching the name pattern `**.test.ts`. 41 | * You can create folders inside the `test` folder to structure your tests any way you want. 42 | 43 | ## Go further 44 | 45 | * Reduce the extension size and improve the startup time by [bundling your extension](https://code.visualstudio.com/api/working-with-extensions/bundling-extension). 46 | * [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VS Code extension marketplace. 47 | * Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration). 48 | -------------------------------------------------------------------------------- /pybackend/matlab_engine.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import re 4 | import argparse 5 | from io import StringIO 6 | 7 | # Check if the Matlab Engine is installed 8 | try: 9 | import matlab.engine 10 | from matlab.engine import RejectedExecutionError as MatlabTerminated 11 | except ImportError: 12 | print( 13 | "MATLAB Engine for Python cannot be detected. Please install it for the extension to work." 14 | ) 15 | sys.exit(1) 16 | 17 | 18 | class MatlabEngine: 19 | def __init__(self): 20 | argParser = argparse.ArgumentParser() 21 | argParser.add_argument( 22 | "-c", 23 | "--cmd", 24 | default="", 25 | help="The first line of code to execute upon opening the MATLAB session", 26 | ) 27 | args = argParser.parse_args() 28 | 29 | # Bringup MATLAB Engine 30 | try: 31 | self.eng = matlab.engine.start_matlab() 32 | welcome_str = "MATLAB Engine for Python is ready (terminate with 'quit')" 33 | print("{0}\n{1}\n{0}".format("-" * len(welcome_str), welcome_str)) 34 | except MatlabTerminated as e: 35 | print("MATLAB Engine for Python exited prematurely:\n{}".format(str(e))) 36 | sys.exit(1) 37 | 38 | # Run the startup command if specified 39 | if args.cmd: 40 | self.execute_command(args.cmd) 41 | 42 | def __del__(self): 43 | print("Terminating MATLAB Engine.") 44 | self.eng.quit() 45 | 46 | def clear(self): 47 | os.system("cls" if os.name == "nt" else "clear") 48 | 49 | def get_input(self) -> str: 50 | command = sys.stdin.readline() 51 | # Handle multi-line functionality for control structures: 52 | pattern = r"^[ \t]*(if|for|while|switch|try|parfor|function)\b" 53 | if re.search(pattern, command): 54 | while True: 55 | line = self.get_input() 56 | command += line + "\n" 57 | if line == "end": 58 | print(command) 59 | break 60 | elif command.rstrip().endswith("..."): 61 | line = self.get_input() 62 | command += line + "\n" 63 | return command.strip() 64 | 65 | def execute_command(self, command): 66 | try: 67 | stream = StringIO() 68 | err_stream = StringIO() 69 | self.eng.eval(command, nargout=0, stdout=stream, stderr=err_stream) 70 | if len(stream.getvalue()) > 0: 71 | print(stream.getvalue()) 72 | except MatlabTerminated as e: 73 | print("MATLAB Engine for Python exited prematurely:\n{}".format(str(e))) 74 | print(stream.getvalue(), err_stream.getvalue(), sep="\n") 75 | sys.exit(1) 76 | except: # The other exceptions are handled by MATLAB 77 | print(stream.getvalue(), err_stream.getvalue(), sep="\n") 78 | 79 | def interactive_loop(self): 80 | while True: 81 | # Await input command 82 | print("\r>>> ", end="") 83 | try: 84 | command = self.get_input() 85 | except KeyboardInterrupt: 86 | print("CTRL+C") 87 | continue 88 | 89 | # Keyword to terminate the engine 90 | if command == "quit" or command == "quit()": 91 | break 92 | # Keyword to clear terminal 93 | elif command == "clc" or command == "clc()": 94 | self.clear() 95 | # Evaluate command in MATLAB 96 | else: 97 | self.execute_command(command) 98 | 99 | 100 | if __name__ == "__main__": 101 | matlab_engine = MatlabEngine() 102 | matlab_engine.interactive_loop() 103 | -------------------------------------------------------------------------------- /README_cn.md: -------------------------------------------------------------------------------- 1 | # MATLAB 扩展 for VSCode 2 | 3 | [English](README.md) | [中文](README_cn.md) 4 | 5 | ![license](https://img.shields.io/github/license/shinyypig/matlab-in-vscode) 6 | ![installs](https://img.shields.io/visual-studio-marketplace/i/shinyypig.matlab-in-vscode) 7 | ![version](https://img.shields.io/visual-studio-marketplace/v/shinyypig.matlab-in-vscode) 8 | ![last_commit](https://img.shields.io/github/last-commit/shinyypig/matlab-in-vscode) 9 | 10 | 这是一个用于 MATLAB 的 VSCode 扩展。它提供以下功能。 11 | 12 | ## 主要功能: 13 | 14 | - 直接在 VSCode 中查看变量 15 | - 通过按下 `ctrl+enter` 或 `cmd+enter` 在 MATLAB 中运行一个代码单元 16 | - 在 MATLAB 中运行当前行并移动到下一行,通过按下 `shift+enter` 17 | - `.m` 文件的语法高亮 18 | 19 | ## 次要功能: 20 | 21 | - 运行一个完整的 MATLAB .m 文件 22 | - 通过点击停止按钮中断 MATLAB 进程 23 | - 将 MATLAB 的工作目录更改为当前文件所在目录 24 | - 打开 MATLAB 的工作区以检查变量 25 | - 在 MATLAB 编辑器中打开当前文件以进行调试或其他用途 26 | 27 | 所有功能都可以通过点击菜单栏中的按钮来访问。如果 MATLAB 终端未启动,扩展将自动启动它。然后,您需要重新点击按钮来运行命令。 28 | 29 |
30 | 31 |
32 | 33 | 点击[这里](https://marketplace.visualstudio.com/items?itemName=shinyypig.matlab-in-vscode)安装扩展。 34 | 35 | ## 使用方法 36 | 37 | 如果你是 **Windows** 用户,可能需要安装 Python 用的 MATLAB 引擎 API,点击此[链接](https://www.mathworks.com/help/matlab/matlab_external/install-the-matlab-engine-for-python.html)了解更多详情。然后你需要在扩展的设置中勾选 `matlabPybackend` 选项。 38 | 39 | 如果你是 **Linux** 或 **Mac** 用户,默认设置就可以。除非 MATLAB 可执行文件不在路径中,否则你可以在扩展的设置中勾选 `matlabCMD` 选项。 40 | 41 | ## 查看工作区 42 | 43 | 你可以点击菜单栏中的按钮打开一个网页视图来检查变量。虽然它不如 MATLAB 工作区强大,但足以进行简单检查。 44 | 45 |
46 | 47 |
48 | 49 | 此外,现在你可以点击变量名来查看变量的详细信息。 50 | 51 | ## 最新更新 (v0.5.5) 52 | 53 | **🔧 错误修复:** 54 | - 修复了Windows系统上变量查看器不显示内容的问题 55 | - 解决了`variable_info`函数路径问题 56 | - 改进了CSV文件读取可靠性 57 | 58 | **💡 改进:** 59 | - 自动复制所需文件到工作空间 60 | - 增强错误处理和重试逻辑 61 | - 更好的文件路径检测 62 | 63 | **注意:** 扩展现在会自动处理所需文件。如有需要请重启VS Code。 64 | 65 |
66 | 67 |
68 | 69 | 请注意,当前目录下将生成一个名为 `matlabInVSCodeVariableInfo.csv` 的文件。它用于存储变量信息。通常,这个文件会立即自动删除。然而,如果出现某些错误,它可能不会被删除。您应该手动删除它。 70 | 71 | **重要提示!!!** 你需要在 VSCode 中打开一个文件夹作为工作区,以确保扩展能够找到 `matlabInVSCodeVariableInfo.csv` 文件。 72 | 73 | ## 单元模式 74 | 75 | 你可以通过 `%%` 分割你的代码,点击运行单元按钮,或者只需按下 `ctrl+enter`(Mac:`cmd+enter`)来运行活动单元。 76 | 77 |
78 | 79 |
80 | 81 | ## 查看文档 82 | 83 | 你可以右键单击函数名并选择 `Show Matlab Document` 来查看该函数的文档。 84 | 85 |
86 | 87 |
88 | 89 | ## 设置 90 | 91 | - `matlabCMD`:启动 Matlab 终端的命令,默认是 `matlab -nodesktop -nosplash`。如果使用 Python 后端,将被忽略。此外,对于 Windows 用户,建议使用 `matlabPybackend`。 92 | - `matlabMoveToNext`:如果设置为 true,运行当前行后光标将移动到下一行。默认值为 true。 93 | - `matlabPybackend`:建议在 Windows 上使用 Python 后端。请查看此[链接](https://www.mathworks.com/help/matlab/matlab_external/install-the-matlab-engine-for-python.html)以安装 MATLAB Engine for Python 的 API。 94 | - `matlabPythonPath`:如果要指定 Python 路径,可以在此处进行设置。 95 | - `matlabStartup`:启动 MATLAB 后要运行的代码,默认是空的,你可以添加一些代码来设置默认图形样式,例如: 96 | 97 | ```json 98 | "matlab-in-vscode.matlabStartup": [ 99 | "addpath(genpath('./'));", 100 | "set(groot, 'defaultLineLineWidth', 2);", 101 | "set(groot, 'DefaultLineMarkerSize', 8);", 102 | "set(groot, 'defaultAxesFontSize', 18);", 103 | "set(groot, 'defaultAxesXGrid', 'on');", 104 | "set(groot, 'defaultAxesYGrid', 'on');", 105 | "set(groot, 'defaultAxesBox', 'on');", 106 | "set(groot, 'defaultLegendBox', 'off');", 107 | "format compact;" 108 | ], 109 | ``` 110 | 111 | ## 变更日志 112 | 113 | 详见 [CHANGELOG.md](CHANGELOG.md)。 114 | -------------------------------------------------------------------------------- /syntaxes/overload.matlab.injection.tmLanguage: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | fileTypes 6 | 7 | m 8 | 9 | keyEquivalent 10 | ^~M 11 | name 12 | Overload method definition (MATLAB) 13 | scopeName 14 | overload.matlab.injection 15 | injectionSelector 16 | source.matlab meta.class.matlab meta.methods.matlab meta.function.definition.matlab 17 | uuid 18 | FDE5FBC3-BA16-4FF8-9225-8B27B29F5BCF 19 | patterns 20 | 21 | 22 | include 23 | #overload_definition 24 | 25 | 26 | repository 27 | 28 | overload_definition 29 | 30 | comment 31 | Overload entities (operators or type conversion) 32 | match 33 | (?<!\.)[a-zA-Z][a-zA-Z0-9_]*(?=\s*\() 34 | patterns 35 | 36 | 37 | comment 38 | Arithmetic operator overloading 39 | name 40 | keyword.operator.arithmetic.matlab 41 | match 42 | \G(?:plus|minus|uminus|uplus|times|mtimes|rdivide|ldivide|mrdivide|mldivide|power|mpower)\b 43 | 44 | 45 | comment 46 | Logical operator overloading 47 | name 48 | keyword.operator.logical.matlab 49 | match 50 | \G(?:and|eq|ge|gt|le|lt|ne|not|or)\b 51 | 52 | 53 | comment 54 | Operator overloading 55 | name 56 | keyword.operator.word.matlab 57 | match 58 | \G(?:end|isa|isappdata|isbanded|isbetween|iscalendarduration|iscategorical|iscategory|iscell|iscellstr|ischar|iscolumn|iscom|isdatetime|isdiag|isdst|isduration|isempty|isenum|isequal|isequaln|isevent|isfield|isfile|isfinite|isfloat|isfolder|ishandle|ishermitian|ishold|isinf|isinteger|isinterface|isjava|iskeyword|isletter|islogical|ismac|ismatrix|ismember|ismethod|ismissing|isnan|isnat|isnumeric|isobject|isordinal|ispc|isprime|isprop|isprotected|isreal|isregular|isrow|isscalar|issorted|issortedrows|isspace|issparse|isstring|isStringScalar|isstrprop|isstruct|isstudent|issymmetric|istable|istall|istimetable|istril|istriu|isundefined|isunix|isvarname|isvector|isweekend|numArgumentsFromSubscript|numel|size|subsasgn|subsindex|subsref)\b 59 | 60 | 61 | comment 62 | Graphics function overloading 63 | name 64 | support.function.graphics.matlab 65 | match 66 | \G(?:preview|setup|subtitle|title|update|view|xlabel|xlim|xticklabels|xticks|ylabel|ylim|yticklabels|yticks|zlabel|zlim|zticklabels|zticks)\b 67 | 68 | 69 | comment 70 | Mathematics function overloading 71 | name 72 | support.function.mathematics.matlab 73 | match 74 | \G(?:colon|ctranspose|horzcat|permute|repmat|reshape|subsref|subsasgn|subsindex|transpose|vertcat)\b 75 | 76 | 77 | comment 78 | Storage function overloading 79 | name 80 | support.function.io.matlab 81 | match 82 | \G(?:loadobj|saveobj)\b 83 | 84 | 85 | comment 86 | Type conversion overloading 87 | name 88 | storage.type.matlab 89 | match 90 | \G(?:char|disp|double|empty)\b 91 | 92 | 93 | 94 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to the "matlab-in-vscode" extension will be documented in this file. 4 | 5 | 6 | 7 | 10 | 11 | ## 0.5.5 12 | 13 | **Bug Fixes:** 14 | 15 | - Fix variable viewer not displaying content on Windows systems 16 | - Fix `variable_info` function path resolution issues 17 | - Improve CSV file reading reliability and timing 18 | - Auto-copy `variable_info.m` to workspace for better accessibility 19 | 20 | **Improvements:** 21 | 22 | - Enhanced error handling for variable viewer 23 | - Better file path detection logic 24 | - Improved retry mechanism for CSV file reading 25 | 26 | ## 0.5.4 27 | 28 | Fix # 53. 29 | 30 | ## 0.5.3 31 | 32 | Fix #49. 33 | 34 | ## 0.5.2 35 | 36 | Fix #46. 37 | 38 | ## 0.5.1 39 | 40 | Add language support for .m and .mat files. 41 | 42 | ## 0.5.0 43 | 44 | Feat #41, improve `doc` command. 45 | 46 | Feat #42, Chinese localization. 47 | 48 | Feat #43, view variable details by clicking the variable name. 49 | 50 | Feat #45, add matlab syntax highlight support. 51 | 52 | ## 0.4.22 53 | 54 | Fix #29, use workspace folder as the default path. 55 | 56 | ## 0.4.21 57 | 58 | Fix #28. 59 | 60 | Use absolute path when running a matlab file. 61 | 62 | ## 0.4.20 63 | 64 | Update README.md. 65 | 66 | ## 0.4.19 67 | 68 | Fix # 25 again, my bad. 69 | 70 | ## 0.4.18 71 | 72 | Fix #24 again, have no idea why the change was reverted. 73 | 74 | ## 0.4.17 75 | 76 | Fix the quote issue in windows. #25 77 | 78 | ## 0.4.16 79 | 80 | Add an option for user to choose the python interpreter. #24 81 | 82 | ## 0.4.15 83 | 84 | Fix the bug that the command is executed before the file is saved. #20 85 | 86 | ## 0.4.14 87 | 88 | Publish. 89 | 90 | ## 0.4.13 91 | 92 | Fix the bug that the pybackend didn't print the error message. 93 | 94 | ## 0.4.12 95 | 96 | Add time delay for starting matlab terminal. 97 | 98 | ## 0.4.11 99 | 100 | Add \n after variable_info. 101 | 102 | ## 0.4.10 103 | 104 | Able to show content of number or string variables. 105 | 106 | ## 0.4.9 107 | 108 | Save the current file before running it. 109 | 110 | ## 0.4.8 111 | 112 | Support for chinese output and better multi-line functionality handle in pybackend. 113 | 114 | ## 0.4.7 115 | 116 | Improve the code input method for pybackend. 117 | 118 | ## 0.4.6 119 | 120 | Fix the bug that the pybackend will treat any % as a comment. 121 | 122 | ## 0.4.5 123 | 124 | Revert to previous method to send startup command in pybackend. 125 | 126 | ## 0.4.4 127 | 128 | Fix default matlab-in-vscode.matlabStartup command. 129 | 130 | ## 0.4.3 131 | 132 | Fix python statupcommand. 133 | 134 | ## 0.4.2 135 | 136 | Bug fix. 137 | 138 | ## 0.4.1 139 | 140 | Revert to previous command send mode. 141 | 142 | ## 0.4.0 143 | 144 | Now you can view variables directly in VSCode. Click the button in the menu bar to open a webview to inspect the variables. 145 | 146 | ## 0.3.5 147 | 148 | If multiple lines are selected, press `Shift+Enter` will run the selected lines (#9). 149 | 150 | ## 0.3.4 151 | 152 | Add shortcut for running current line and move to next (#9). 153 | 154 | ## 0.3.3 155 | 156 | Add double quotes for the path of the `matlab_engine.py` file, when using pybackend (#7, #8). 157 | 158 | ## 0.3.2 159 | 160 | Remove `%%` when running a cell (reverted in 0.3.4). 161 | 162 | ## 0.3.1 163 | 164 | Add startup command support for matlab python engine. Thanks for @Veng97's contribution. 165 | 166 | ## 0.3.0 167 | 168 | Add support for matlab python engine in windows. Thanks for @Veng97's contribution (#1). 169 | 170 | ## 0.2.1 171 | 172 | If matlab terminal is not started, the extension will start it automatically. 173 | 174 | ## 0.2.0 175 | 176 | Add matlab python engine support. 177 | 178 | ## 0.1.1 179 | 180 | Rename the properties, and add the property that used to start the matlab terminal. 181 | 182 | ## 0.1.0 183 | 184 | Add split line for each cell. 185 | Add a button to open the help document of matlab. 186 | 187 | ## 0.0.3 188 | 189 | Fix keybinding issue. 190 | 191 | ## 0.0.2 192 | 193 | Add an icon for the extension. 194 | 195 | ## 0.0.1 196 | 197 | First release!!! 198 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # [English Version](./README.md) [简体中文版](./README_cn.md) 2 | 3 | # Matlab in VSCode 4 | 5 | ![license](https://img.shields.io/github/license/shinyypig/matlab-in-vscode) 6 | ![installs](https://img.shields.io/visual-studio-marketplace/i/shinyypig.matlab-in-vscode) 7 | ![version](https://img.shields.io/visual-studio-marketplace/v/shinyypig.matlab-in-vscode) 8 | ![last_commit](https://img.shields.io/github/last-commit/shinyypig/matlab-in-vscode) 9 | 10 | # MATLAB Extension for VSCode 11 | 12 | [English](README.md) | [中文](README_cn.md) 13 | 14 | This extension allows you to run matlab command within vscode. 15 | 16 | Major: 17 | 18 | - view variables directly in VSCode 19 | - run a cell in matlab by press `ctrl+enter` or `cmd+enter` 20 | - run current line and move to next in matlab by press `shift+enter` 21 | - syntax highlighting for `.m` file 22 | 23 | Minor: 24 | 25 | - run a complete matlab .m file 26 | - interrupt matlab process by clicking the stop button 27 | - change the work directory of matlab to the directory of the current file 28 | - open the workspace of matlab to inspect the variables 29 | - open the current file in matlab editor for debugging or other purpose 30 | 31 | All functions can be accessed by clicking the button in the menu bar. If matlab terminal is not started, the extension will start it automatically. Then, you need to reclick the button to run the command. 32 | 33 |
34 | 35 |
36 | 37 | Click [here](https://marketplace.visualstudio.com/items?itemName=shinyypig.matlab-in-vscode) to install the extension. 38 | 39 | ## Usage 40 | 41 | If you are a **windows** user, you may need to installed the MATLAB Engine API for Python, check this [link](https://www.mathworks.com/help/matlab/matlab_external/install-the-matlab-engine-for-python.html) for more details. Then you need to checkout the `matlabPybackend` option in the settings of the extension. 42 | 43 | If you are a **linux** or **mac** user, the default settings are fine. Unless the matlab excuable file is not in the path, you can check the `matlabCMD` option in the settings of the extension. 44 | 45 | ## View Workspace 46 | 47 | You can click the button in the menu bar to open a webview to inspect the variables. Though it is not as powerful as the matlab workspace, it is enough for simple inspection. 48 | 49 |
50 | 51 |
52 | 53 | Furthermore, you now can click the variable name to see the details of the variable. 54 | 55 | ## Recent Updates (v0.5.5) 56 | 57 | **🔧 Bug Fixes:** 58 | - Fixed variable viewer not displaying content on Windows systems 59 | - Resolved `variable_info` function path issues 60 | - Improved CSV file reading reliability 61 | 62 | **💡 Improvements:** 63 | - Auto-copy required files to workspace 64 | - Enhanced error handling and retry logic 65 | - Better file path detection 66 | 67 | **Note:** Extension now automatically handles required files. Restart VS Code if needed. 68 | 69 |
70 | 71 |
72 | 73 | Notice that a file named `matlabInVSCodeVariableInfo.csv` will be generated in the current directory. It is used to store the variable information. Normally, this file will be automatically deleted immediately. However, if some error occurs, it may not be deleted. You should delete it manually. 74 | 75 | **Important!!!** You need to open a folder as workspace in the VSCode to make sure that the extension can find the `matlabInVSCodeVariableInfo.csv` file. 76 | 77 | ## Cell Mode 78 | 79 | You can split your code by `%%`, click the run cell button or simply press `ctrl+enter` (mac: `cmd+enter`) to run the active cell. 80 | 81 |
82 | 83 |
84 | 85 | ## View Documentation 86 | 87 | You can right click the function name and select `Show Matlab Document` to view the documentation of the function. 88 | 89 |
90 | 91 |
92 | 93 | ## Settings 94 | 95 | - `matlabCMD`: The command to start the Matlab terminal, default is `matlab -nodesktop -nosplash`. If the python backend is used, it will be ignored. In addition, for windows users, it is recommended to use `matlabPybackend`. 96 | - `matlabMoveToNext`: If set to true, the cursor will move to the next line after running the current line. Default is true. 97 | - `matlabPybackend`: It is recommended to use the python backend in Windows. Check this [link](https://www.mathworks.com/help/matlab/matlab_external/install-the-matlab-engine-for-python.html) for installing MATLAB Engine API for Python. 98 | - `matlabPythonPath`: If you want to specify the python path, you can set it here. 99 | - `matlabStartup`: the code to run after starting the matlab, default is empty, you can add some code to set the default figure style, for example: 100 | 101 | ```json 102 | "matlab-in-vscode.matlabStartup": [ 103 | "addpath(genpath('./'));", 104 | "set(groot, 'defaultLineLineWidth', 2);", 105 | "set(groot, 'DefaultLineMarkerSize', 8);", 106 | "set(groot, 'defaultAxesFontSize', 18);", 107 | "set(groot, 'defaultAxesXGrid', 'on');", 108 | "set(groot, 'defaultAxesYGrid', 'on');", 109 | "set(groot, 'defaultAxesBox', 'on');", 110 | "set(groot, 'defaultLegendBox', 'off');", 111 | "format compact;" 112 | ], 113 | ``` 114 | 115 | ## Change Log 116 | 117 | See [CHANGELOG.md](CHANGELOG.md). 118 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "matlab-in-vscode-fixed", 3 | "displayName": "Matlab in VSCode (Fixed)", 4 | "description": "Run Matlab code in VSCode - Fixed Variable Viewer", 5 | "version": "0.5.5", 6 | "publisher": "shinyypig", 7 | "license": "MIT", 8 | "icon": "assets/matlab.png", 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/shinyypig/matlab-in-vscode" 12 | }, 13 | "engines": { 14 | "vscode": "^1.76.0" 15 | }, 16 | "categories": [ 17 | "Programming Languages" 18 | ], 19 | "activationEvents": [ 20 | "onLanguage:matlab" 21 | ], 22 | "main": "./dist/extension.js", 23 | "scripts": { 24 | "vscode:prepublish": "npm run package", 25 | "compile": "webpack", 26 | "watch": "webpack --watch", 27 | "package": "webpack --mode production --devtool hidden-source-map", 28 | "compile-tests": "tsc -p . --outDir out", 29 | "watch-tests": "tsc -p . -w --outDir out", 30 | "pretest": "npm run compile-tests && npm run compile && npm run lint", 31 | "lint": "eslint src --ext ts", 32 | "test": "node ./out/test/runTest.js" 33 | }, 34 | "contributes": { 35 | "configuration": { 36 | "title": "Matlab in VSCode", 37 | "properties": { 38 | "matlab-in-vscode.matlabPybackend": { 39 | "type": "boolean", 40 | "default": false, 41 | "description": "%matlab-in-vscode.matlabPybackend%" 42 | }, 43 | "matlab-in-vscode.matlabPythonPath": { 44 | "type": "string", 45 | "default": "python", 46 | "description": "%matlab-in-vscode.matlabPythonPath%" 47 | }, 48 | "matlab-in-vscode.matlabCMD": { 49 | "type": "string", 50 | "default": "matlab -nodesktop -nosplash", 51 | "description": "%matlab-in-vscode.matlabCMD%" 52 | }, 53 | "matlab-in-vscode.matlabStartup": { 54 | "type": "array", 55 | "default": [ 56 | "disp(['Working directory: ', pwd]);" 57 | ], 58 | "description": "%matlab-in-vscode.matlabStartup%" 59 | }, 60 | "matlab-in-vscode.matlabStartupDelay": { 61 | "type": "number", 62 | "default": 500, 63 | "description": "%matlab-in-vscode.matlabStartupDelay%" 64 | }, 65 | "matlab-in-vscode.matlabMoveToNext": { 66 | "type": "boolean", 67 | "default": true, 68 | "description": "%matlab-in-vscode.matlabMoveToNext%" 69 | } 70 | } 71 | }, 72 | "commands": [ 73 | { 74 | "command": "matlab-in-vscode.runMatlabFile", 75 | "title": "%matlab-in-vscode.runMatlabFile%", 76 | "icon": "$(notebook-execute-all)" 77 | }, 78 | { 79 | "command": "matlab-in-vscode.runMatlabCell", 80 | "title": "%matlab-in-vscode.runMatlabCell%", 81 | "icon": "$(notebook-execute)", 82 | "when": "editorTextFocus && editorLangId == matlab" 83 | }, 84 | { 85 | "command": "matlab-in-vscode.runMatlabLine", 86 | "title": "%matlab-in-vscode.runMatlabLine%", 87 | "when": "editorTextFocus && editorLangId == matlab" 88 | }, 89 | { 90 | "command": "matlab-in-vscode.interupt", 91 | "title": "%matlab-in-vscode.interupt%", 92 | "icon": "$(notebook-stop)" 93 | }, 94 | { 95 | "command": "matlab-in-vscode.cd", 96 | "title": "%matlab-in-vscode.cd%", 97 | "icon": "$(file-symlink-directory)" 98 | }, 99 | { 100 | "command": "matlab-in-vscode.stop", 101 | "title": "%matlab-in-vscode.stop%", 102 | "icon": "$(panel-close)" 103 | }, 104 | { 105 | "command": "matlab-in-vscode.variable", 106 | "title": "%matlab-in-vscode.variable%", 107 | "icon": "$(eye)" 108 | }, 109 | { 110 | "command": "matlab-in-vscode.edit", 111 | "title": "%matlab-in-vscode.edit%", 112 | "icon": "$(pencil)" 113 | }, 114 | { 115 | "command": "matlab-in-vscode.doc", 116 | "title": "%matlab-in-vscode.doc%", 117 | "icon": "$(book)" 118 | } 119 | ], 120 | "keybindings": [ 121 | { 122 | "command": "matlab-in-vscode.runMatlabCell", 123 | "key": "ctrl+enter", 124 | "mac": "cmd+enter", 125 | "when": "editorTextFocus && editorLangId == matlab" 126 | }, 127 | { 128 | "command": "matlab-in-vscode.runMatlabLine", 129 | "key": "shift+enter", 130 | "mac": "shift+enter", 131 | "when": "editorTextFocus && editorLangId == matlab" 132 | } 133 | ], 134 | "menus": { 135 | "editor/title": [ 136 | { 137 | "when": "resourceLangId == matlab", 138 | "command": "matlab-in-vscode.runMatlabFile", 139 | "group": "navigation@1" 140 | }, 141 | { 142 | "when": "resourceLangId == matlab", 143 | "command": "matlab-in-vscode.runMatlabCell", 144 | "group": "navigation@2" 145 | }, 146 | { 147 | "when": "resourceLangId == matlab", 148 | "command": "matlab-in-vscode.interupt", 149 | "group": "navigation@3" 150 | }, 151 | { 152 | "when": "resourceLangId == matlab", 153 | "command": "matlab-in-vscode.cd", 154 | "group": "navigation@4" 155 | }, 156 | { 157 | "when": "resourceLangId == matlab", 158 | "command": "matlab-in-vscode.variable", 159 | "group": "navigation@5" 160 | }, 161 | { 162 | "when": "resourceLangId == matlab", 163 | "command": "matlab-in-vscode.edit", 164 | "group": "navigation@6" 165 | }, 166 | { 167 | "when": "resourceLangId == matlab", 168 | "command": "matlab-in-vscode.doc", 169 | "group": "navigation@7" 170 | } 171 | ], 172 | "editor/context": [ 173 | { 174 | "when": "editorLangId == matlab", 175 | "command": "matlab-in-vscode.runMatlabCell" 176 | }, 177 | { 178 | "when": "editorLangId == matlab", 179 | "command": "matlab-in-vscode.runMatlabLine" 180 | }, 181 | { 182 | "when": "editorLangId == matlab", 183 | "command": "matlab-in-vscode.doc" 184 | } 185 | ] 186 | }, 187 | "languages": [ 188 | { 189 | "id": "matlab", 190 | "aliases": [ 191 | "MATLAB", 192 | "matlab" 193 | ], 194 | "extensions": [ 195 | ".m", 196 | ".mat" 197 | ] 198 | } 199 | ], 200 | "grammars": [ 201 | { 202 | "language": "matlab", 203 | "scopeName": "source.matlab", 204 | "path": "./syntaxes/MATLAB-Language-grammar/Matlab.tmbundle/Syntaxes/MATLAB.tmLanguage" 205 | }, 206 | { 207 | "injectTo": [ 208 | "source.matlab" 209 | ], 210 | "scopeName": "builtin.matlab.injection", 211 | "path": "./syntaxes/builtin.matlab.injection.tmLanguage" 212 | }, 213 | { 214 | "injectTo": [ 215 | "source.matlab" 216 | ], 217 | "scopeName": "overload.matlab.injection", 218 | "path": "./syntaxes/overload.matlab.injection.tmLanguage" 219 | }, 220 | { 221 | "injectTo": [ 222 | "source.matlab" 223 | ], 224 | "scopeName": "package.matlab.injection", 225 | "path": "./syntaxes/package.matlab.injection.tmLanguage" 226 | }, 227 | { 228 | "injectTo": [ 229 | "source.matlab" 230 | ], 231 | "scopeName": "validation.matlab.injection", 232 | "path": "./syntaxes/validation.matlab.injection.tmLanguage" 233 | }, 234 | { 235 | "injectTo": [ 236 | "text.html.markdown" 237 | ], 238 | "scopeName": "markdown.matlab.codeblock", 239 | "path": "./syntaxes/matlab.markdown.injection.tmLanguage", 240 | "embeddedLanguages": { 241 | "meta.embedded.block.matlab": "matlab" 242 | } 243 | } 244 | ] 245 | }, 246 | "devDependencies": { 247 | "@types/estree": "^1.0.8", 248 | "@types/glob": "^8.1.0", 249 | "@types/json-schema": "^7.0.15", 250 | "@types/mocha": "^10.0.1", 251 | "@types/node": "^16.18.126", 252 | "@types/vscode": "^1.76.0", 253 | "@typescript-eslint/eslint-plugin": "^5.53.0", 254 | "@typescript-eslint/parser": "^5.53.0", 255 | "@vscode/test-electron": "^2.2.3", 256 | "@vscode/vsce": "^3.6.0", 257 | "eslint": "^8.34.0", 258 | "glob": "^8.1.0", 259 | "mocha": "^10.2.0", 260 | "ts-loader": "^9.4.2", 261 | "typescript": "^4.9.5", 262 | "webpack": "^5.75.0", 263 | "webpack-cli": "^5.0.1" 264 | }, 265 | "dependencies": { 266 | "csv-parser": "^3.0.0", 267 | "vsce": "^0.9.0" 268 | }, 269 | "__metadata": { 270 | "id": "ccbe17b5-5a05-4213-9d21-5b25b95e6de6", 271 | "publisherId": "f4232bb1-9661-4400-a746-128581db8d57", 272 | "publisherDisplayName": "shinyypig", 273 | "targetPlatform": "undefined", 274 | "updated": false, 275 | "isPreReleaseVersion": false, 276 | "hasPreReleaseVersion": false, 277 | "installedTimestamp": 1714187237101, 278 | "pinned": true, 279 | "source": "gallery" 280 | } 281 | } 282 | -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | // The module 'vscode' contains the VS Code extensibility API 2 | // Import the module and reference it with the alias vscode in your code below 3 | import * as vscode from "vscode"; 4 | import * as path from "path"; 5 | import * as fs from "fs"; 6 | import * as csv from "csv-parser"; 7 | 8 | function readFileStream(filePath: string): Promise { 9 | return new Promise((resolve, reject) => { 10 | let htmlContent = ` 11 | 12 | 13 | 14 | 31 | 32 | 38 | 39 | 40 | `; 41 | 42 | const readStream = fs.createReadStream(filePath); 43 | 44 | readStream 45 | .pipe(csv()) 46 | .on("headers", (headers: string[]) => { 47 | htmlContent += ""; 48 | headers.forEach((header) => { 49 | htmlContent += ``; 50 | }); 51 | htmlContent += ""; 52 | }) 53 | .on("data", (row: any) => { 54 | htmlContent += ""; 55 | let isFirstKey = true; // 标志变量,初始值为 true,用于每一行 56 | for (let key in row) { 57 | if (isFirstKey) { 58 | htmlContent += ``; 59 | isFirstKey = false; // 处理完第一个键后,将标志变量设为 false 60 | } else { 61 | htmlContent += ``; 62 | } 63 | } 64 | htmlContent += ""; 65 | }) 66 | .on("end", () => { 67 | htmlContent += "
${header}
${row[key]}${row[key]}
"; 68 | // 延长删除时间,给更多时间让界面加载 69 | setTimeout(() => { 70 | fs.unlink(filePath, (err) => { 71 | if (err) { 72 | console.log("Failed to delete temp file:", err); 73 | } else { 74 | console.log("Successfully deleted temp file:", filePath); 75 | } 76 | }); 77 | }, 3000); // 增加到3秒 78 | resolve(htmlContent); 79 | }) 80 | .on("error", (err: Error) => { 81 | reject(err); 82 | }); 83 | }); 84 | } 85 | 86 | async function getScopeWebViewHtml( 87 | filePath: string, 88 | delay: number, 89 | retryCount: number = 0 90 | ): Promise { 91 | const maxRetries = 10; // 最大重试次数 92 | 93 | if (fs.existsSync(filePath)) { 94 | try { 95 | return await readFileStream(filePath); 96 | } catch (error) { 97 | console.log("Error reading file:", error); 98 | // 如果读取失败,返回一个简单的空表格 99 | return ` 100 | 101 | 102 | 103 | 117 | 118 | 119 | 120 | 121 | 122 |
NameValueClass
No variables found or error reading data
123 | 124 | 125 | `; 126 | } 127 | } else if (retryCount < maxRetries) { 128 | await new Promise((resolve) => setTimeout(resolve, delay)); 129 | return await getScopeWebViewHtml(filePath, delay, retryCount + 1); 130 | } else { 131 | // 超过最大重试次数,返回空表格 132 | return ` 133 | 134 | 135 | 136 | 150 | 151 | 152 | 153 | 154 | 155 |
NameValueClass
No variables file found after retries
156 | 157 | 158 | `; 159 | } 160 | } 161 | 162 | // This method is called when your extension is activated 163 | // Your extension is activated the very first time the command is executed 164 | export function activate(context: vscode.ExtensionContext) { 165 | // The command has been defined in the package.json file 166 | // Now provide the implementation of the command with registerCommand 167 | // The commandId parameter must match the command field in package.json 168 | 169 | let config = vscode.workspace.getConfiguration("matlab-in-vscode"); 170 | let matlabPybackend = config.get("matlabPybackend") as boolean; 171 | let matlabPythonPath = config.get("matlabPythonPath") as string; 172 | let matlabStartup = config.get("matlabStartup") as string[]; 173 | let matlabStartupDelay = config.get("matlabStartupDelay") as number; 174 | let matlabCMD = config.get("matlabCMD") as string; 175 | let matlabMoveToNext = config.get("matlabMoveToNext") as boolean; 176 | let matlabScope: vscode.WebviewPanel | undefined; 177 | 178 | function findMatlabTerminal() { 179 | let matlabTerminalId = context.workspaceState.get("matlabTerminalId"); 180 | if (matlabTerminalId !== undefined) { 181 | return vscode.window.terminals.find((x) => x.name === "MATLAB"); 182 | } else { 183 | return undefined; 184 | } 185 | } 186 | 187 | function sendToMatlab(command: string) { 188 | // save the file and wait for it to be saved 189 | let activeTextEditor = vscode.window.activeTextEditor; 190 | if (activeTextEditor) { 191 | activeTextEditor.document.save().then(() => { 192 | let matlabTerminal = findMatlabTerminal(); 193 | if (matlabTerminal !== undefined) { 194 | command += "\nvariable_info;\n"; 195 | matlabTerminal.sendText(command); 196 | updateScope(); 197 | } else { 198 | matlabTerminal = startMatlab(); 199 | } 200 | }); 201 | } 202 | } 203 | 204 | function startMatlab() { 205 | let matlabTerminal = findMatlabTerminal(); 206 | // get workspace path 207 | let workspacePath = vscode.workspace.workspaceFolders?.[0].uri.fsPath; 208 | if (matlabTerminal === undefined) { 209 | matlabTerminal = vscode.window.createTerminal({ 210 | name: "MATLAB", 211 | cwd: workspacePath, 212 | }); 213 | context.workspaceState.update( 214 | "matlabTerminalId", 215 | matlabTerminal.processId 216 | ); 217 | 218 | // 自动复制 variable_info.m 到工作区根目录(如果不存在的话) 219 | if (workspacePath) { 220 | let sourceFile = path.join(context.asAbsolutePath(""), "matlab_code", "variable_info.m"); 221 | let targetFile = path.join(workspacePath, "variable_info.m"); 222 | 223 | if (!fs.existsSync(targetFile) && fs.existsSync(sourceFile)) { 224 | try { 225 | fs.copyFileSync(sourceFile, targetFile); 226 | console.log(`Copied variable_info.m to workspace: ${targetFile}`); 227 | } catch (error) { 228 | console.log(`Failed to copy variable_info.m: ${error}`); 229 | } 230 | } 231 | } 232 | 233 | let startupCommand = ""; 234 | for (let i = 0; i < matlabStartup.length; i++) { 235 | startupCommand += matlabStartup[i]; 236 | } 237 | // 添加扩展目录到 MATLAB 路径,确保 variable_info.m 可用 238 | let matlabCodePath = path.join(context.asAbsolutePath(""), "matlab_code").replace(/\\/g, '/'); 239 | startupCommand += `addpath('${matlabCodePath}');`; 240 | startupCommand += `disp('Added path: ${matlabCodePath}');`; 241 | 242 | let bringupCommand = ""; 243 | if (matlabPybackend) { 244 | let scriptPath = path.join( 245 | context.asAbsolutePath(""), 246 | "/pybackend/matlab_engine.py" 247 | ); 248 | bringupCommand = 249 | matlabPythonPath + 250 | ` "${scriptPath}" --cmd="${startupCommand}"`; 251 | } else { 252 | bringupCommand = matlabCMD + "\n" + startupCommand + "\n"; 253 | } 254 | 255 | setTimeout(() => { 256 | // 在这里,一秒已经过去了。 257 | // 现在发送命令到 MATLAB 终端 258 | if (matlabTerminal !== undefined) { 259 | matlabTerminal.sendText(bringupCommand); 260 | } 261 | }, matlabStartupDelay); 262 | } 263 | matlabTerminal.show(true); 264 | return matlabTerminal; 265 | } 266 | 267 | function runMatlabCell() { 268 | let activeTextEditor = vscode.window.activeTextEditor; 269 | if (activeTextEditor) { 270 | let code = activeTextEditor.document.getText(); 271 | let activeLine = activeTextEditor.document.lineAt( 272 | activeTextEditor.selection.active 273 | ).lineNumber; 274 | let lines = code.split("\n"); 275 | // find the cell that contains the current line 276 | let cellStart = activeLine; 277 | while (cellStart > 0) { 278 | if (lines[cellStart].startsWith("%%")) { 279 | break; 280 | } 281 | cellStart--; 282 | } 283 | let cellEnd = activeLine + 1; 284 | while (cellEnd < lines.length) { 285 | if (lines[cellEnd].startsWith("%%")) { 286 | break; 287 | } 288 | cellEnd++; 289 | } 290 | let codeToRun = lines.slice(cellStart, cellEnd).join("\n"); 291 | sendToMatlab(codeToRun); 292 | } 293 | } 294 | 295 | function runMatlabLine() { 296 | let activeTextEditor = vscode.window.activeTextEditor; 297 | if (activeTextEditor) { 298 | let code = activeTextEditor.document.getText(); 299 | let activeLine = activeTextEditor.document.lineAt( 300 | activeTextEditor.selection.active 301 | ).lineNumber; 302 | let startLine = activeTextEditor.document.lineAt( 303 | activeTextEditor.selection.start 304 | ).lineNumber; 305 | let endLine = activeTextEditor.document.lineAt( 306 | activeTextEditor.selection.end 307 | ).lineNumber; 308 | let lines = code.split("\n"); 309 | var codeToRun = ""; 310 | if (startLine === endLine) { 311 | codeToRun = lines[activeLine]; 312 | if (matlabMoveToNext) { 313 | vscode.commands.executeCommand("cursorMove", { 314 | to: "down", 315 | by: "line", 316 | value: 1, 317 | }); 318 | } 319 | } else { 320 | codeToRun = lines.slice(startLine, endLine + 1).join("\n"); 321 | } 322 | sendToMatlab(codeToRun); 323 | } 324 | } 325 | 326 | function runMatlabFile() { 327 | let filePath = vscode.window.activeTextEditor?.document.fileName; 328 | if (filePath !== undefined) { 329 | let absolutePath = path.resolve(filePath); 330 | let matlabCommand = `run('${absolutePath}')`; 331 | console.log(matlabCommand); 332 | sendToMatlab(matlabCommand); 333 | } 334 | } 335 | 336 | function cdFileDirectory() { 337 | let filePath = vscode.window.activeTextEditor?.document.fileName; 338 | if (filePath !== undefined) { 339 | let matlabCommand = `cd('${path.dirname(filePath)}')`; 340 | sendToMatlab(matlabCommand); 341 | } 342 | } 343 | 344 | function interruptMatlab() { 345 | let matlabTerminal = findMatlabTerminal(); 346 | if (matlabTerminal !== undefined) { 347 | // send ctrl+c 348 | matlabTerminal.sendText(String.fromCharCode(3)); 349 | } 350 | } 351 | 352 | function stopMatlab() { 353 | let matlabTerminal = findMatlabTerminal(); 354 | if (matlabTerminal !== undefined) { 355 | matlabTerminal.dispose(); 356 | context.workspaceState.update("matlabTerminalId", undefined); 357 | } 358 | } 359 | 360 | function updateScope() { 361 | let matlabTerminal = findMatlabTerminal(); 362 | if (matlabTerminal === undefined) { 363 | return; 364 | } 365 | 366 | // 获取当前 MATLAB 的工作目录,而不是 VS Code 的工作区目录 367 | let workspacePath = vscode.workspace.workspaceFolders?.[0].uri.fsPath; 368 | let currentDir = vscode.window.activeTextEditor?.document.fileName; 369 | 370 | // 如果有活动文件,使用文件所在目录作为 CSV 查找位置 371 | if (currentDir !== undefined) { 372 | workspacePath = path.dirname(currentDir); 373 | } 374 | 375 | if (workspacePath === undefined) { 376 | return; 377 | } 378 | 379 | let csvPath = path.join( 380 | workspacePath, 381 | "matlabInVSCodeVariableInfo.csv" 382 | ); 383 | 384 | // 增加延迟,给 MATLAB 时间生成文件 385 | setTimeout(() => { 386 | getScopeWebViewHtml(csvPath, 500).then((htmlContent) => { 387 | if (matlabScope === undefined) { 388 | return; 389 | } 390 | matlabScope.webview.html = htmlContent; 391 | }); 392 | }, 1000); 393 | } 394 | 395 | function showVariable() { 396 | let matlabTerminal = findMatlabTerminal(); 397 | if (matlabTerminal === undefined) { 398 | matlabTerminal = startMatlab(); 399 | return; 400 | } 401 | if (matlabScope) { 402 | matlabScope.reveal(); 403 | } else { 404 | matlabScope = vscode.window.createWebviewPanel( 405 | "matlabScope", 406 | "Matlab Variable Scope", 407 | vscode.ViewColumn.Beside, 408 | { 409 | // Enable scripts in the webview 410 | enableScripts: true, 411 | } 412 | ); 413 | matlabScope.onDidDispose(() => { 414 | matlabScope = undefined; 415 | }); 416 | 417 | matlabScope.webview.onDidReceiveMessage((message) => { 418 | if (message.command === "openvar") { 419 | let command = `openvar("${message.text}")`; 420 | if (matlabTerminal) { 421 | matlabTerminal.sendText(command); 422 | } 423 | } 424 | }); 425 | } 426 | matlabTerminal.sendText("variable_info;"); 427 | updateScope(); 428 | } 429 | 430 | function editInMatlab() { 431 | let filePath = vscode.window.activeTextEditor?.document.fileName; 432 | if (filePath !== undefined) { 433 | let command = `edit('${filePath}')`; 434 | sendToMatlab(command); 435 | } 436 | } 437 | 438 | function showMatlabDoc() { 439 | let activeTextEditor = vscode.window.activeTextEditor; 440 | if (activeTextEditor) { 441 | const selection = activeTextEditor.selection; 442 | const text = activeTextEditor.document.getText(selection); 443 | let command = "doc " + text; 444 | sendToMatlab(command); 445 | } 446 | } 447 | 448 | let dispRunMatlabFile = vscode.commands.registerCommand( 449 | "matlab-in-vscode.runMatlabFile", 450 | () => { 451 | runMatlabFile(); 452 | } 453 | ); 454 | let dispRunMatlabCell = vscode.commands.registerCommand( 455 | "matlab-in-vscode.runMatlabCell", 456 | () => { 457 | runMatlabCell(); 458 | } 459 | ); 460 | let dispRunMatlabLine = vscode.commands.registerCommand( 461 | "matlab-in-vscode.runMatlabLine", 462 | () => { 463 | runMatlabLine(); 464 | } 465 | ); 466 | let dispInterruptMatlab = vscode.commands.registerCommand( 467 | "matlab-in-vscode.interupt", 468 | () => { 469 | interruptMatlab(); 470 | } 471 | ); 472 | let dispStopMatlab = vscode.commands.registerCommand( 473 | "matlab-in-vscode.stop", 474 | () => { 475 | stopMatlab(); 476 | } 477 | ); 478 | let dispCdFileDirectory = vscode.commands.registerCommand( 479 | "matlab-in-vscode.cd", 480 | () => { 481 | cdFileDirectory(); 482 | } 483 | ); 484 | let dispShowVariable = vscode.commands.registerCommand( 485 | "matlab-in-vscode.variable", 486 | () => { 487 | showVariable(); 488 | } 489 | ); 490 | let dispEditInMatlab = vscode.commands.registerCommand( 491 | "matlab-in-vscode.edit", 492 | () => { 493 | editInMatlab(); 494 | } 495 | ); 496 | let dispShowMatlabDoc = vscode.commands.registerCommand( 497 | "matlab-in-vscode.doc", 498 | () => { 499 | showMatlabDoc(); 500 | } 501 | ); 502 | 503 | context.subscriptions.push(dispInterruptMatlab); 504 | context.subscriptions.push(dispRunMatlabCell); 505 | context.subscriptions.push(dispRunMatlabLine); 506 | context.subscriptions.push(dispRunMatlabFile); 507 | context.subscriptions.push(dispStopMatlab); 508 | context.subscriptions.push(dispCdFileDirectory); 509 | context.subscriptions.push(dispShowVariable); 510 | context.subscriptions.push(dispEditInMatlab); 511 | context.subscriptions.push(dispShowMatlabDoc); 512 | 513 | let activeEditor = vscode.window.activeTextEditor; 514 | let timeout: NodeJS.Timer | undefined = undefined; 515 | const splitLine = vscode.window.createTextEditorDecorationType({ 516 | // border on bottom 517 | borderStyle: "solid", 518 | // use theme color foreground 519 | borderColor: new vscode.ThemeColor("editorLineNumber.foreground"), 520 | borderWidth: "1px 0 0 0", 521 | isWholeLine: true, 522 | }); 523 | 524 | function updateDecorations() { 525 | if (activeEditor) { 526 | let code = activeEditor.document.getText(); 527 | let lines = code.split("\n"); 528 | let decorations = []; 529 | for (let i = 0; i < lines.length; i++) { 530 | if (lines[i].startsWith("%%")) { 531 | let decoration = { 532 | range: new vscode.Range(i, 0, i, lines[i].length), 533 | }; 534 | decorations.push(decoration); 535 | } 536 | } 537 | activeEditor.setDecorations(splitLine, decorations); 538 | } 539 | } 540 | 541 | function triggerUpdateDecorations(throttle = false) { 542 | if (timeout) { 543 | clearTimeout(timeout); 544 | timeout = undefined; 545 | } 546 | if (throttle) { 547 | timeout = setTimeout(updateDecorations, 500); 548 | } else { 549 | updateDecorations(); 550 | } 551 | } 552 | 553 | vscode.window.onDidChangeActiveTextEditor( 554 | (editor) => { 555 | activeEditor = editor; 556 | if (editor) { 557 | triggerUpdateDecorations(); 558 | } 559 | }, 560 | null, 561 | context.subscriptions 562 | ); 563 | 564 | vscode.workspace.onDidChangeTextDocument( 565 | (event) => { 566 | if (activeEditor && event.document === activeEditor.document) { 567 | triggerUpdateDecorations(true); 568 | } 569 | }, 570 | null, 571 | context.subscriptions 572 | ); 573 | 574 | updateDecorations(); 575 | } 576 | 577 | // This method is called when your extension is deactivated 578 | export function deactivate() {} 579 | -------------------------------------------------------------------------------- /syntaxes/package.matlab.injection.tmLanguage: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | fileTypes 6 | 7 | m 8 | 9 | keyEquivalent 10 | ^~M 11 | name 12 | Package functions (MATLAB) 13 | scopeName 14 | package.matlab.injection 15 | injectionSelector 16 | source.matlab -comment -string -interpolation -assignment -source.shell 17 | uuid 18 | 449661EB-D2A8-40B8-8B58-93669F69F4B7 19 | patterns 20 | 21 | 22 | include 23 | #package_builtin_functions 24 | 25 | 26 | include 27 | #package_data_functions 28 | 29 | 30 | include 31 | #package_external_functions 32 | 33 | 34 | include 35 | #package_graphics_functions 36 | 37 | 38 | include 39 | #package_storage_functions 40 | 41 | 42 | include 43 | #package_class_constructors 44 | 45 | 46 | include 47 | #package_word_operators 48 | 49 | 50 | repository 51 | 52 | package_builtin_functions 53 | 54 | patterns 55 | 56 | 57 | 58 | comment 59 | matlab.System 60 | name 61 | support.function.builtin.matlab 62 | match 63 | (?<!\.)\b(allowModelReferenceDiscreteSampleTimeInheritanceImpl|allowModelReferenceDiscreteSampleTimeInheritanceImpl|createSampleTime|getCurrentTime|getDiscreteStateImpl|getDiscreteStateSpecificationImpl|getGlobalNamesImpl|getHeaderImpl|getIconImpl|getImpulseResponseLengthImpl|getInputDimensionConstraintImpl|getInputNamesImpl|getInterfaceImpl|getNumInputsImpl|getNumOutputsImpl|getOutputDataTypeImpl|getOutputDimensionConstraintImpl|getOutputNamesImpl|getOutputSizeImpl|getSampleTime|getSampleTimeImpl|getSimulateUsingImpl|getSimulateUsingImpl|getSimulinkFunctionNamesImpl|infoImpl|isDiscreteStateSpecificationMutableImpl|isDoneImpl|isInactivePropertyImpl|isInputComplexityMutableImpl|isInputDataTypeMutableImpl|isInputSizeMutableImpl|isOutputComplexImpl|isOutputFixedSizeImpl|isTunablePropertyDataTypeMutableImpl|loadObjectImpl|processInputSpecificationChangeImpl|processTunedPropertiesImpl|propagatedInputComplexity|propagatedInputDataType|propagatedInputFixedSize|propagatedInputSize|releaseImpl|resetImpl|saveObjectImpl|setProperties|setupImpl|showFiSettingsImpl|showSimulateUsingImpl|stepImpl|supportsMultipleInstanceImpl|supportsMultipleInstanceImpl|validateInputsImpl|validatePropertiesImpl)\b 64 | 65 | 66 | comment 67 | matlab.diagram.ClassViewer 68 | name 69 | support.function.builtin.matlab 70 | match 71 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addClass|expandAll|expandClass|expandSection|export|importClassesFrom|importCurrentProject|load|removeAllClasses|removeClass|saveActiveFile)\b 72 | 73 | 74 | comment 75 | matlab.unittest.TestRunner 76 | name 77 | support.function.builtin.matlab 78 | match 79 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addModelCoverage|addPlugin|addSimulinkTestResults|run|runInParallel)\b 80 | 81 | 82 | comment 83 | matlab.mixin.Copyable 84 | name 85 | support.function.builtin.matlab 86 | match 87 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:copy|copyElement)\b 88 | 89 | 90 | comment 91 | matlab.mixin.CustomDisplay 92 | name 93 | support.function.builtin.matlab 94 | match 95 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:convertDimensionsToString|displayEmptyObject|displayNonScalarObject|displayPropertyGroups|displayScalarHandleToDeletedObject|displayScalarObject|getClassNameForHeader|getDeletedHandleText|getDetailedFooter|getDetailedHeader|getFooter|getHandleText|getHeader|getPropertyGroups|getSimpleHeader)\b 96 | 97 | 98 | comment 99 | matlab.mixin.Heterogeneous 100 | name 101 | support.function.builtin.matlab 102 | match 103 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:cat|getDefaultScalarElement|(?<=[a-zA-Z0-9_]\.)(?:horzcat|vertcat))\b 104 | 105 | 106 | comment 107 | matlab.mixin.SetGet 108 | name 109 | support.function.builtin.matlab 110 | match 111 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:get|getdisp|set|setdisp)\b 112 | 113 | 114 | comment 115 | matlab.mixin.SetGetExactNames 116 | name 117 | support.function.builtin.matlab 118 | match 119 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:get|getdisp|set|setdisp)\b 120 | 121 | 122 | comment 123 | matlab.mock.actions.AssignOutputs 124 | name 125 | support.function.builtin.matlab 126 | match 127 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:repeat|then)\b 128 | 129 | 130 | comment 131 | matlab.mock.InteractionHistory 132 | name 133 | support.function.builtin.matlab 134 | match 135 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)forMock\b 136 | 137 | 138 | comment 139 | matlab.mock.PropertyBehavior 140 | name 141 | support.function.builtin.matlab 142 | match 143 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:get|set|setToValue)\b 144 | 145 | 146 | comment 147 | matlab.mock.PropertyGetBehavior 148 | name 149 | support.function.builtin.matlab 150 | match 151 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)when\b 152 | 153 | 154 | comment 155 | matlab.mock.PropertySetBehavior 156 | name 157 | support.function.builtin.matlab 158 | match 159 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)when\b 160 | 161 | 162 | comment 163 | matlab.mock.TestCase 164 | name 165 | support.function.builtin.matlab 166 | match 167 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addTeardown|applyFixture|assertAccessed|assertCalled|assertNotAccessed|assertNotCalled|assertNotSet|assertSet|assignOutputsWhen|assumeAccessed|assumeCalled|assumeNotAccessed|assumeNotCalled|assumeNotSet|assumeSet|clearMockHistory|createMock|fatalAssertAccessed|fatalAssertCalled|fatalAssertNotAccessed|fatalAssertNotCalled|fatalAssertNotSet|fatalAssertSet|forInteractiveUse|forInteractiveUse|getMockHistory|getSharedTestFixtures|log|onFailure|returnStoredValueWhen|run|storeValueWhen|throwExceptionWhen|verifyAccessed|verifyCalled|verifyNotAccessed|verifyNotCalled|verifyNotSet|verifySet)\b 168 | 169 | 170 | comment 171 | matlab.mock.actions.AssignOutputs 172 | name 173 | support.function.builtin.matlab 174 | match 175 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:repeat|then)\b 176 | 177 | 178 | comment 179 | matlab.mock.actions.DoNothing 180 | name 181 | support.function.builtin.matlab 182 | match 183 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:repeat|then)\b 184 | 185 | 186 | comment 187 | matlab.mock.actions.Invoke 188 | name 189 | support.function.builtin.matlab 190 | match 191 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:repeat|then)\b 192 | 193 | 194 | comment 195 | matlab.mock.actions.ReturnStoredValue 196 | name 197 | support.function.builtin.matlab 198 | match 199 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:repeat|then)\b 200 | 201 | 202 | comment 203 | matlab.mock.actions.StoreValue 204 | name 205 | support.function.builtin.matlab 206 | match 207 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:repeat|then)\b 208 | 209 | 210 | comment 211 | matlab.mock.actions.ThrowException 212 | name 213 | support.function.builtin.matlab 214 | match 215 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:repeat|then)\b 216 | 217 | 218 | comment 219 | matlab.perftest.TestCase 220 | name 221 | support.function.builtin.matlab 222 | match 223 | (?<=[a-zA-Z0-9_]\.)(?:addTeardown|applyFixture|forInteractiveUse|getSharedTestFixtures|keepMeasuring|log|onFailure|(?<=[a-zA-Z0-9_]\.)run|startMeasuring|stopMeasuring)\b 224 | 225 | 226 | comment 227 | matlab.perftest.TimeExperiment 228 | name 229 | support.function.builtin.matlab 230 | match 231 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:limitingSamplingError|(?<=[a-zA-Z0-9_]\.)run|withFixedSampleSize)\b 232 | 233 | 234 | comment 235 | matlab.perftest.TimeResult 236 | name 237 | support.function.builtin.matlab 238 | match 239 | (?<=[a-zA-Z0-9_]\.)(?:comparisonPlot|(?<=[a-zA-Z0-9_]\.)run|sampleSummary|samplefun)\b 240 | 241 | 242 | comment 243 | matlab.settings.SettingsFileUpgrader 244 | name 245 | support.function.builtin.matlab 246 | match 247 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:move|remove)\b 248 | 249 | 250 | comment 251 | matlab.system.mixin.FiniteSource 252 | name 253 | support.function.builtin.matlab 254 | match 255 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:isDoneImpl)\b 256 | 257 | 258 | comment 259 | matlab.ui.componentcontainer.ComponentContainer 260 | name 261 | support.function.builtin.matlab 262 | match 263 | (?<=[a-zA-Z0-9_]\.)setup\b|(?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)update\b 264 | 265 | 266 | comment 267 | matlab.uitest.TestCase 268 | name 269 | support.function.builtin.matlab 270 | match 271 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addTeardown|applyFixture|forInteractiveUse|getSharedTestFixtures|log|onFailure|run)\b 272 | 273 | 274 | comment 275 | matlab.unittest.FunctionTestCase 276 | name 277 | support.function.builtin.matlab 278 | match 279 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addTeardown|applyFixture|getSharedTestFixtures|log|onFailure|run)\b 280 | 281 | 282 | comment 283 | matlab.unittest.TestCase 284 | name 285 | support.function.builtin.matlab 286 | match 287 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addTeardown|applyFixture|getSharedTestFixtures|log|onFailure|run)\b 288 | 289 | 290 | comment 291 | matlab.unittest.TestResult 292 | name 293 | support.function.builtin.matlab 294 | match 295 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)assertSuccess\b|(?<=[a-zA-Z0-9_]\.)table\b 296 | 297 | 298 | comment 299 | matlab.unittest.TestSuite 300 | name 301 | support.function.builtin.matlab 302 | match 303 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:run|selectIf|sortByFixtures)\b 304 | 305 | 306 | comment 307 | matlab.unittest.constraints.BooleanConstraint 308 | name 309 | support.function.builtin.matlab 310 | match 311 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getDiagnosticFor|getNegativeDiagnosticFor|satisfiedBy)\b 312 | 313 | 314 | comment 315 | matlab.unittest.constraints.Constraint 316 | name 317 | support.function.builtin.matlab 318 | match 319 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getDiagnosticFor|satisfiedBy)\b 320 | 321 | 322 | comment 323 | matlab.unittest.constraints.HasInf 324 | name 325 | support.function.builtin.matlab 326 | match 327 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getDiagnosticFor|getNegativeDiagnosticFor|satisfiedBy)\b 328 | 329 | 330 | comment 331 | matlab.unittest.constraints.HasNaN 332 | name 333 | support.function.builtin.matlab 334 | match 335 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getDiagnosticFor|getNegativeDiagnosticFor|satisfiedBy)\b 336 | 337 | 338 | comment 339 | matlab.unittest.constraints.HasUniqueElements 340 | name 341 | support.function.builtin.matlab 342 | match 343 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getDiagnosticFor|getNegativeDiagnosticFor|satisfiedBy)\b 344 | 345 | 346 | comment 347 | matlab.unittest.constraints.IsAnything 348 | name 349 | support.function.builtin.matlab 350 | match 351 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getDiagnosticFor|satisfiedBy)\b 352 | 353 | 354 | comment 355 | matlab.unittest.constraints.IsEmpty 356 | name 357 | support.function.builtin.matlab 358 | match 359 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getDiagnosticFor|getNegativeDiagnosticFor|satisfiedBy)\b 360 | 361 | 362 | comment 363 | matlab.unittest.constraints.IsFalse 364 | name 365 | support.function.builtin.matlab 366 | match 367 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getDiagnosticFor|satisfiedBy)\b 368 | 369 | 370 | comment 371 | matlab.unittest.constraints.IsFile 372 | name 373 | support.function.builtin.matlab 374 | match 375 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getDiagnosticFor|getNegativeDiagnosticFor|satisfiedBy)\b 376 | 377 | 378 | comment 379 | matlab.unittest.constraints.IsFinite 380 | name 381 | support.function.builtin.matlab 382 | match 383 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getDiagnosticFor|getNegativeDiagnosticFor|satisfiedBy)\b 384 | 385 | 386 | comment 387 | matlab.unittest.constraints.IsFolder 388 | name 389 | support.function.builtin.matlab 390 | match 391 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getDiagnosticFor|getNegativeDiagnosticFor|satisfiedBy)\b 392 | 393 | 394 | comment 395 | matlab.unittest.constraints.IsReal 396 | name 397 | support.function.builtin.matlab 398 | match 399 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getDiagnosticFor|getNegativeDiagnosticFor|satisfiedBy)\b 400 | 401 | 402 | comment 403 | matlab.unittest.constraints.IsScalar 404 | name 405 | support.function.builtin.matlab 406 | match 407 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getDiagnosticFor|getNegativeDiagnosticFor|satisfiedBy)\b 408 | 409 | 410 | comment 411 | matlab.unittest.constraints.IsSparse 412 | name 413 | support.function.builtin.matlab 414 | match 415 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getDiagnosticFor|getNegativeDiagnosticFor|satisfiedBy)\b 416 | 417 | 418 | comment 419 | matlab.unittest.constraints.IsTrue 420 | name 421 | support.function.builtin.matlab 422 | match 423 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getDiagnosticFor|satisfiedBy)\b 424 | 425 | 426 | comment 427 | matlab.unittest.constraints.ReturnsTrue 428 | name 429 | support.function.builtin.matlab 430 | match 431 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getDiagnosticFor|satisfiedBy)\b 432 | 433 | 434 | comment 435 | matlab.unittest.constraints.PublicPropertyComparator 436 | name 437 | support.function.builtin.matlab 438 | match 439 | (?<=[a-zA-Z0-9_]\.)supportingAllValues\b 440 | 441 | 442 | comment 443 | matlab.unittest.constraints.Tolerance 444 | name 445 | support.function.builtin.matlab 446 | match 447 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getDiagnosticFor|satisfiedBy|supports)\b 448 | 449 | 450 | comment 451 | matlab.unittest.diagnostics.ConstraintDiagnostic 452 | name 453 | support.function.builtin.matlab 454 | match 455 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addCondition|addConditionsFrom|getDisplayableString|getPostActValString|getPostConditionString|getPostDescriptionString|getPostExpValString|getPreDescriptionString)\b 456 | 457 | 458 | comment 459 | matlab.unittest.diagnostics.Diagnostic 460 | name 461 | support.function.builtin.matlab 462 | match 463 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:diagnose|join)\b 464 | 465 | 466 | comment 467 | matlab.unittest.diagnostics.FileArtifact 468 | name 469 | support.function.builtin.matlab 470 | match 471 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:copyTo)\b 472 | 473 | 474 | comment 475 | matlab.unittest.diagnostics.FunctionHandleDiagnostic 476 | name 477 | support.function.builtin.matlab 478 | match 479 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:diagnose|Fcn|join)\b 480 | 481 | 482 | comment 483 | matlab.unittest.diagnostics.ScreenshotDiagnostic 484 | name 485 | support.function.builtin.matlab 486 | match 487 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:diagnose|join)\b 488 | 489 | 490 | comment 491 | matlab.unittest.fixtures.Fixture 492 | name 493 | support.function.builtin.matlab 494 | match 495 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addTeardown|applyFixture|isCompatible|log|needsReset|onFailure|setup|teardown)\b 496 | 497 | 498 | comment 499 | matlab.unittest.measurement.DefaultMeasurementResult 500 | name 501 | support.function.builtin.matlab 502 | match 503 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:samplefun|sampleSummary)\b 504 | 505 | 506 | comment 507 | matlab.unittest.measurement.MeasurementResult 508 | name 509 | support.function.builtin.matlab 510 | match 511 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:samplefun|sampleSummary)\b 512 | 513 | 514 | comment 515 | matlab.unittest.parameters.ClassSetupParameter 516 | name 517 | support.function.builtin.matlab 518 | match 519 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)fromData\b 520 | 521 | 522 | comment 523 | matlab.unittest.parameters.EmptyParameter 524 | name 525 | support.function.builtin.matlab 526 | match 527 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)fromData\b 528 | 529 | 530 | comment 531 | matlab.unittest.parameters.MethodSetupParameter 532 | name 533 | support.function.builtin.matlab 534 | match 535 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)fromData\b 536 | 537 | 538 | comment 539 | matlab.unittest.parameters.Parameter 540 | name 541 | support.function.builtin.matlab 542 | match 543 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)fromData\b 544 | 545 | 546 | comment 547 | matlab.unittest.parameters.TestParameter 548 | name 549 | support.function.builtin.matlab 550 | match 551 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)fromData\b 552 | 553 | 554 | comment 555 | matlab.unittest.plugins.OutputStream 556 | name 557 | support.function.builtin.matlab 558 | match 559 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:ToStandardOutput|(?<=[a-zA-Z0-9_]\.)print)\b 560 | 561 | 562 | comment 563 | matlab.unittest.plugins.Parallelizable 564 | name 565 | support.function.builtin.matlab 566 | match 567 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:retrieveFrom|storeIn)\b 568 | 569 | 570 | comment 571 | matlab.unittest.plugins.QualifyingPlugin 572 | name 573 | support.function.builtin.matlab 574 | match 575 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:assertUsing|assumeUsing|createSharedTestFixture|createTestClassInstance|createTestMethodInstance|fatalAssertUsing|reportFinalizedResult|reportFinalizedSuite|runSession|runTest|runTestClass|runTestMethod|runTestSuite|setupSharedTestFixture|setupTestClass|setupTestMethod|teardownSharedTestFixture|teardownTestClass|teardownTestMethod|verifyUsing)\b 576 | 577 | 578 | comment 579 | matlab.unittest.plugins.TestRunnerPlugin 580 | name 581 | support.function.builtin.matlab 582 | match 583 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:createSharedTestFixture|createTestClassInstance|createTestMethodInstance|reportFinalizedResult|reportFinalizedSuite|runSession|runTest|runTestClass|runTestMethod|runTestSuite|setupSharedTestFixture|setupTestClass|setupTestMethod|teardownSharedTestFixture|teardownTestClass|teardownTestMethod)\b 584 | 585 | 586 | comment 587 | matlab.unittest.plugins.ToStandardOutput 588 | name 589 | support.function.builtin.matlab 590 | match 591 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:ToStandardOutput|(?<=[a-zA-Z0-9_]\.)print)\b 592 | 593 | 594 | comment 595 | matlab.unittest.plugins.ToUniqueFile 596 | name 597 | support.function.builtin.matlab 598 | match 599 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:ToUniqueFile|(?<=[a-zA-Z0-9_]\.)print)\b 600 | 601 | 602 | comment 603 | matlab.unittest.qualifications.AssertionFailedException 604 | name 605 | support.function.builtin.matlab 606 | match 607 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:identifier|message|cause|stack)\b 608 | 609 | 610 | comment 611 | matlab.unittest.qualifications.AssumptionFailedException 612 | name 613 | support.function.builtin.matlab 614 | match 615 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:identifier|message|cause|stack)\b 616 | 617 | 618 | comment 619 | matlab.unittest.qualifications.FatalAssertionFailedException 620 | name 621 | support.function.builtin.matlab 622 | match 623 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:identifier|message|cause|stack)\b 624 | 625 | 626 | comment 627 | matlab.uitest.TestCase 628 | name 629 | support.function.builtin.matlab 630 | match 631 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addTeardown|applyFixture|choose|chooseContextMenu|dismissAlertDialog|drag|forInteractiveUse|forInteractiveUse|getSharedTestFixtures|hover|log|onFailure|press|run|type)\b 632 | 633 | 634 | comment 635 | matlab.unittest.plugins.diagnosticrecord.DiagnosticRecord 636 | name 637 | support.function.builtin.matlab 638 | match 639 | (?<=[a-zA-Z0-9_]\.)(?:selectFailed|selectIncomplete|selectLogged|selectPassed)\b 640 | 641 | 642 | comment 643 | matlab.unittest.plugins.diagnosticrecord.ExceptionDiagnosticRecord 644 | name 645 | support.function.builtin.matlab 646 | match 647 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:selectFailed|selectIncomplete|selectLogged|selectPassed)\b 648 | 649 | 650 | comment 651 | matlab.unittest.plugins.diagnosticrecord.LoggedDiagnosticRecord 652 | name 653 | support.function.builtin.matlab 654 | match 655 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:selectFailed|selectIncomplete|selectLogged|selectPassed)\b 656 | 657 | 658 | comment 659 | matlab.unittest.plugins.diagnosticrecord.QualificationDiagnosticRecord 660 | name 661 | support.function.builtin.matlab 662 | match 663 | (?<=[a-zA-Z0-9_]\.)(?:selectFailed|selectIncomplete|selectLogged|selectPassed)\b 664 | 665 | 666 | comment 667 | matlab.unittest.plugins.plugindata.ResultDetails 668 | name 669 | support.function.builtin.matlab 670 | match 671 | (?<=[a-zA-Z0-9_]\.)(?:append)\b 672 | 673 | 674 | 675 | 676 | package_data_functions 677 | 678 | patterns 679 | 680 | 681 | 682 | comment 683 | matlab.io.Datastore 684 | name 685 | support.function.data.matlab 686 | match 687 | (?<=[a-zA-Z0-9_]\.)(?:combine|hasdata|isPartitionable|isShuffleable|preview|read|readall|reset|transform)\b 688 | 689 | 690 | comment 691 | matlab.io.datastore.BlockedFileSet 692 | name 693 | support.function.data.matlab 694 | match 695 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:hasNextBlock|hasPreviousBlock|nextblock|previousblock|progress|subset)\b 696 | 697 | 698 | comment 699 | matlab.io.datastore.DsFileReader 700 | name 701 | support.function.data.matlab 702 | match 703 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:readByIndex|seek|(?<=[a-zA-Z0-9_]\.)(?:hasdata|read))\b 704 | 705 | 706 | comment 707 | matlab.io.datastore.DsFileSet 708 | name 709 | support.function.data.matlab 710 | match 711 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:hasfile|maxpartitions|nextfile|partition|subset|resolve|(?<=[a-zA-Z0-9_]\.)reset)\b 712 | 713 | 714 | comment 715 | matlab.io.datastore.FileSet 716 | name 717 | support.function.data.matlab 718 | match 719 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:hasNextFile|hasPreviousFile|maxpartitions|nextfile|partition|previousfile|progress|subset|(?<=[a-zA-Z0-9_]\.)reset)\b 720 | 721 | 722 | comment 723 | matlab.io.datastore.FileWritable 724 | name 725 | support.function.data.matlab 726 | match 727 | (?<=[a-zA-Z0-9_]\.)(?:writeall)\b 728 | 729 | 730 | comment 731 | matlab.io.datastore.FoldersPropertyProvider 732 | name 733 | support.function.data.matlab 734 | match 735 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:populateFoldersFromLocation)\b 736 | 737 | 738 | comment 739 | matlab.io.datastore.HadoopFileBased 740 | name 741 | support.function.data.matlab 742 | match 743 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getLocation|initializeDatastore|isfullfile)\b 744 | 745 | 746 | comment 747 | matlab.io.datastore.HadoopLocationBased 748 | name 749 | support.function.data.matlab 750 | match 751 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getLocation|initializeDatastore|isfullfile)\b 752 | 753 | 754 | comment 755 | matlab.io.datastore.Partitionable 756 | name 757 | support.function.data.matlab 758 | match 759 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:maxpartitions|numpartitions|partition)\b 760 | 761 | 762 | comment 763 | matlab.io.datastore.PartitionableByIndex 764 | name 765 | support.function.data.matlab 766 | match 767 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:partitionByIndex)\b 768 | 769 | 770 | comment 771 | matlab.io.datastore.sdidatastore 772 | name 773 | support.function.data.matlab 774 | match 775 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:hasdata|read|readall|(?<=[a-zA-Z0-9_]\.)(?:preview|reset))\b 776 | 777 | 778 | comment 779 | matlab.io.datastore.SimulationDatastore 780 | name 781 | support.function.data.matlab 782 | match 783 | (?<=[a-zA-Z0-9_]\.)(?:hasdata|isPartitionable|isShuffleable|preview|progress|read|readall|reset)\b 784 | 785 | 786 | comment 787 | matlab.io.datastore.Shuffleable 788 | name 789 | support.function.data.matlab 790 | match 791 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:shuffle)\b 792 | 793 | 794 | comment 795 | matlab.io.xml.dom.Attr 796 | name 797 | support.function.data.matlab 798 | match 799 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:cloneNode|compareDocumentPosition|getBaseURI|getElementByID|getLength|getLocalName|getName|getNamespaceURI|getNextSibling|getNodeName|getNodeType|getNodeTypeName|getNodeValue|getOwnerDocument|getOwnerElement|getParentNode|getPrefix|getPreviousSibling|getSchemaTypeInfo|getSpecified|getTextContent|getValue|isEqualNode|isID|isSameNode|isSameNode|lookupNamespaceURI|lookupPrefix|setNodeValue|setTextContent|setValue)\b 800 | 801 | 802 | comment 803 | matlab.io.xml.dom.CDataSection 804 | name 805 | support.function.data.matlab 806 | match 807 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:appendData|cloneNode|compareDocumentPosition|deleteData|getBaseURI|getData|getLength|getNextSibling|getNodeName|getNodeTypeName|getNodeValue|getParentNode|getPreviousSibling|getTextContent|insertData|isEqualNode|isSameNode|isSameNode|replaceData|setData|setNodeValue|setTextContent|splitText|substringData)\b 808 | 809 | 810 | comment 811 | matlab.io.xml.dom.Comment 812 | name 813 | support.function.data.matlab 814 | match 815 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:appendData|cloneNode|compareDocumentPosition|deleteData|getBaseURI|getData|getLength|getNextSibling|getNodeName|getNodeTypeName|getNodeValue|getParentNode|getPreviousSibling|getTextContent|insertData|isEqualNode|isSameNode|isSameNode|replaceData|setData|setNodeValue|setTextContent|splitText|substringData)\b 816 | 817 | 818 | comment 819 | matlab.io.xml.dom.Document 820 | name 821 | support.function.data.matlab 822 | match 823 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:appendChild|cloneNode|createAttribute|createAttributeNS|createComment|createDocumentFragment|createElement|createElementNS|createNSResolver|createProcessingInstruction|createTextNode|getAttributes|getBaseURI|getChildNodes|getChildren|getDOMConfig|getDoctype|getDocumentElement|getDocumentURI|getElementByID|getElementsByTagName|getElementsByTagNameNS|getFirstChild|getInputEncoding|getLastChild|getLocalName|getNamespaceURI|getNextSibling|getNodeName|getNodeType|getNodeValue|getOwnerDocument|getParentNode|getPrefix|getPreviousSibling|getTextContent|getXMLStandalone|getXMLVersion|getXmlEncoding|getXmlEncoding|hasAttributes|hasChildNodes|importNode|importNode|isDefaultNamespace|isEqualNode|isSameNode|isSameNode|lookupNamespaceURI|lookupPrefix|normalize|normalizeDocument|removeChild|renameNode|replaceChild|setDocumentURI|setDocumentURI|setNodeValue|setPrefix|setTextContent|setXMLStandalone|setXMLStandalone|xmlwrite)\b 824 | 825 | 826 | comment 827 | matlab.io.xml.dom.DocumentFragment 828 | name 829 | support.function.data.matlab 830 | match 831 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:appendChild|child|cloneNode|compareDocumentPosition|getAttributes|getChildNodes|getChildren|getFirstChild|getLastChild|getLength|getLocalName|getNamespaceURI|getNextSibling|getNodeName|getNodeType|getNodeValue|getOwnerDocument|getParentNode|getPrefix|getPreviousSibling|getTextContent|hasAttributes|hasChildNodes|insertBefore|isDefaultNamespace|isEqualNode|isSameNode|isSameNode|item|lookupNamespaceURI|lookupPrefix|normalize|removeChild|replaceChild|setNodeValue|setPrefix|setTextContent)\b 832 | 833 | 834 | comment 835 | matlab.io.xml.dom.DocumentType 836 | name 837 | support.function.data.matlab 838 | match 839 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getEntities|getInternalSubset|getName|getNotations|getPublicID|getSystemID)\b 840 | 841 | 842 | comment 843 | matlab.io.xml.dom.Element 844 | name 845 | support.function.data.matlab 846 | match 847 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:appendChild|cloneNode|compareDocumentPosition|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getAttributes|getBaseURI|getChildElementCount|getChildNodes|getChildren|getElementsByTagName|getElementsByTagNameNS|getFirstChild|getFirstElementChild|getLastChild|getLastElementChild|getLocalName|getNamespaceURI|getNextElementSibling|getNextSibling|getNodeIndex|getNodeName|getNodeType|getNodeTypeName|getNodeValue|getOwnerDocument|getParentNode|getPrefix|getPreviousElementSibling|getPreviousSibling|getSchemaTypeInfo|getTagName|getTagName|getTextContent|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|isDefaultNamespace|isEqualNode|isSameNode|isSameNode|lookupNamespaceURI|lookupPrefix|normalize|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|replaceChild|setAttribute|setAttributeNS|setAttributeNS|setAttributeNode|setAttributeNode|setAttributeNodeNS|setAttributeNodeNS|setIDAttribute|setIDAttributeNS|setIDAttributeNode|setNodeValue|setTextContent)\b 848 | 849 | 850 | comment 851 | matlab.io.xml.dom.Entity 852 | name 853 | support.function.data.matlab 854 | match 855 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getInputEncoding|getNodeName|getNotationName|getPublicID|getSystemID|getXMLEncoding|getXMLVersion)\b 856 | 857 | 858 | comment 859 | matlab.io.xml.dom.EntityResolver 860 | name 861 | support.function.data.matlab 862 | match 863 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:resolveEntity)\b 864 | 865 | 866 | comment 867 | matlab.io.xml.dom.NamedNodeMap 868 | name 869 | support.function.data.matlab 870 | match 871 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getLength|getNamedItem|getNamedItemNS|item)\b 872 | 873 | 874 | comment 875 | matlab.io.xml.dom.NodeList 876 | name 877 | support.function.data.matlab 878 | match 879 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getLength|getTextContent|item|node)\b 880 | 881 | 882 | comment 883 | matlab.io.xml.dom.Notation 884 | name 885 | support.function.data.matlab 886 | match 887 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getNodeName|getPublicID|getSystemID)\b 888 | 889 | 890 | comment 891 | matlab.io.xml.dom.Parser 892 | name 893 | support.function.data.matlab 894 | match 895 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:parseFile|parseString)\b 896 | 897 | 898 | comment 899 | matlab.io.xml.dom.ProcessingInstruction 900 | name 901 | support.function.data.matlab 902 | match 903 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getData|getTarget|setData)\b 904 | 905 | 906 | comment 907 | matlab.io.xml.dom.ResourceIdentifier 908 | name 909 | support.function.data.matlab 910 | match 911 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getLocator|getResourceIdentifierType)\b 912 | 913 | 914 | comment 915 | matlab.io.xml.dom.Text 916 | name 917 | support.function.data.matlab 918 | match 919 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:appendData|cloneNode|compareDocumentPosition|deleteData|getBaseURI|getData|getLength|getNextSibling|getNodeName|getNodeType|getNodeTypeName|getNodeValue|getOwnerDocument|getParentNode|getPreviousSibling|getTextContent|insertData|isEqualNode|isSameNode|isSameNode|replaceData|setData|setNodeValue|setTextContent|splitText|substringData)\b 920 | 921 | 922 | comment 923 | matlab.io.xml.dom.TypeInfo 924 | name 925 | support.function.data.matlab 926 | match 927 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getTypeName|getTypeNameSpace|isDerivedFrom)\b 928 | 929 | 930 | comment 931 | matlab.io.xml.transform.ResultDocument 932 | name 933 | support.function.data.matlab 934 | match 935 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getResult)\b 936 | 937 | 938 | comment 939 | matlab.io.xml.transform.ResultString 940 | name 941 | support.function.data.matlab 942 | match 943 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getResult)\b 944 | 945 | 946 | comment 947 | matlab.io.xml.transform.SourceDocument 948 | name 949 | support.function.data.matlab 950 | match 951 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getSource)\b 952 | 953 | 954 | comment 955 | matlab.io.xml.transform.StylesheetSourceDocument 956 | name 957 | support.function.data.matlab 958 | match 959 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getSource)\b 960 | 961 | 962 | comment 963 | matlab.io.xml.transform.StylesheetSourceFile 964 | name 965 | support.function.data.matlab 966 | match 967 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getSource)\b 968 | 969 | 970 | comment 971 | matlab.io.xml.transform.Transformer 972 | name 973 | support.function.data.matlab 974 | match 975 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:clearStylesheetParams|compileStylesheet|setStylesheetParam|transform|transformToString)\b 976 | 977 | 978 | comment 979 | matlab.io.xml.xpath.Evaluator 980 | name 981 | support.function.data.matlab 982 | match 983 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:compileExpression|evaluate)\b 984 | 985 | 986 | comment 987 | matlab.io.xml.xpath.PrefixResolver 988 | name 989 | support.function.data.matlab 990 | match 991 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getNamespaceForPrefix|getURL)\b 992 | 993 | 994 | 995 | 996 | package_external_functions 997 | 998 | patterns 999 | 1000 | 1001 | 1002 | 1003 | comment 1004 | matlab.io.hdf4.sd 1005 | name 1006 | support.function.external.matlab 1007 | match 1008 | (?<=[^\w]sd\.)(?:attrInfo|close|create|dimInfo|endAccess|fileInfo|findAttr|getCal|getChunkInfo|getCompInfo|getDataStrs|getDimID|getDimScale|getDimStrs|getFilename|getFillValue|getFillValue|getInfo|getRange|idToRef|idType|isCoordVar|isRecord|nameToIndex|nameToIndices|readAttr|readChunk|readData|refToIndex|select|setAttr|setCal|setChunk|setCompress|setDataStrs|setDimName|setDimScale|setDimStrs|setExternalFile|setFillMode|setFillValue|setNBitDataSet|setRange|start|writeChunk|writeData)\b 1009 | 1010 | 1011 | comment 1012 | matlab.io.hdfeos.gd 1013 | name 1014 | support.function.external.matlab 1015 | match 1016 | (?<=[^\w]gd\.)(?:attrInfo|close|create|dimInfo|endAccess|fileInfo|findAttr|getCal|getChunkInfo|getCompInfo|getDataStrs|getDimID|getDimScale|getDimStrs|getFilename|getFillValue|getFillValue|getInfo|getRange|idToRef|idType|isCoordVar|isRecord|nameToIndex|nameToIndices|readAttr|readChunk|readData|refToIndex|select|setAttr|setCal|setChunk|setCompress|setDataStrs|setDimName|setDimScale|setDimStrs|setExternalFile|setFillMode|setFillValue|setNBitDataSet|setRange|start|writeChunk|writeData)\b 1017 | 1018 | 1019 | comment 1020 | matlab.io.hdfeos.sw 1021 | name 1022 | support.function.external.matlab 1023 | match 1024 | (?<=[^\w]sw\.)(?:attach|close|compInfo|create|defBoxRegion|defComp|defDataField|defDim|defDimMap|defGeoField|defTimePeriod|defVrtRegion|detach|dimInfo|extractPeriod|extractRegion|fieldInfo|geoMapInfo|getFillValue|idxMapInfo|inqAttrs|inqDataFields|inqDims|inqGeoFields|inqIdxMaps|inqMaps|inqSwath|mapInfo|nEntries|open|periodInfo|readAttr|readField|regionInfo|setFillValue|writeAttr|writeField)\b 1025 | 1026 | 1027 | comment 1028 | matlab.mex.MexHost 1029 | name 1030 | support.function.external.matlab 1031 | match 1032 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)feval\b 1033 | 1034 | 1035 | comment 1036 | matlab.net.QueryParameter 1037 | name 1038 | support.function.external.matlab 1039 | match 1040 | (?<=[a-zA-Z0-9_]\.)(?:char|string)\b 1041 | 1042 | 1043 | comment 1044 | matlab.net.http.AuthInfo 1045 | name 1046 | support.function.external.matlab 1047 | match 1048 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getParameter|removeParameter|setParameter|(?<=[a-zA-Z0-9_]\.)(?:char|eq|isequal|string))\b 1049 | 1050 | 1051 | comment 1052 | matlab.net.http.Cookie 1053 | name 1054 | support.function.external.matlab 1055 | match 1056 | (?<=[a-zA-Z0-9_]\.)(?:char|string)\b 1057 | 1058 | 1059 | comment 1060 | matlab.net.http.CookieInfo 1061 | name 1062 | support.function.external.matlab 1063 | match 1064 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:collectFromLog|(?<=[a-zA-Z0-9_]\.)(?:char|string))\b 1065 | 1066 | 1067 | comment 1068 | matlab.net.http.HeaderField 1069 | name 1070 | support.function.external.matlab 1071 | match 1072 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1073 | 1074 | 1075 | comment 1076 | matlab.net.http.RequestLine 1077 | name 1078 | support.function.external.matlab 1079 | match 1080 | (?<=[a-zA-Z0-9_]\.)(?:char|string)\b 1081 | 1082 | 1083 | comment 1084 | matlab.net.http.StartLine 1085 | name 1086 | support.function.external.matlab 1087 | match 1088 | (?<=[a-zA-Z0-9_]\.)(?:char|string)\b 1089 | 1090 | 1091 | comment 1092 | matlab.net.http.StatusLine 1093 | name 1094 | support.function.external.matlab 1095 | match 1096 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?<=[a-zA-Z0-9_]\.)(?:char|string)\b 1097 | 1098 | 1099 | comment 1100 | matlab.net.http.MediaType 1101 | name 1102 | support.function.external.matlab 1103 | match 1104 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getParameter|setParameter|(?<=[a-zA-Z0-9_]\.)(?:char|eq|isequal|string))\b 1105 | 1106 | 1107 | comment 1108 | matlab.net.http.Message 1109 | name 1110 | support.function.external.matlab 1111 | match 1112 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|getFields|removeFields|replaceFields|show|(?<=[a-zA-Z0-9_]\.)(?:char|isequal|string))\b 1113 | 1114 | 1115 | comment 1116 | matlab.net.http.MessageBody 1117 | name 1118 | support.function.external.matlab 1119 | match 1120 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:show|(?<=[a-zA-Z0-9_]\.)(?:char|string))\b 1121 | 1122 | 1123 | comment 1124 | matlab.net.http.ProgressMonitor 1125 | name 1126 | support.function.external.matlab 1127 | match 1128 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)done\b 1129 | 1130 | 1131 | comment 1132 | matlab.net.http.ProtocolVersion 1133 | name 1134 | support.function.external.matlab 1135 | match 1136 | (?<=[a-zA-Z0-9_]\.)(?:char|equal|isequal|string)\b 1137 | 1138 | 1139 | comment 1140 | matlab.net.http.RequestMessage 1141 | name 1142 | support.function.external.matlab 1143 | match 1144 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|complete|getFields|removeFields|send|(?<=[a-zA-Z0-9_]\.)(?:char|isequal|string))\b 1145 | 1146 | 1147 | comment 1148 | matlab.net.http.RequestMethod 1149 | name 1150 | support.function.external.matlab 1151 | match 1152 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|complete|getFields|removeFields|replaceFields|show|(?<=[a-zA-Z0-9_]\.)(?:char|isequal|string))\b 1153 | 1154 | 1155 | comment 1156 | matlab.net.http.ResponseMessage 1157 | name 1158 | support.function.external.matlab 1159 | match 1160 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|complete|getFields|removeFields|replaceFields|show|(?<=[a-zA-Z0-9_]\.)(?:char|isequal|string))\b 1161 | 1162 | 1163 | comment 1164 | matlab.net.http.StatusClass 1165 | name 1166 | support.function.external.matlab 1167 | match 1168 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)getReasonPhrase\b 1169 | 1170 | 1171 | comment 1172 | matlab.net.http.field.AcceptField 1173 | name 1174 | support.function.external.matlab 1175 | match 1176 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1177 | 1178 | 1179 | comment 1180 | matlab.net.http.field.AuthenticateField 1181 | name 1182 | support.function.external.matlab 1183 | match 1184 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1185 | 1186 | 1187 | comment 1188 | matlab.net.http.field.AuthenticationInfoField 1189 | name 1190 | support.function.external.matlab 1191 | match 1192 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1193 | 1194 | 1195 | comment 1196 | matlab.net.http.field.AuthorizationField 1197 | name 1198 | support.function.external.matlab 1199 | match 1200 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1201 | 1202 | 1203 | comment 1204 | matlab.net.http.field.ContentDispositionField 1205 | name 1206 | support.function.external.matlab 1207 | match 1208 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1209 | 1210 | 1211 | comment 1212 | matlab.net.http.field.ContentLengthField 1213 | name 1214 | support.function.external.matlab 1215 | match 1216 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1217 | 1218 | 1219 | comment 1220 | matlab.net.http.field.ContentLocationField 1221 | name 1222 | support.function.external.matlab 1223 | match 1224 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1225 | 1226 | 1227 | comment 1228 | matlab.net.http.field.ContentTypeField 1229 | name 1230 | support.function.external.matlab 1231 | match 1232 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1233 | 1234 | 1235 | comment 1236 | matlab.net.http.field.CookieField 1237 | name 1238 | support.function.external.matlab 1239 | match 1240 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1241 | 1242 | 1243 | comment 1244 | matlab.net.http.field.DateField 1245 | name 1246 | support.function.external.matlab 1247 | match 1248 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1249 | 1250 | 1251 | comment 1252 | matlab.net.http.field.GenericField 1253 | name 1254 | support.function.external.matlab 1255 | match 1256 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1257 | 1258 | 1259 | comment 1260 | matlab.net.http.field.GenericParameterizedField 1261 | name 1262 | support.function.external.matlab 1263 | match 1264 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1265 | 1266 | 1267 | comment 1268 | matlab.net.http.field.HTTPDateField 1269 | name 1270 | support.function.external.matlab 1271 | match 1272 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1273 | 1274 | 1275 | comment 1276 | matlab.net.http.field.IntegerField 1277 | name 1278 | support.function.external.matlab 1279 | match 1280 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1281 | 1282 | 1283 | comment 1284 | matlab.net.http.field.LocationField 1285 | name 1286 | support.function.external.matlab 1287 | match 1288 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1289 | 1290 | 1291 | comment 1292 | matlab.net.http.field.MediaRangeField 1293 | name 1294 | support.function.external.matlab 1295 | match 1296 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1297 | 1298 | 1299 | comment 1300 | matlab.net.http.field.SetCookieField 1301 | name 1302 | support.function.external.matlab 1303 | match 1304 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1305 | 1306 | 1307 | comment 1308 | matlab.net.http.field.URIReferenceField 1309 | name 1310 | support.function.external.matlab 1311 | match 1312 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:addFields|changeFields|convertLike|displaySubclasses|getFields|removeFields|replaceFields|(?<=[a-zA-Z0-9_]\.)(?:char|convert|eq|isequal|parse|string))\b 1313 | 1314 | 1315 | comment 1316 | matlab.net.http.io.BinaryConsumer 1317 | name 1318 | support.function.external.matlab 1319 | match 1320 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:delegateTo|initialize|putData|(?<=[a-zA-Z0-9_]\.)start)\b 1321 | 1322 | 1323 | comment 1324 | matlab.net.http.io.ContentConsumer 1325 | name 1326 | support.function.external.matlab 1327 | match 1328 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:delegateTo|initialize|putData|(?<=[a-zA-Z0-9_]\.)start)\b 1329 | 1330 | 1331 | comment 1332 | matlab.net.http.io.ContentProvider 1333 | name 1334 | support.function.external.matlab 1335 | match 1336 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:delegateTo|expectedContentLength|getData|preferredBufferSize|restartable|reusable|(?<=[a-zA-Z0-9_]\.)(?:complete|show|start|string))\b 1337 | 1338 | 1339 | comment 1340 | matlab.net.http.io.FileConsumer 1341 | name 1342 | support.function.external.matlab 1343 | match 1344 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:delegateTo|initialize|putData|(?<=[a-zA-Z0-9_]\.)start)\b 1345 | 1346 | 1347 | comment 1348 | matlab.net.http.io.FileProvider 1349 | name 1350 | support.function.external.matlab 1351 | match 1352 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:delegateTo|expectedContentLength|getData|preferredBufferSize|restartable|reusable|(?<=[a-zA-Z0-9_]\.)(?:complete|show|start|string))\b 1353 | 1354 | 1355 | comment 1356 | matlab.net.http.io.FormProvider 1357 | name 1358 | support.function.external.matlab 1359 | match 1360 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:delegateTo|expectedContentLength|preferredBufferSize|restartable|reusable|(?<=[a-zA-Z0-9_]\.)(?:complete|show|start|string))\b 1361 | 1362 | 1363 | comment 1364 | matlab.net.http.io.GenericConsumer 1365 | name 1366 | support.function.external.matlab 1367 | match 1368 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:delegateTo|initialize|putData|(?<=[a-zA-Z0-9_]\.)start)\b 1369 | 1370 | 1371 | comment 1372 | matlab.net.http.io.GenericProvider 1373 | name 1374 | support.function.external.matlab 1375 | match 1376 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:delegateTo|expectedContentLength|getData|preferredBufferSize|restartable|reusable|(?<=[a-zA-Z0-9_]\.)(?:complete|start))\b 1377 | 1378 | 1379 | comment 1380 | matlab.net.http.io.ImageConsumer 1381 | name 1382 | support.function.external.matlab 1383 | match 1384 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:delegateTo|initialize|putData|(?<=[a-zA-Z0-9_]\.)start)\b 1385 | 1386 | 1387 | comment 1388 | matlab.net.http.io.ImageProvider 1389 | name 1390 | support.function.external.matlab 1391 | match 1392 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:delegateTo|expectedContentLength|preferredBufferSize|restartable|reusable|(?<=[a-zA-Z0-9_]\.)(?:complete|show|start|string))\b 1393 | 1394 | 1395 | comment 1396 | matlab.net.http.io.JSONConsumer 1397 | name 1398 | support.function.external.matlab 1399 | match 1400 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:delegateTo|initialize|putData|(?<=[a-zA-Z0-9_]\.)start)\b 1401 | 1402 | 1403 | comment 1404 | matlab.net.http.io.JSONProvider 1405 | name 1406 | support.function.external.matlab 1407 | match 1408 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:delegateTo|expectedContentLength|getData|preferredBufferSize|restartable|reusable|(?<=[a-zA-Z0-9_]\.)(?:complete|start))\b 1409 | 1410 | 1411 | comment 1412 | matlab.net.http.io.MultipartConsumer 1413 | name 1414 | support.function.external.matlab 1415 | match 1416 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:delegateTo|initialize|putData|(?<=[a-zA-Z0-9_]\.)start)\b 1417 | 1418 | 1419 | comment 1420 | matlab.net.http.io.MultipartFormProvider 1421 | name 1422 | support.function.external.matlab 1423 | match 1424 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:delegateTo|expectedContentLength|getData|preferredBufferSize|restartable|reusable|(?<=[a-zA-Z0-9_]\.)(?:complete|start))\b 1425 | 1426 | 1427 | comment 1428 | matlab.net.http.io.MultipartProvider 1429 | name 1430 | support.function.external.matlab 1431 | match 1432 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:delegateTo|expectedContentLength|getData|preferredBufferSize|restartable|reusable|(?<=[a-zA-Z0-9_]\.)(?:complete|start))\b 1433 | 1434 | 1435 | comment 1436 | matlab.net.http.io.StringConsumer 1437 | name 1438 | support.function.external.matlab 1439 | match 1440 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:delegateTo|initialize|putData|(?<=[a-zA-Z0-9_]\.)start)\b 1441 | 1442 | 1443 | comment 1444 | matlab.net.http.io.StringProvider 1445 | name 1446 | support.function.external.matlab 1447 | match 1448 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:delegateTo|expectedContentLength|getData|preferredBufferSize|restartable|reusable|(?<=[a-zA-Z0-9_]\.)(?:complete|start))\b 1449 | 1450 | 1451 | 1452 | 1453 | package_graphics_functions 1454 | 1455 | patterns 1456 | 1457 | 1458 | 1459 | comment 1460 | matlab.graphics.chartcontainer.ChartContainer 1461 | name 1462 | support.function.graphics.matlab 1463 | match 1464 | (?<=[a-zA-Z0-9_]\.)(?:getAxes|getLayout|setup|update)\b 1465 | 1466 | 1467 | comment 1468 | matlab.graphics.chartcontainer.mixin.Colorbar 1469 | name 1470 | support.function.graphics.matlab 1471 | match 1472 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)getColorbar\b 1473 | 1474 | 1475 | comment 1476 | matlab.graphics.chartcontainer.mixin.Legend 1477 | name 1478 | support.function.graphics.matlab 1479 | match 1480 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)getLegend\b 1481 | 1482 | 1483 | 1484 | 1485 | package_storage_functions 1486 | 1487 | patterns 1488 | 1489 | 1490 | 1491 | comment 1492 | matlab.io.xml.dom.DocumentWriter 1493 | name 1494 | support.function.io.matlab 1495 | match 1496 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getNewLine|setNewLine|write|writeToFile|writeToString)\b 1497 | 1498 | 1499 | comment 1500 | matlab.io.xml.dom.DOMWriter 1501 | name 1502 | support.function.io.matlab 1503 | match 1504 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:getNewLine|setNewLine|write|writeToFile|writeToString)\b 1505 | 1506 | 1507 | comment 1508 | matlab.io.xml.dom.FileWriter 1509 | name 1510 | support.function.io.matlab 1511 | match 1512 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:close|flush|write)\b 1513 | 1514 | 1515 | 1516 | 1517 | package_class_constructors 1518 | 1519 | patterns 1520 | 1521 | 1522 | 1523 | comment 1524 | matlab.mock.MethodCallBehavior 1525 | name 1526 | support.class.builtin.matlab 1527 | match 1528 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:when|withAnyInputs|withExactInputs|withNargout)\b 1529 | 1530 | 1531 | comment 1532 | matlab.unittest.FunctionTestCase 1533 | name 1534 | support.class.builtin.matlab 1535 | match 1536 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)forInteractiveUse\b 1537 | 1538 | 1539 | comment 1540 | matlab.unittest.TestCase 1541 | name 1542 | support.class.builtin.matlab 1543 | match 1544 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)forInteractiveUse\b 1545 | 1546 | 1547 | comment 1548 | matlab.unittest.fixtures.Fixture 1549 | name 1550 | support.class.builtin.matlab 1551 | match 1552 | (?<=[a-zA-Z0-9_]\.)producingHTML\b 1553 | 1554 | 1555 | comment 1556 | matlab.unittest.plugins.CodeCoveragePlugin 1557 | name 1558 | support.class.builtin.matlab 1559 | match 1560 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:forFile|forFolder|forPackage)\b 1561 | 1562 | 1563 | comment 1564 | matlab.unittest.plugins.LoggingPlugin 1565 | name 1566 | support.class.builtin.matlab 1567 | match 1568 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:withVerbosity)\b 1569 | 1570 | 1571 | comment 1572 | matlab.unittest.plugins.TAPPlugin 1573 | name 1574 | support.class.builtin.matlab 1575 | match 1576 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:producingOriginalFormat|producingVersion13)\b 1577 | 1578 | 1579 | comment 1580 | matlab.unittest.plugins.TestReportPlugin 1581 | name 1582 | support.class.builtin.matlab 1583 | match 1584 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:producingDOCX|producingHTML|producingPDF)\b 1585 | 1586 | 1587 | comment 1588 | matlab.unittest.plugins.TestRunProgressPlugin 1589 | name 1590 | support.class.builtin.matlab 1591 | match 1592 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:withVerbosity)\b 1593 | 1594 | 1595 | comment 1596 | matlab.unittest.plugins.XMLPlugin 1597 | name 1598 | support.class.builtin.matlab 1599 | match 1600 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)producingJUnitFormat\b 1601 | 1602 | 1603 | 1604 | 1605 | package_word_operators 1606 | 1607 | patterns 1608 | 1609 | 1610 | 1611 | comment 1612 | matlab.unittest.plugins.FailOnWarningsPlugin 1613 | name 1614 | keyword.operator.word.matlab 1615 | match 1616 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:supportsParallel)\b 1617 | 1618 | 1619 | comment 1620 | matlab.unittest.plugins.Parallelizable 1621 | name 1622 | keyword.operator.word.matlab 1623 | match 1624 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)supportsParallel\b 1625 | 1626 | 1627 | comment 1628 | matlab.unittest.plugins.TestRunProgressPlugin 1629 | name 1630 | keyword.operator.word.matlab 1631 | match 1632 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)supportsParallel\b 1633 | 1634 | 1635 | comment 1636 | matlab.unittest.qualifications.Assertable 1637 | name 1638 | keyword.operator.word.matlab 1639 | match 1640 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:assertClass|assertEmpty|assertEqual|assertError|assertFail|assertFalse|assertGreaterThan|assertGreaterThanOrEqual|assertInstanceOf|assertLength|assertLessThan|assertLessThanOrEqual|assertMatches|assertNotEmpty|assertNotEqual|assertNotSameHandle|assertNumElements|assertReturnsTrue|assertSameHandle|assertSize|assertSubstring|assertThat|assertTrue|assertWarning|assertWarningFree)\b 1641 | 1642 | 1643 | comment 1644 | matlab.unittest.qualifications.Assumable 1645 | name 1646 | keyword.operator.word.matlab 1647 | match 1648 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:assumeClass|assumeEmpty|assumeEqual|assumeError|assumeFail|assumeFalse|assumeGreaterThan|assumeGreaterThanOrEqual|assumeInstanceOf|assumeLength|assumeLessThan|assumeLessThanOrEqual|assumeMatches|assumeNotEmpty|assumeNotEqual|assumeNotSameHandle|assumeNumElements|assumeReturnsTrue|assumeSameHandle|assumeSize|assumeSubstring|assumeThat|assumeTrue|assumeWarning|assumeWarningFree)\b 1649 | 1650 | 1651 | comment 1652 | matlab.unittest.qualifications.FatalAssertable 1653 | name 1654 | keyword.operator.word.matlab 1655 | match 1656 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:fatalAssertClass|fatalAssertEmpty|fatalAssertEqual|fatalAssertError|fatalAssertFail|fatalAssertFalse|fatalAssertGreaterThanOrEqual|fatalAssertInstanceOf|fatalAssertLength|fatalAssertLessThan|fatalAssertLessThanOrEqual|fatalAssertMatches|fatalAssertNotEmpty|fatalAssertNotEqual|fatalAssertNotSameHandle|fatalAssertNumElements|fatalAssertReturnsTrue|fatalAssertSameHandle|fatalAssertSize|fatalAssertSubstring|fatalAssertThat|fatalAssertTrue|fatalAssertWarning|fatalAssertWarningFree)\b 1657 | 1658 | 1659 | comment 1660 | matlab.unittest.qualifications.Verifiable 1661 | name 1662 | keyword.operator.word.matlab 1663 | match 1664 | (?<=[a-zA-Z0-9_]\.|[^a-zA-Z0-9._]|^)(?:verifyClass|verifyEmpty|verifyEqual|verifyError|verifyFail|verifyFalse|verifyGreaterThan|verifyGreaterThanOrEqual|verifyInstanceOf|verifyLength|verifyLessThan|verifyLessThanOrEqual|verifyMatches|verifyNotEmpty|verifyNotEqual|verifyNotSameHandle|verifyNumElements|verifyReturnsTrue|verifySameHandle|verifySize|verifySubstring|verifyThat|verifyTrue|verifyWarning|verifyWarningFree)\b 1665 | 1666 | 1667 | 1668 | 1669 | 1670 | 1671 | 1672 | --------------------------------------------------------------------------------