feeles-ide
Version:
The hackable and serializable IDE to make learning material
74 lines (54 loc) • 2.33 kB
JavaScript
;
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;
}