Skip to content

Commit 4f0a592

Browse files
committed
grammar : improve regex when naming ref derived rules
1 parent 9eac00c commit 4f0a592

File tree

3 files changed

+4
-3
lines changed

3 files changed

+4
-3
lines changed

common/json-schema-to-grammar.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,8 @@ class SchemaConverter {
603603
std::string _resolve_ref(const std::string & ref) {
604604
auto it = ref.find('#');
605605
std::string ref_fragment = it != std::string::npos ? ref.substr(it + 1) : ref;
606-
std::string ref_name = "ref" + std::regex_replace(ref_fragment, std::regex(R"([^a-zA-Z0-9-])"), "-");
606+
static const std::regex nonalphanumeric_regex(R"([^a-zA-Z0-9-]+)");
607+
std::string ref_name = "ref" + std::regex_replace(ref_fragment, nonalphanumeric_regex, "-");
607608
if (_rules.find(ref_name) == _rules.end() && _refs_being_resolved.find(ref) == _refs_being_resolved.end()) {
608609
_refs_being_resolved.insert(ref);
609610
json resolved = _refs[ref];

examples/json_schema_to_grammar.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,7 @@ def join_seq():
557557

558558
def _resolve_ref(self, ref):
559559
ref_fragment = ref.split('#')[-1]
560-
ref_name = 'ref' + re.sub(r'[^a-zA-Z0-9-]', '-', ref_fragment)
560+
ref_name = 'ref' + re.sub(r'[^a-zA-Z0-9-]+', '-', ref_fragment)
561561
if ref_name not in self._rules and ref not in self._refs_being_resolved:
562562
self._refs_being_resolved.add(ref)
563563
resolved = self._refs[ref]

tools/server/public_legacy/json-schema-to-grammar.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -599,7 +599,7 @@ export class SchemaConverter {
599599

600600
_resolveRef(ref) {
601601
let refFragment = ref.split('#').pop();
602-
let refName = 'ref' + refFragment.replace(/[^a-zA-Z0-9-]/, '-');
602+
let refName = 'ref' + refFragment.replace(/[^a-zA-Z0-9-]+/g, '-');
603603
if (!(refName in this._rules) && !this._refsBeingResolved.has(ref)) {
604604
this._refsBeingResolved.add(ref);
605605
const resolved = this._refs[ref];

0 commit comments

Comments
 (0)