| 2997 | type PerformanceRecord = {tag: string[], block: string, average: number, calls: number, color: string, max: number, min: number, percent: number, total: number}; |
| 2998 | |
| 2999 | class LanguageService { |
| 3000 | protected static _requestId = 0; |
| 3001 | |
| 3002 | protected _listeners:{[requestId:number]: (args:any) => void} = {}; |
| 3003 | |
| 3004 | findSource(args:FindSourceArgs, callback:(args:FindSourceArgs) => void) { |
| 3005 | this.send("findSource", args, callback); |
| 3006 | } |
| 3007 | |
| 3008 | unpackSource(callback:(args:SourceRecord[]) => void) { |
| 3009 | return (message:FindSourceArgs) => { |
| 3010 | let records:SourceRecord[] = []; |
| 3011 | for(let source of message.source) { |
| 3012 | let span:any = message.span || source.span; |
| 3013 | records.push({tag: ["source"], record: message.record, attribute: message.attribute, span, block: source.block}); |
| 3014 | } |
| 3015 | callback(records); |
| 3016 | }; |
| 3017 | } |
| 3018 | |
| 3019 | findRelated(args:FindRelatedArgs, callback:(args:FindRelatedArgs) => void) { |
| 3020 | this.send("findRelated", args, callback); |
| 3021 | } |
| 3022 | |
| 3023 | unpackRelated(callback:(args:RelatedRecord[]) => void) { |
| 3024 | return (message:FindRelatedArgs) => { |
| 3025 | let records:RelatedRecord[] = []; |
| 3026 | // This isn't really correct, but we're rolling with it for now. |
| 3027 | for(let span of message.span) { |
| 3028 | records.push({tag: ["related"], span, variable: message.variable}); |
| 3029 | } |
| 3030 | callback(records); |
| 3031 | }; |
| 3032 | } |
| 3033 | |
| 3034 | findValue(args:FindValueArgs, callback:(args:FindValueArgs) => void) { |
| 3035 | this.send("findValue", args, callback); |
| 3036 | } |
| 3037 | |
| 3038 | unpackValue(callback:(args:ValueRecord[]) => void) { |
| 3039 | return (message:FindValueArgs) => { |
| 3040 | if(message.totalRows > message.rows.length) { |
| 3041 | // @TODO: Turn this into a fact. |
| 3042 | console.warn(`Too many possible values, showing {{message.rows.length}} of {{message.totalRows}}`); |
| 3043 | } |
| 3044 | let mappings = message.variableMappings; |
| 3045 | let names = message.variableNames; |
| 3046 | let records:ValueRecord[] = []; |
| 3047 | for(let rowIx = 0, rowCount = message.rows.length; rowIx < rowCount; rowIx++) { |
| 3048 | let row = message.rows[rowIx]; |
| 3049 | for(let variable in mappings) { |
| 3050 | let register = mappings[variable]; |
| 3051 | records.push({tag: ["value"], row: rowIx + 1, variable, value: row[register], register, name: names[variable]}); |
| 3052 | } |
| 3053 | } |
| 3054 | callback(records); |
| 3055 | }; |
| 3056 | } |
nothing calls this directly
no outgoing calls
no test coverage detected