Skip to content

Commit

Permalink
feat(@formatjs/cli): add line/col to extracted messages, fix #1897
Browse files Browse the repository at this point in the history
  • Loading branch information
longlho committed Jul 30, 2020
1 parent d1760dd commit bf9d694
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 0 deletions.
24 changes: 24 additions & 0 deletions packages/cli/src/extract.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ export interface ExtractionResult<M = Record<string, string>> {
meta: M;
}

export interface ExtractedMessageDescriptor extends MessageDescriptor {
line?: number;
col?: number;
}

export type ExtractCLIOptions = Omit<
ExtractOptions,
'overrideIdFn' | 'onMsgExtracted' | 'onMetaExtracted'
Expand All @@ -28,6 +33,19 @@ export type ExtractOptions = Opts & {
readFromStdin?: boolean;
} & Pick<Opts, 'onMsgExtracted' | 'onMetaExtracted'>;

function calculateLineColFromOffset(
text: string,
start?: number
): Pick<ExtractedMessageDescriptor, 'line' | 'col'> {
if (!start) {
return {line: 1, col: 1};
}
const chunk = text.slice(0, start);
const lines = chunk.split('\n');
const lastLine = lines[lines.length - 1];
return {line: lines.length, col: lastLine.length};
}

function processFile(
source: string,
fn: string,
Expand All @@ -52,6 +70,12 @@ function processFile(
}
),
onMsgExtracted(_, msgs) {
if (opts.extractSourceLocation) {
msgs = msgs.map(msg => ({
...msg,
...calculateLineColFromOffset(source, msg.start),
}));
}
messages = messages.concat(msgs);
},
onMetaExtracted(_, m) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ Object {
"ignore": Object {
"defaultMessage": "ignore",
},
"inline-msg": Object {
"defaultMessage": "inline message",
"description": "inline description",
},
"trailing.ws": Object {
"defaultMessage": " Some whitespace ",
"description": "Whitespace",
Expand Down Expand Up @@ -54,6 +58,10 @@ Object {
"defaultMessage": "Hello Nurse!",
"description": "Another message",
},
"inline-msg": Object {
"defaultMessage": "inline message",
"description": "inline description",
},
"trailing.ws": Object {
"defaultMessage": " Some whitespace ",
"description": "Whitespace",
Expand All @@ -64,45 +72,66 @@ Object {
exports[`basic case: defineMessages -> out-file with location 1`] = `
Object {
"ae494": Object {
"col": 18,
"defaultMessage": "No ID",
"description": "no ID",
"end": 937,
"file": "defineMessages/actual.js",
"line": 34,
"start": 876,
},
"app.home.kittens": Object {
"col": 10,
"defaultMessage": "{count, plural, =0 {😭} one {# kitten} other {# kittens}}",
"description": "Counts kittens",
"end": 522,
"file": "defineMessages/actual.js",
"line": 15,
"start": 372,
},
"escaped.apostrophe": Object {
"col": 10,
"defaultMessage": "A quoted value ''{value}'",
"description": "Escaped apostrophe",
"end": 786,
"file": "defineMessages/actual.js",
"line": 25,
"start": 662,
},
"foo.bar.baz": Object {
"col": 9,
"defaultMessage": "Hello World!",
"description": "The default message",
"end": 246,
"file": "defineMessages/actual.js",
"line": 5,
"start": 141,
},
"foo.bar.biff": Object {
"col": 10,
"defaultMessage": "Hello Nurse!",
"description": "Another message",
"end": 360,
"file": "defineMessages/actual.js",
"line": 10,
"start": 258,
},
"inline-msg": Object {
"col": 10,
"defaultMessage": "inline message",
"description": "inline description",
"end": 1416,
"file": "defineMessages/actual.js",
"line": 53,
"start": 1269,
},
"trailing.ws": Object {
"col": 21,
"defaultMessage": " Some whitespace ",
"description": "Whitespace",
"end": 650,
"file": "defineMessages/actual.js",
"line": 20,
"start": 545,
},
}
Expand Down Expand Up @@ -130,6 +159,10 @@ Object {
"defaultMessage": "Hello Nurse!",
"description": "Another message",
},
"inline-msg": Object {
"defaultMessage": "inline message",
"description": "inline description",
},
"trailing.ws": Object {
"defaultMessage": " Some whitespace ",
"description": "Whitespace",
Expand Down Expand Up @@ -201,6 +234,10 @@ Object {
"ignore": Object {
"defaultMessage": "ignore",
},
"inline-msg": Object {
"defaultMessage": "inline message",
"description": "inline description",
},
"trailing.ws": Object {
"defaultMessage": " Some whitespace ",
"description": "Whitespace",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ export default class Foo extends Component {
</p>
<p>
<FormattedMessage {...msgs.kittens} />
<FormattedMessage
id="inline-msg"
defaultMessage="inline message"
description="inline description"
/>
</p>
</div>
);
Expand Down

0 comments on commit bf9d694

Please sign in to comment.