UNPKG

feeles-ide

Version:

The hackable and serializable IDE to make learning material

74 lines (54 loc) 2.33 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isNotDeletableLine; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _includes = _interopRequireDefault(require("lodash/includes")); var _keywords = require("../../utils/keywords"); var keywords = ['var ', 'let ', 'const ', 'import ', 'export ', 'new ']; /** * その text だけを削除したときにコードの健全性が保たれうるかどうか * コード全体をパースするのではなく, あくまで行だけを見たときの推測 * @param {String} text * @returns {Boolean} 削除できないとき true */ function isNotDeletableLine(text) { if (text === undefined) return true; // bugfix var _arr = ['()', '[]', '{}']; for (var _i = 0; _i < _arr.length; _i++) { var brackets = _arr[_i]; var _brackets = (0, _slicedToArray2.default)(brackets, 2), start = _brackets[0], end = _brackets[1]; if (text.split(start).length !== text.split(end).length) { return true; // ブラケットの数が合わなくなるので削除できない } } if (text.split('`').length - 1 % 2 === 1) { return true; // テンプレートリテラルの途中なので削除できない } for (var _i2 = 0; _i2 < keywords.length; _i2++) { var declare = keywords[_i2]; if ((0, _includes.default)(text, declare)) { return true; // 変数宣言等が含まれるので削除できない } } if (_keywords.assetRegExp.test(text)) { return true; // アセットのボタンなので削除できない } if ((0, _includes.default)(text, _keywords.codeFolds.startWord)) { return true; // "// ここから" があるので削除できない } if ((0, _includes.default)(text, _keywords.codeFolds.endWord)) { return true; // "// ここまで" があるので削除できない } if (/import ['"].*['"]/.test(text)) { return true; // import 文があるので削除できない } if ((0, _includes.default)(text, '/*') !== (0, _includes.default)(text, '*/')) { return true; // 複数行コメントが終わらなくなるので削除できない } return false; }