Skip to content

Commit 4baf911

Browse files
authored
fix the issue with lambda (#56)
1 parent bf7325a commit 4baf911

4 files changed

Lines changed: 76 additions & 2 deletions

File tree

examples/app.jac

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,18 @@ cl{
152152
</p>
153153
</div>;
154154
}
155+
}
156+
157+
walker get_profile {
158+
can run with Root entry {
159+
report 'ok';
160+
tweets.sort(key=lambda t: s);
161+
report 'not ok';
162+
}
163+
}
164+
165+
walker:pub get_all_profiles {
166+
can run with Root entry {
167+
report results;
168+
}
155169
}

src/__tests__/inspectTokenScopes.test.ts

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -820,4 +820,64 @@ describe('inspectTokenScopesHandler - Location Based Tests', () => {
820820
expectToken(result, 153, 11, 14, 'div', ['source.jac', 'meta.jsx.html.jac', 'entity.name.tag.html.jsx.jac']);
821821
});
822822
});
823+
824+
describe('Walker get_profile with lambda in sort (lines 157-169)', () => {
825+
test('walker keyword', () => {
826+
// walker get_profile {
827+
expectToken(result, 157, 1, 7, 'walker', ['source.jac', 'storage.type.class.jac']);
828+
});
829+
830+
test('get_profile walker name', () => {
831+
expectToken(result, 157, 8, 19, 'get_profile', ['source.jac', 'entity.name.type.class.jac']);
832+
});
833+
834+
test('can keyword in ability', () => {
835+
// can run with Root entry {
836+
expectToken(result, 158, 5, 8, 'can', ['source.jac', 'storage.type.function.jac']);
837+
});
838+
839+
test('run as ability name', () => {
840+
expectToken(result, 158, 9, 12, 'run', ['source.jac', 'entity.name.function.jac']);
841+
});
842+
843+
test('report keyword before lambda line', () => {
844+
// report \'ok\';
845+
expectToken(result, 159, 9, 15, 'report', ['source.jac', 'keyword.control.flow.jac']);
846+
});
847+
848+
test('ok string literal', () => {
849+
expectToken(result, 159, 17, 19, 'ok', ['source.jac', 'string.quoted.single.jac']);
850+
});
851+
852+
test('lambda keyword inside sort function call', () => {
853+
// tweets.sort(key=lambda t: s)
854+
expectToken(result, 160, 25, 31, 'lambda', ['source.jac', 'storage.type.function.lambda.jac']);
855+
});
856+
857+
test('report keyword after lambda line is correctly tokenized (regression)', () => {
858+
// Critical regression test: before the lambda end-pattern fix, the lambda scope
859+
// consumed the closing ) of sort(...), leaving function-arguments scope open and
860+
// causing this line to be mis-tokenized.
861+
expectToken(result, 161, 9, 15, 'report', ['source.jac', 'keyword.control.flow.jac']);
862+
});
863+
864+
test('not ok string literal after lambda line (regression)', () => {
865+
expectToken(result, 161, 17, 23, 'not ok', ['source.jac', 'string.quoted.single.jac']);
866+
});
867+
868+
test('walker keyword for get_all_profiles', () => {
869+
// walker:pub get_all_profiles {
870+
expectToken(result, 165, 1, 7, 'walker', ['source.jac', 'storage.type.class.jac']);
871+
});
872+
873+
test('pub modifier on walker', () => {
874+
expectToken(result, 165, 8, 11, 'pub', ['source.jac', 'storage.modifier.declaration.jac']);
875+
});
876+
877+
test('report results in get_all_profiles', () => {
878+
// report results;
879+
expectToken(result, 167, 9, 15, 'report', ['source.jac', 'keyword.control.flow.jac']);
880+
});
881+
});
882+
823883
});

syntaxes/jac.tmLanguage.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1822,7 +1822,7 @@
18221822
{
18231823
"name": "meta.lambda-function.jac",
18241824
"begin": "(?x)\n \\b (lambda) \\b",
1825-
"end": "({)|(\\n)",
1825+
"end": "({)|(\\n)|(?=[),])",
18261826
"beginCaptures": {
18271827
"1": {
18281828
"name": "storage.type.function.lambda.jac"

tsconfig.tsbuildinfo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"root":["./src/constants.ts","./src/extension.ts","./src/utils.ts","./src/commands/index.ts","./src/commands/inspecttokenscopes.ts","./src/environment/manager.ts","./src/lsp/lsp_manager.ts","./src/test/platformhelper.ts","./src/test/runtest.ts","./src/test/suite/cleanup.integration.test.ts","./src/test/suite/environment.integration.test.ts","./src/test/suite/index.ts","./src/test/suite/lsp.integration.test.ts","./src/test/suite/testutils.ts","./src/utils/envdetection.ts","./src/utils/envversion.ts","./src/utils/jacrunner.ts","./src/visual_debugger/visdbg.ts","./src/webview/visualdebugger.ts"],"version":"5.9.3"}
1+
{"root":["./src/constants.ts","./src/extension.ts","./src/utils.ts","./src/commands/index.ts","./src/commands/inspectTokenScopes.ts","./src/environment/manager.ts","./src/lsp/lsp_manager.ts","./src/test/platformHelper.ts","./src/test/runTest.ts","./src/test/suite/cleanup.integration.test.ts","./src/test/suite/environment.integration.test.ts","./src/test/suite/index.ts","./src/test/suite/lsp.integration.test.ts","./src/test/suite/testUtils.ts","./src/utils/envDetection.ts","./src/utils/envVersion.ts","./src/utils/jacRunner.ts","./src/visual_debugger/visdbg.ts","./src/webview/visualDebugger.ts"],"version":"5.9.3"}

0 commit comments

Comments
 (0)