You've already forked bsl_console
mirror of
https://github.com/salexdv/bsl_console.git
synced 2025-09-16 09:06:17 +02:00
Merge branch 'salexdv:develop' into develop
This commit is contained in:
@@ -279,7 +279,7 @@ setLanguageMode('bsl');
|
||||
|
||||
* На платформах, выпущенных примерно до ноября 2020 года могут не работать горячие клавиши CTRL+SPACE, CTRL+C, CTRL+V и CTRL+Z и т.п.
|
||||
* В веб-клиенте недоступно любое взаимодействие редактора и 1С. Можно попробовать только набор кода. Иногда для этого в браузере надо предварительно открыть данную [ссылку](https://salexdv.github.io/bsl_console/src/index.html)
|
||||
* В linux пока возможны проблемы с некоторым функционалом. Для сборки под linux необходимо использовать ветку [webpack](https://github.com/salexdv/bsl_console/tree/webpack)
|
||||
* В linux на данный момент работает не весь фунционал. Для сборки под linux используется отдельная [ветка](https://github.com/salexdv/bsl_console/tree/webpack). Проблемы сборки описаны [тут](docs/linux.md)
|
||||
* Из-за особенностей реализации подсказка через точку для реквизитов ссылочного типа работает только тогда, когда подсказываемый реквизит выбран через Enter
|
||||
* В некоторых версиях платформы поле HTML некорректно работает с путями, содержащими кириллицу, поэтому обработка **console.epf** может выдавать ошибку `Метод объекта не обнаружен (init)`. Решением в таком случае будет изменить в коде каталог хранения исходников на другой.
|
||||
|
||||
|
278
docs/linux.md
Normal file
278
docs/linux.md
Normal file
@@ -0,0 +1,278 @@
|
||||
# Сборка под linux
|
||||
|
||||
До версии 0.31 более или менее нормально собирается.
|
||||
Начиная с версии 0.32 нужен полифил для [Proxy](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy). [proxy-polyfill](https://www.npmjs.com/package/proxy-polyfill) нормально работает только с версией 0.32. В версии 0.33 уже не работает, поэтому объекты, созданные через прокси оказываются undefined и вызывают ошибку вроде `TypeError: undefined is not an object (evaluating 'languageFeaturesService.colorProvider.register')`
|
||||
|
||||
```js
|
||||
// package.json
|
||||
{
|
||||
"name": "bsl-console",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "editor.js",
|
||||
"homepage": "https://github.com/salexdv/bsl_console",
|
||||
"scripts": {
|
||||
"test": "mocha",
|
||||
"debug": "webpack-dev-server --mode development --env lang=ru --progress",
|
||||
"build": "webpack --mode production --env lang=ru --progress",
|
||||
"build_en": "webpack --mode production --progress",
|
||||
"dev": "webpack --mode development --env lang=ru --progress"
|
||||
},
|
||||
"author": "Shkuraev Alexander",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.26.10",
|
||||
"@babel/preset-env": "^7.26.9",
|
||||
"@codingame/monaco-vscode-api": "^15.0.3",
|
||||
"@codingame/monaco-vscode-language-pack-ru": "^15.0.3",
|
||||
"@ungap/global-this": "^0.4.4",
|
||||
"autoprefixer": "^9.8.6",
|
||||
"babel-loader": "^10.0.0",
|
||||
"chai": "^5.2.0",
|
||||
"clean-webpack-plugin": "^3.0.0",
|
||||
"copy-webpack-plugin": "^6.4.1",
|
||||
"core-js": "^3.41.0",
|
||||
"css-loader": "^7.1.2",
|
||||
"file-loader": "^6.1.0",
|
||||
"html-inline-script-webpack-plugin": "^3.2.1",
|
||||
"html-webpack-plugin": "^5.6.3",
|
||||
"mini-css-extract-plugin": "^2.9.2",
|
||||
"mocha": "^11.1.0",
|
||||
"performance-polyfill": "^0.0.3",
|
||||
"postcss-cli": "^8.2.0",
|
||||
"postcss-loader": "^3.0.0",
|
||||
"proxy-polyfill": "^0.3.2",
|
||||
"regenerator-runtime": "^0.14.1",
|
||||
"remove-files-webpack-plugin": "^1.4.5",
|
||||
"resize-observer-polyfill": "^1.5.1",
|
||||
"string-replace-loader": "^3.1.0",
|
||||
"style-loader": "^4.0.0",
|
||||
"terser-webpack-plugin": "^4.2.3",
|
||||
"url-loader": "^4.1.1",
|
||||
"webpack": "^5.98.0",
|
||||
"webpack-cli": "^6.0.1",
|
||||
"webpack-dev-server": "^5.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"big-integer": "^1.6.52",
|
||||
"monaco-editor": "^0.33.0",
|
||||
"monaco-editor-webpack-plugin": "^7.1.0"
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
```js
|
||||
// webpack.config.js
|
||||
const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');
|
||||
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
||||
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
||||
const HtmlInlineScriptPlugin = require('html-inline-script-webpack-plugin');
|
||||
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
|
||||
const RemovePlugin = require('remove-files-webpack-plugin');
|
||||
const webpack = require('webpack');
|
||||
const path = require('path');
|
||||
const CopyWebpackPlugin = require('copy-webpack-plugin');
|
||||
const nls = require.resolve('./src/nls.ru');
|
||||
|
||||
module.exports = (env, args) => {
|
||||
|
||||
return {
|
||||
context: path.resolve(__dirname, 'src'),
|
||||
entry: Object.assign(
|
||||
{
|
||||
console: './editor'
|
||||
},
|
||||
args.mode == 'development' ?
|
||||
{
|
||||
test: './test',
|
||||
test_query: './test_query'
|
||||
}
|
||||
: {}
|
||||
),
|
||||
output: {
|
||||
path: path.resolve(__dirname, 'dist'),
|
||||
publicPath: '',
|
||||
filename: '[name].js',
|
||||
environment: {
|
||||
arrowFunction: false,
|
||||
const: false,
|
||||
destructuring: false,
|
||||
forOf: false,
|
||||
dynamicImport: false,
|
||||
module: false
|
||||
}
|
||||
},
|
||||
resolveLoader: {
|
||||
alias: {
|
||||
'blob-url-loader': require.resolve('./tools/loaders/blobUrl'),
|
||||
'compile-loader': require.resolve('./tools/loaders/compile'),
|
||||
}
|
||||
},
|
||||
devtool: args.mode == 'development' ? "inline-source-map" : false,
|
||||
module: {
|
||||
rules: [
|
||||
args.customOptions ?
|
||||
{
|
||||
test: /src[\\/]editor\.js$/,
|
||||
loader: 'string-replace-loader',
|
||||
options: {
|
||||
search: 'customOptions: true',
|
||||
replace: args.customOptions + ', customOptions: true'
|
||||
}
|
||||
} : {},
|
||||
{
|
||||
test: /node_modules[\\/]monaco-editor[\\/].+actions\.js$/,
|
||||
loader: 'string-replace-loader',
|
||||
options: {
|
||||
search: '(this._menuItems.get(id) || []).slice(0);',
|
||||
replace: '(this._menuItems.get(id) || []).slice(0);result=result.filter(function(item){return isIMenuItem(item)&&item.command.id.indexOf("_bsl")>=0;});'
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /node_modules[\\/]monaco-editor[\\/].+parameterHints\.js$/,
|
||||
loader: 'string-replace-loader',
|
||||
options: {
|
||||
multiple: [{
|
||||
search: '[512 /* KeyMod.Alt */ | 16 /* KeyCode.UpArrow */',
|
||||
replace: '[2048 /* KeyMod.CtrlCmd */ | 16 /* KeyCode.UpArrow */'
|
||||
},
|
||||
{
|
||||
search: '[512 /* KeyMod.Alt */ | 18 /* KeyCode.DownArrow */',
|
||||
replace: '[2048 /* KeyMod.CtrlCmd */ | 18 /* KeyCode.DownArrow */'
|
||||
}]
|
||||
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /node_modules[\\/]monaco-editor[\\/].+tfIdf\.js$/,
|
||||
loader: 'string-replace-loader',
|
||||
options: {
|
||||
search: "word.split(/(?<=[a-z])(?=[A-Z])/g)",
|
||||
replace: "word.replace(/([a-z])([A-Z])/g, '$1 $2').split(' ')"
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
enforce: 'pre',
|
||||
include: function(modulePath) {
|
||||
return (modulePath.includes('monaco-editor') || modulePath.includes('src'))
|
||||
},
|
||||
exclude: /tingle/,
|
||||
use: {
|
||||
loader: 'babel-loader',
|
||||
options: {
|
||||
cacheDirectory: true,
|
||||
presets: [
|
||||
["@babel/preset-env", {
|
||||
targets: {
|
||||
ie: "11"
|
||||
},
|
||||
useBuiltIns: "usage",
|
||||
corejs: 3
|
||||
}]
|
||||
],
|
||||
plugins: [
|
||||
'@babel/plugin-transform-arrow-functions',
|
||||
'@babel/plugin-transform-block-scoping',
|
||||
'@babel/plugin-transform-modules-commonjs',
|
||||
'@babel/plugin-transform-block-scoped-functions'
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.(png|jpg|gif|svg|ttf)$/i,
|
||||
type: 'asset/inline',
|
||||
},
|
||||
{
|
||||
test: /\.css$/,
|
||||
use: [
|
||||
MiniCssExtractPlugin.loader,
|
||||
{
|
||||
loader: 'css-loader',
|
||||
options: {
|
||||
esModule: false
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
test: /\.wasm$/,
|
||||
type: "asset/inline",
|
||||
},
|
||||
]
|
||||
},
|
||||
optimization: {
|
||||
// minimize: args.mode === 'production',
|
||||
minimize: false,
|
||||
splitChunks: {
|
||||
chunks: 'all'
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
new MiniCssExtractPlugin({
|
||||
filename: '[name].css'
|
||||
}),
|
||||
env.lang == 'ru' ? new webpack.NormalModuleReplacementPlugin(/\/(vscode-)?nls\.js$/, function (resource) {
|
||||
resource.request = nls
|
||||
resource.resource = nls
|
||||
}) : false,
|
||||
args.mode == 'development' ? new CopyWebpackPlugin({
|
||||
patterns: [
|
||||
{ from: path.join(__dirname, 'node_modules/mocha/mocha.js'), to: 'mocha.js' },
|
||||
{ from: path.join(__dirname, 'node_modules/mocha/mocha.css'), to: 'mocha.css' },
|
||||
{ from: path.join(__dirname, 'node_modules/chai/chai.js'), to: 'chai.js' },
|
||||
]
|
||||
}) : false,
|
||||
new MonacoWebpackPlugin({
|
||||
languages: ['xml'],
|
||||
}),
|
||||
new HtmlInlineScriptPlugin(),
|
||||
new CopyWebpackPlugin({
|
||||
patterns: [
|
||||
{ from: './tree/icons', to: 'tree/icons' }
|
||||
]
|
||||
}),
|
||||
args.mode == 'production' ? new webpack.optimize.LimitChunkCountPlugin({
|
||||
maxChunks: 1
|
||||
}) : false,
|
||||
new CleanWebpackPlugin(),
|
||||
new HtmlWebpackPlugin({
|
||||
inject: 'body',
|
||||
chunks: ['console'],
|
||||
template: './index.html',
|
||||
filename: 'index.html',
|
||||
cache: false
|
||||
}),
|
||||
args.mode == 'development' ? new HtmlWebpackPlugin({
|
||||
inject: 'body',
|
||||
chunks: ['console', 'test'],
|
||||
template: './test.html',
|
||||
filename: 'test',
|
||||
cache: false
|
||||
}) : false,
|
||||
args.mode == 'development' ? new HtmlWebpackPlugin({
|
||||
inject: 'body',
|
||||
chunks: ['console', 'test_query'],
|
||||
template: './test_query.html',
|
||||
filename: 'test_query',
|
||||
cache: false
|
||||
}) : false,
|
||||
args.mode == 'production' ? new RemovePlugin({
|
||||
after: {
|
||||
include: [
|
||||
'./dist/test.js',
|
||||
'./dist/test_query.js',
|
||||
'./dist/editor.worker.js'
|
||||
]
|
||||
}
|
||||
}) : false
|
||||
].filter(Boolean),
|
||||
devServer: {
|
||||
port: 9000,
|
||||
open: true
|
||||
}
|
||||
}
|
||||
};
|
||||
```
|
@@ -39,4 +39,5 @@ setOption("skipInsertSuggestionAcceptor", true);
|
||||
* `disableContextQueryConstructor` - *boolean*, отключает формирование кнопки контекстного меню "Конструктор запросов". Установка значения опции имеет смысл только до вызова `init()`
|
||||
* `autoResizeEditorLayout` - *boolean*, включает перерисовку редактора при изменении размеров окна
|
||||
* `renderQueryDelimiters` - *boolean*, включает выделение цветом разделителей запросов
|
||||
* `disableDefinitionMessage` - *boolean*, отключает показ сообщения `Определение для ххх не найдено` при переходе к определению по F12 или CTRL+F12
|
||||
* `disableDefinitionMessage` - *boolean*, отключает показ сообщения `Определение для ххх не найдено` при переходе к определению по F12 или CTRL+F12
|
||||
* `disableFolding` - *boolean*, отключает сворачивание блоков кода
|
@@ -7173,14 +7173,18 @@ class bslHelper {
|
||||
*/
|
||||
static getFoldingRanges(model) {
|
||||
|
||||
let ranges = this.getRangesForRegexp(model, "\"(?:\\n|\\r|\\|)*(?:выбрать|select)(?:(?:\\s|\\S|\"\")*?)?\"");
|
||||
ranges = ranges.concat(this.getRangesForProcedureDescription(model));
|
||||
ranges = ranges.concat(this.getRangesForRegexp(model, "(?:^|\\b)(?:функция|процедура).*\\([\\s\\S]*?(?:конецпроцедуры|конецфункции)"));
|
||||
ranges = ranges.concat(this.getRangesForConstruction(model, "пока|while", "конеццикла|enddo", true));
|
||||
ranges = ranges.concat(this.getRangesForConstruction(model, "для .*(?:по|из) .*|for .* (?:to|each) .*", "конеццикла|enddo", true));
|
||||
ranges = ranges.concat(this.getRangesForConstruction(model, "если|if", "конецесли|endif", true));
|
||||
ranges = ranges.concat(this.getRangesForConstruction(model, "#область|#region", "#конецобласти|#endregion", false));
|
||||
ranges = ranges.concat(this.getRangesForConstruction(model, "#если|#if", "#конецесли|#endif", false));
|
||||
let ranges = [];
|
||||
|
||||
if (!getOption('disableFolding')) {
|
||||
ranges = this.getRangesForRegexp(model, "\"(?:\\n|\\r|\\|)*(?:выбрать|select)(?:(?:\\s|\\S|\"\")*?)?\"");
|
||||
ranges = ranges.concat(this.getRangesForProcedureDescription(model));
|
||||
ranges = ranges.concat(this.getRangesForRegexp(model, "(?:^|\\b)(?:функция|процедура).*\\([\\s\\S]*?(?:конецпроцедуры|конецфункции)"));
|
||||
ranges = ranges.concat(this.getRangesForConstruction(model, "пока|while", "конеццикла|enddo", true));
|
||||
ranges = ranges.concat(this.getRangesForConstruction(model, "для .*(?:по|из) .*|for .* (?:to|each) .*", "конеццикла|enddo", true));
|
||||
ranges = ranges.concat(this.getRangesForConstruction(model, "если|if", "конецесли|endif", true));
|
||||
ranges = ranges.concat(this.getRangesForConstruction(model, "#область|#region", "#конецобласти|#endregion", false));
|
||||
ranges = ranges.concat(this.getRangesForConstruction(model, "#если|#if", "#конецесли|#endif", false));
|
||||
}
|
||||
|
||||
return ranges;
|
||||
|
||||
|
@@ -165,11 +165,9 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
|
||||
eraseText = function () {
|
||||
|
||||
setText('', editor.getModel().getFullModelRange(), false);
|
||||
|
||||
if (getOption('reviewMode')) {
|
||||
removeReviewWidgets();
|
||||
currentIssue = -1;
|
||||
}
|
||||
|
||||
removeReviewWidgets();
|
||||
currentIssue = -1;
|
||||
|
||||
}
|
||||
|
||||
@@ -762,7 +760,6 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
|
||||
{
|
||||
disposeEditor();
|
||||
createEditor(language_id, originalText, currentTheme);
|
||||
initEditorEventListenersAndProperies();
|
||||
originalText = '';
|
||||
editor.diffCount = 0;
|
||||
}
|
||||
@@ -1749,9 +1746,6 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
|
||||
|
||||
setReviewIssues = function(issuesJSON) {
|
||||
|
||||
if (!getOption('reviewMode'))
|
||||
return { errorDescription: 'Необходимо включить режим Code Review' };
|
||||
|
||||
try {
|
||||
|
||||
const issues = JSON.parse(issuesJSON);
|
||||
@@ -1859,9 +1853,14 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
|
||||
// #region init editor
|
||||
editor = undefined;
|
||||
|
||||
function createEditor(language_id, text, theme) {
|
||||
createEditor = function(language_id, text, theme) {
|
||||
|
||||
editor = monaco.editor.create(document.getElementById("container"), {
|
||||
const container = document.getElementById("container");
|
||||
|
||||
if (!container)
|
||||
return;
|
||||
|
||||
editor = monaco.editor.create(container, {
|
||||
theme: theme,
|
||||
value: text,
|
||||
language: language_id,
|
||||
@@ -1890,6 +1889,7 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
|
||||
lineNumbersDedocrations = [];
|
||||
|
||||
setDefaultStyle();
|
||||
initEditorEventListenersAndProperies();
|
||||
|
||||
}
|
||||
|
||||
@@ -1948,9 +1948,11 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
|
||||
registerCodeLensProviders();
|
||||
setDefaultSnippets();
|
||||
|
||||
contextMenuEnabled = editor.getRawOptions().contextmenu;
|
||||
editor.originalText = '';
|
||||
editor.definitionBreadcrumbs = [];
|
||||
if (editor) {
|
||||
contextMenuEnabled = editor.getRawOptions().contextmenu;
|
||||
editor.originalText = '';
|
||||
editor.definitionBreadcrumbs = [];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1970,7 +1972,6 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
|
||||
|
||||
}
|
||||
|
||||
initEditorEventListenersAndProperies();
|
||||
// #endregion
|
||||
|
||||
// #region editor events
|
||||
@@ -2243,7 +2244,7 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
|
||||
|
||||
}
|
||||
|
||||
function disposeEditor() {
|
||||
disposeEditor = function() {
|
||||
|
||||
if (editor) {
|
||||
|
||||
@@ -3656,7 +3657,7 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
|
||||
let diff_zone = document.getElementById('diff-zone');
|
||||
let rect = diff_zone.getBoundingClientRect();
|
||||
|
||||
this.domNode.style.left = (rect.left - 1) + 'px';
|
||||
this.domNode.style.left = layout.decorationsLeft + layout.decorationsWidth + 'px';
|
||||
this.domNode.style.top = rect.top + 'px';
|
||||
this.domNode.style.height = rect.height + 'px';
|
||||
this.domNode.style.width = (layout.contentWidth - layout.verticalScrollbarWidth) + 'px';
|
||||
@@ -3911,7 +3912,7 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
|
||||
}
|
||||
buttons.appendChild(button);
|
||||
|
||||
if (!getOption('readOnlyCodeReview')) {
|
||||
if (getOption('reviewMode') && !getOption('readOnlyCodeReview')) {
|
||||
button = document.createElement('div');
|
||||
button.classList.add('review-delete');
|
||||
button.setAttribute('widgetid', widgetId);
|
||||
@@ -3968,7 +3969,7 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
|
||||
textarea.classList.add('review-message');
|
||||
editGroup.appendChild(textarea);
|
||||
|
||||
if (!getOption('readOnlyCodeReview')) {
|
||||
if (getOption('reviewMode') && !getOption('readOnlyCodeReview')) {
|
||||
button = document.createElement('button');
|
||||
button.setAttribute('widgetid', widgetId);
|
||||
button.classList.add('review-save');
|
||||
|
Reference in New Issue
Block a user