From 1c84673a459972892be747f739482646b7cd33d9 Mon Sep 17 00:00:00 2001 From: eisenwave Date: Mon, 23 Sep 2024 00:09:21 +0200 Subject: [PATCH] closes #33; fix wrong constexpr-implicit-const diagnostic --- js/prose-decl.js | 6 +++--- test/test.js | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/js/prose-decl.js b/js/prose-decl.js index 8a7d8e6..f6bb670 100644 --- a/js/prose-decl.js +++ b/js/prose-decl.js @@ -214,9 +214,9 @@ export class Explainer { declarator.length === 1 && declarator[0].typ === 'id') { return outerConst; } - const last = declarator[declarator.length - 1]; - if (last.typ === '*') { - return last.qualifiers && last.qualifiers.includes('const'); + const first = declarator[Number(declarator[0].typ === 'id')]; + if (first.typ === '*') { + return first.qualifiers && first.qualifiers.includes('const'); } return false; } diff --git a/test/test.js b/test/test.js index aea5c19..d936310 100644 --- a/test/test.js +++ b/test/test.js @@ -247,6 +247,30 @@ describe('Examples', function () { }); }); + code = 'constexpr int * const *'; + describe(code, function () { + const {paragraphs, diagnostics} = codeToProse(code); + it('has correct prose', function () { + const expected = ['constexpr pointer to const pointer to int']; + assert.deepEqual(paragraphs, expected); + }); + it('has constexpr-implicit-const diagnostic', function() { + assert.deepEqual(diagnostics, ['constexpr-implicit-const']); + }); + }); + + code = 'constexpr int ** const'; + describe(code, function () { + const {paragraphs, diagnostics} = codeToProse(code); + it('has correct prose', function () { + const expected = ['constexpr const pointer to pointer to int']; + assert.deepEqual(paragraphs, expected); + }); + it('has no constexpr-implicit-const diagnostic', function() { + assert.ok(!diagnostics.includes('constexpr-implicit-const')); + }); + }); + code = 'constexpr int f()'; describe(code, function () { const {paragraphs, diagnostics} = codeToProse(code);