Be selective when auto-inserting brackets
This commit is contained in:
parent
2950c67e3e
commit
5ed0998ce7
1 changed files with 34 additions and 4 deletions
|
|
@ -33,14 +33,40 @@ define(function(require, exports, module) {
|
||||||
|
|
||||||
var oop = require("../../lib/oop");
|
var oop = require("../../lib/oop");
|
||||||
var Behaviour = require("../behaviour").Behaviour;
|
var Behaviour = require("../behaviour").Behaviour;
|
||||||
|
var TokenIterator = require("../../token_iterator").TokenIterator;
|
||||||
|
|
||||||
var CstyleBehaviour = function () {
|
var CstyleBehaviour = function () {
|
||||||
|
|
||||||
|
CstyleBehaviour.isSaneInsertion = function(editor, session) {
|
||||||
|
var cursor = editor.getCursorPosition();
|
||||||
|
var iterator = new TokenIterator(session, cursor.row, cursor.column);
|
||||||
|
|
||||||
|
// Don't insert in the middle of a keyword/identifier/lexical
|
||||||
|
if (!this.$matchTokenType(iterator.getCurrentToken() || "text", ["text"])) {
|
||||||
|
// Look ahead in case we're at the end of a token
|
||||||
|
iterator = new TokenIterator(session, cursor.row, cursor.column + 1);
|
||||||
|
if (!this.$matchTokenType(iterator.getCurrentToken() || "text", ["text"]))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't insert in front of identifiers or brackets
|
||||||
|
iterator.stepForward();
|
||||||
|
if (this.$matchTokenType(iterator.getCurrentToken() || "text", ["identifier", "paren.lparen"]))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
CstyleBehaviour.$matchTokenType = function(token, types) {
|
||||||
|
return types.indexOf(token.type || token) > -1;
|
||||||
|
};
|
||||||
|
|
||||||
this.add("braces", "insertion", function (state, action, editor, session, text) {
|
this.add("braces", "insertion", function (state, action, editor, session, text) {
|
||||||
if (text == '{') {
|
if (text == '{') {
|
||||||
|
if (!CstyleBehaviour.isSaneInsertion(editor, session))
|
||||||
|
return;
|
||||||
var selection = editor.getSelectionRange();
|
var selection = editor.getSelectionRange();
|
||||||
var selected = session.doc.getTextRange(selection);
|
var selected = session.doc.getTextRange(selection);
|
||||||
if (selected !== "" && selected !== "}") {
|
if (selected !== "" && selected !== "{") {
|
||||||
return {
|
return {
|
||||||
text: '{' + selected + '}',
|
text: '{' + selected + '}',
|
||||||
selection: false
|
selection: false
|
||||||
|
|
@ -98,9 +124,11 @@ var CstyleBehaviour = function () {
|
||||||
|
|
||||||
this.add("parens", "insertion", function (state, action, editor, session, text) {
|
this.add("parens", "insertion", function (state, action, editor, session, text) {
|
||||||
if (text == '(') {
|
if (text == '(') {
|
||||||
|
if (!CstyleBehaviour.isSaneInsertion(editor, session))
|
||||||
|
return;
|
||||||
var selection = editor.getSelectionRange();
|
var selection = editor.getSelectionRange();
|
||||||
var selected = session.doc.getTextRange(selection);
|
var selected = session.doc.getTextRange(selection);
|
||||||
if (selected !== "" && selected !== ")") {
|
if (selected !== "") {
|
||||||
return {
|
return {
|
||||||
text: '(' + selected + ')',
|
text: '(' + selected + ')',
|
||||||
selection: false
|
selection: false
|
||||||
|
|
@ -141,9 +169,11 @@ var CstyleBehaviour = function () {
|
||||||
|
|
||||||
this.add("brackets", "insertion", function (state, action, editor, session, text) {
|
this.add("brackets", "insertion", function (state, action, editor, session, text) {
|
||||||
if (text == '[') {
|
if (text == '[') {
|
||||||
|
if (!CstyleBehaviour.isSaneInsertion(editor, session))
|
||||||
|
return;
|
||||||
var selection = editor.getSelectionRange();
|
var selection = editor.getSelectionRange();
|
||||||
var selected = session.doc.getTextRange(selection);
|
var selected = session.doc.getTextRange(selection);
|
||||||
if (selected !== "" && selected !== "]") {
|
if (selected !== "") {
|
||||||
return {
|
return {
|
||||||
text: '[' + selected + ']',
|
text: '[' + selected + ']',
|
||||||
selection: false
|
selection: false
|
||||||
|
|
@ -187,7 +217,7 @@ var CstyleBehaviour = function () {
|
||||||
var quote = text;
|
var quote = text;
|
||||||
var selection = editor.getSelectionRange();
|
var selection = editor.getSelectionRange();
|
||||||
var selected = session.doc.getTextRange(selection);
|
var selected = session.doc.getTextRange(selection);
|
||||||
if (selected !== "" && selected !== "'") {
|
if (selected !== "") {
|
||||||
return {
|
return {
|
||||||
text: quote + selected + quote,
|
text: quote + selected + quote,
|
||||||
selection: false
|
selection: false
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue