Skip to content

Commit 80e1d39

Browse files
committed
Fix inferred operation name issue with trailing spaces #960
1 parent 717be82 commit 80e1d39

File tree

8 files changed

+32
-24
lines changed

8 files changed

+32
-24
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ REST Client allows you to send HTTP request and view the response in Visual Stud
99
* Send __GraphQL query__ and author __GraphQL variables__ in editor
1010
* Send __cURL command__ in editor and copy HTTP request as `cURL command`
1111
* Auto save and view/clear request history
12-
* Organize _MULTIPLE_ requests in the same file (separated by `###` delimiter)
12+
* Compose _MULTIPLE_ requests in a single file (separated by `###` delimiter)
1313
* View image response directly in pane
1414
* Save raw response and response body only to local disk
1515
* Fold and unfold response body

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/common/constants.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,4 @@ export const RequestVariableDefinitionWithNameRegexFactory = (name: string, flag
7070

7171
export const RequestVariableDefinitionRegex: RegExp = RequestVariableDefinitionWithNameRegexFactory("\\w+", "m");
7272

73-
export const NoteCommentRegex = /^\s*(?:#{1,}|\/{2,})\s*@note\s*$/m;
74-
7573
export const LineSplitterRegex: RegExp = /\r?\n/g;

src/controllers/codeSnippetController.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { EOL } from 'os';
22
import * as url from 'url';
33
import { Clipboard, env, ExtensionContext, QuickInputButtons, window } from 'vscode';
44
import Logger from '../logger';
5+
import { IRestClientSettings, RequestSettings, RestClientSettings } from '../models/configurationSettings';
56
import { HARCookie, HARHeader, HARHttpRequest, HARPostData } from '../models/harHttpRequest';
67
import { HttpRequest } from '../models/httpRequest';
78
import { RequestParserFactory } from '../models/requestParserFactory';
@@ -50,10 +51,12 @@ export class CodeSnippetController {
5051
return;
5152
}
5253

53-
const { text } = selectedRequest;
54+
const { text, metadatas } = selectedRequest;
55+
const requestSettings = new RequestSettings(metadatas);
56+
const settings: IRestClientSettings = new RestClientSettings(requestSettings);
5457

5558
// parse http request
56-
const httpRequest = await RequestParserFactory.createRequestParser(text).parseHttpRequest();
59+
const httpRequest = await RequestParserFactory.createRequestParser(text, settings).parseHttpRequest();
5760

5861
const harHttpRequest = this.convertToHARHttpRequest(httpRequest);
5962
const snippet = new HTTPSnippet(harHttpRequest);
@@ -119,10 +122,12 @@ export class CodeSnippetController {
119122
return;
120123
}
121124

122-
const { text } = selectedRequest;
125+
const { text, metadatas } = selectedRequest;
126+
const requestSettings = new RequestSettings(metadatas);
127+
const settings: IRestClientSettings = new RestClientSettings(requestSettings);
123128

124129
// parse http request
125-
const httpRequest = await RequestParserFactory.createRequestParser(text).parseHttpRequest();
130+
const httpRequest = await RequestParserFactory.createRequestParser(text, settings).parseHttpRequest();
126131

127132
const harHttpRequest = this.convertToHARHttpRequest(httpRequest);
128133
const addPrefix = !(url.parse(harHttpRequest.url).protocol);

src/controllers/requestController.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ExtensionContext, Range, TextDocument, ViewColumn, window } from 'vscode';
22
import Logger from '../logger';
3-
import { IRestClientSettings, RequestSettings, RestClientSettings, SystemSettings } from '../models/configurationSettings';
3+
import { IRestClientSettings, RequestSettings, RestClientSettings } from '../models/configurationSettings';
44
import { HistoricalHttpRequest, HttpRequest } from '../models/httpRequest';
55
import { RequestMetadata } from '../models/requestMetadata';
66
import { RequestParserFactory } from '../models/requestParserFactory';
@@ -19,7 +19,7 @@ export class RequestController {
1919
private _httpClient: HttpClient;
2020
private _webview: HttpResponseWebview;
2121
private _textDocumentView: HttpResponseTextDocumentView;
22-
private _lastRequest?: HttpRequest;
22+
private _lastRequestSettingTuple: [HttpRequest, IRestClientSettings];
2323
private _lastPendingRequest?: HttpRequest;
2424

2525
public constructor(context: ExtensionContext) {
@@ -58,19 +58,21 @@ export class RequestController {
5858
const settings: IRestClientSettings = new RestClientSettings(requestSettings);
5959

6060
// parse http request
61-
const httpRequest = await RequestParserFactory.createRequestParser(text).parseHttpRequest(name);
61+
const httpRequest = await RequestParserFactory.createRequestParser(text, settings).parseHttpRequest(name);
6262

6363
await this.runCore(httpRequest, settings, document);
6464
}
6565

6666
@trace('Rerun Request')
6767
public async rerun() {
68-
if (!this._lastRequest) {
68+
if (!this._lastRequestSettingTuple) {
6969
return;
7070
}
7171

72+
let [request, settings] = this._lastRequestSettingTuple;
73+
7274
// TODO: recover from last request settings
73-
await this.runCore(this._lastRequest, SystemSettings.Instance);
75+
await this.runCore(request, settings);
7476
}
7577

7678
@trace('Cancel Request')
@@ -85,7 +87,8 @@ export class RequestController {
8587
this._requestStatusEntry.update({ state: RequestState.Pending });
8688

8789
// set last request and last pending request
88-
this._lastPendingRequest = this._lastRequest = httpRequest;
90+
this._lastPendingRequest = httpRequest;
91+
this._lastRequestSettingTuple = [httpRequest, settings];
8992

9093
// set http request
9194
try {

src/models/requestParserFactory.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
import { CurlRequestParser } from '../utils/curlRequestParser';
22
import { HttpRequestParser } from '../utils/httpRequestParser';
3-
import { SystemSettings } from './configurationSettings';
3+
import { IRestClientSettings, SystemSettings } from './configurationSettings';
44
import { RequestParser } from './requestParser';
55

66
export class RequestParserFactory {
77

88
private static readonly curlRegex: RegExp = /^\s*curl/i;
9-
private static readonly restClientSettings = SystemSettings.Instance;
109

11-
public static createRequestParser(rawHttpRequest: string): RequestParser {
10+
public static createRequestParser(rawRequest: string): RequestParser
11+
public static createRequestParser(rawRequest: string, settings: IRestClientSettings): RequestParser
12+
public static createRequestParser(rawHttpRequest: string, settings?: IRestClientSettings): RequestParser {
13+
settings = settings || SystemSettings.Instance;
1214
if (RequestParserFactory.curlRegex.test(rawHttpRequest)) {
13-
return new CurlRequestParser(rawHttpRequest, this.restClientSettings);
15+
return new CurlRequestParser(rawHttpRequest, settings);
1416
} else {
15-
return new HttpRequestParser(rawHttpRequest, this.restClientSettings);
17+
return new HttpRequestParser(rawHttpRequest, settings);
1618
}
1719
}
1820
}

src/utils/curlRequestParser.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as fs from 'fs-extra';
22
import { RequestHeaders } from '../models/base';
3-
import { SystemSettings } from '../models/configurationSettings';
3+
import { IRestClientSettings } from '../models/configurationSettings';
44
import { HttpRequest } from '../models/httpRequest';
55
import { RequestParser } from '../models/requestParser';
66
import { base64, hasHeader } from './misc';
@@ -12,7 +12,7 @@ const DefaultContentType: string = 'application/x-www-form-urlencoded';
1212

1313
export class CurlRequestParser implements RequestParser {
1414

15-
public constructor(private readonly requestRawText: string, private readonly settings: SystemSettings) {
15+
public constructor(private readonly requestRawText: string, private readonly settings: IRestClientSettings) {
1616
}
1717

1818
public async parseHttpRequest(name?: string): Promise<HttpRequest> {

src/utils/httpRequestParser.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as fs from 'fs-extra';
22
import { EOL } from 'os';
33
import { Stream } from 'stream';
4-
import { SystemSettings } from '../models/configurationSettings';
4+
import { IRestClientSettings } from '../models/configurationSettings';
55
import { FormParamEncodingStrategy } from '../models/formParamEncodingStrategy';
66
import { HttpRequest } from '../models/httpRequest';
77
import { RequestParser } from '../models/requestParser';
@@ -26,7 +26,7 @@ export class HttpRequestParser implements RequestParser {
2626
private readonly inputFileSyntax = /^<(?:(?<processVariables>@)(?<encoding>\w+)?)?\s+(?<filepath>.+?)\s*$/;
2727
private readonly defaultFileEncoding = 'utf8';
2828

29-
public constructor(private readonly requestRawText: string, private readonly settings: SystemSettings) {
29+
public constructor(private readonly requestRawText: string, private readonly settings: IRestClientSettings) {
3030
}
3131

3232
public async parseHttpRequest(name?: string): Promise<HttpRequest> {
@@ -135,7 +135,7 @@ export class HttpRequestParser implements RequestParser {
135135
body = await convertStreamToString(body);
136136
}
137137

138-
const matched = body?.match(/^\s*query\s+([^@\{\(]+)/i);
138+
const matched = body?.match(/^\s*query\s+([^@\{\(\s]+)/i);
139139
const operationName = matched?.[1];
140140

141141
const graphQlPayload = {

0 commit comments

Comments
 (0)