diff --git a/src/index.js b/src/index.js index 13471a9..f05a164 100644 --- a/src/index.js +++ b/src/index.js @@ -42,6 +42,10 @@ lexer.addRule(new RegExp(`or${reNotFollowedByName}`), (l) => token('OR', l)); lexer.addRule(new RegExp(`and${reNotFollowedByName}`), (l) => token('AND', l)); lexer.addRule(new RegExp(`not${reNotFollowedByName}`), (l) => token('NOT', l)); lexer.addRule(new RegExp(`in${reNotFollowedByName}`), (l) => token('IN', l)); +lexer.addRule( + new RegExp(`regex${reNotFollowedByName}`), + (l) => token('REGEX', l), +); lexer.addRule( new RegExp(`True${reNotFollowedByName}`), (l) => token('TRUE', l), @@ -929,6 +933,7 @@ DjangoQL.prototype = { if (['str', 'date', 'datetime'].indexOf(field.type) >= 0) { suggestions.push(['~', 'contains']); suggestions.push(['!~', 'does not contain']); + suggestions.push(['regex', '']); snippetAfter = ' "|"'; } else if (field.options) { snippetAfter = ' "|"'; diff --git a/tests/DjangoQL.test.js b/tests/DjangoQL.test.js index 6fbb461..d8dd8df 100644 --- a/tests/DjangoQL.test.js +++ b/tests/DjangoQL.test.js @@ -155,7 +155,7 @@ describe('test DjangoQL completion', () => { }); it('should recognize reserved words', () => { - const words = ['True', 'False', 'None', 'or', 'and', 'in']; + const words = ['True', 'False', 'None', 'or', 'and', 'in', 'regex']; djangoQL.lexer.setInput(words.join(' ')); words.forEach((word) => { expect(djangoQL.lexer.lex())