Skip to content

Commit d4a05e3

Browse files
committed
support associate schemas with files in a regular expression
1 parent 2684120 commit d4a05e3

File tree

3 files changed

+28
-8
lines changed

3 files changed

+28
-8
lines changed

src/languageservice/services/jsonSchemaService.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ export class FilePatternAssociation {
104104
constructor(pattern: string) {
105105
this.combinedSchemaId = 'schemaservice://combinedSchema/' + encodeURIComponent(pattern);
106106
try {
107-
this.patternRegExp = new RegExp(Strings.convertSimple2RegExpPattern(pattern) + '$');
107+
this.patternRegExp = Strings.convertSimple2RegExp(pattern);
108108
} catch (e) {
109109
// invalid pattern
110110
this.patternRegExp = null;

src/languageservice/utils/strings.ts

+12-2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,16 @@ export function endsWith(haystack: string, needle: string): boolean {
3232
}
3333
}
3434

35-
export function convertSimple2RegExpPattern(pattern: string): string {
36-
return pattern.replace(/[\-\\\{\}\+\?\|\^\$\.\,\[\]\(\)\#\s]/g, '\\$&').replace(/[\*]/g, '.*');
35+
export function convertSimple2RegExp(pattern: string): RegExp {
36+
var match = pattern.match(new RegExp('^/(.*?)/([gimy]*)$'));
37+
return match ? convertRegexString2RegExp(match[1], match[2])
38+
: convertGlobalPattern2RegExp(pattern)
39+
}
40+
41+
function convertGlobalPattern2RegExp(pattern: string): RegExp {
42+
return new RegExp(pattern.replace(/[\-\\\{\}\+\?\|\^\$\.\,\[\]\(\)\#\s]/g, '\\$&').replace(/[\*]/g, '.*') + '$');
43+
}
44+
45+
function convertRegexString2RegExp(pattern: string, flag: string): RegExp {
46+
return new RegExp(pattern, flag);
3747
}

test/strings.test.ts

+15-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Copyright (c) Red Hat. All rights reserved.
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
5-
import {startsWith, endsWith, convertSimple2RegExpPattern} from '../src/languageservice/utils/strings';
5+
import {startsWith, endsWith, convertSimple2RegExp} from '../src/languageservice/utils/strings';
66
var assert = require('assert');
77

88
suite("String Tests", () => {
@@ -75,12 +75,22 @@ suite("String Tests", () => {
7575

7676
});
7777

78-
describe('convertSimple2RegExpPattern', function(){
78+
describe('convertSimple2RegExp', function(){
7979

80-
it('Test of convertSimple2RegExpPattern', () => {
80+
it('Test of convertRegexString2RegExp', () => {
8181

82-
var result = convertSimple2RegExpPattern("/*");
83-
assert.equal(result, "/.*");
82+
var result = convertSimple2RegExp("/toc\\.yml/i").test("TOC.yml");
83+
assert.equal(result, true);
84+
85+
});
86+
87+
it('Test of convertGlobalPattern2RegExp', () => {
88+
89+
var result = convertSimple2RegExp("toc.yml").test("toc.yml");
90+
assert.equal(result, true);
91+
92+
result = convertSimple2RegExp("toc.yml").test("TOC.yml");
93+
assert.equal(result, false);
8494

8595
});
8696

0 commit comments

Comments
 (0)