Repository: FHIR/sushi (ts)

Issue:
SUSHI not reporting line number for VS filter error
The following warning does not report a line number:

> warn  The match value of filter operator "=" must be a code. For string valued properties, use the regex filter operator with a regular expression value. Support for using strings as filter values has been deprecated and will be removed in a future release.

Looking at the code, I think we do have location information in context; we just need to add it to the logging statement.

Pull request description:
Include source location in ValueSet filter operand type warning
Fixes #910 and completes task [CIMPL-821](https://standardhealthrecord.atlassian.net/browse/CIMPL-821).

The logic for deciding to log a warning already exists. This pull request just adds the source information when logging.

Patch:
diff --git a/src/import/FSHImporter.ts b/src/import/FSHImporter.ts
index 5064325..a87346b 100644
--- a/src/import/FSHImporter.ts
+++ b/src/import/FSHImporter.ts
@@ -1972,7 +1972,8 @@ export class FSHImporter extends FSHVisitor {
           logger.warn(
             `The match value of filter operator "${operator}" must be a code. ` +
               'For string valued properties, use the regex filter operator with a regular expression value. ' +
-              'Support for using strings as filter values has been deprecated and will be removed in a future release.'
+              'Support for using strings as filter values has been deprecated and will be removed in a future release.',
+            { location: this.extractStartStop(ctx), file: this.currentFile }
           );
         }
         if (typeof value !== 'string' && !(value instanceof FshCode)) {


Test patch:
diff --git a/test/import/FSHImporter.ValueSet.test.ts b/test/import/FSHImporter.ValueSet.test.ts
index 46a1070..4d0921e 100644
--- a/test/import/FSHImporter.ValueSet.test.ts
+++ b/test/import/FSHImporter.ValueSet.test.ts
@@ -561,6 +561,7 @@ describe('FSHImporter', () => {
         expect(loggerSpy.getLastMessage('warn')).toMatch(
           /match value of filter operator "=" must be a code/
         );
+        expect(loggerSpy.getLastMessage('warn')).toMatch(/File: Zoo\.fsh.*Line: 3\D*/s);
       });
 
       it('should parse a value set that uses filter operator = with code value', () => {
@@ -786,6 +787,7 @@ describe('FSHImporter', () => {
         expect(loggerSpy.getLastMessage('warn')).toMatch(
           /match value of filter operator "in" must be a code/
         );
+        expect(loggerSpy.getLastMessage('warn')).toMatch(/File: CatDog\.fsh.*Line: 3\D*/s);
       });
 
       it('should parse a value set that use filter operator in with a code value', () => {
@@ -839,6 +841,7 @@ describe('FSHImporter', () => {
         expect(loggerSpy.getLastMessage('warn')).toMatch(
           /match value of filter operator "not-in" must be a code/
         );
+        expect(loggerSpy.getLastMessage('warn')).toMatch(/File: NoGoose\.fsh.*Line: 3\D*/s);
       });
 
       it('should parse a value set that uses filter operator not-in with a code value', () => {