mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-21 01:25:37 -05:00
* Fix initial build breaks from 1.67 merge (#2514) * Update yarn lock files * Update build scripts * Fix tsconfig * Build breaks * WIP * Update yarn lock files * Misc breaks * Updates to package.json * Breaks * Update yarn * Fix breaks * Breaks * Build breaks * Breaks * Breaks * Breaks * Breaks * Breaks * Missing file * Breaks * Breaks * Breaks * Breaks * Breaks * Fix several runtime breaks (#2515) * Missing files * Runtime breaks * Fix proxy ordering issue * Remove commented code * Fix breaks with opening query editor * Fix post merge break * Updates related to setup build and other breaks (#2516) * Fix bundle build issues * Update distro * Fix distro merge and update build JS files * Disable pipeline steps * Remove stats call * Update license name * Make new RPM dependencies a warning * Fix extension manager version checks * Update JS file * Fix a few runtime breaks * Fixes * Fix runtime issues * Fix build breaks * Update notebook tests (part 1) * Fix broken tests * Linting errors * Fix hygiene * Disable lint rules * Bump distro * Turn off smoke tests * Disable integration tests * Remove failing "activate" test * Remove failed test assertion * Disable other broken test * Disable query history tests * Disable extension unit tests * Disable failing tasks
138 lines
5.2 KiB
TypeScript
138 lines
5.2 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import * as assert from 'assert';
|
|
import 'mocha';
|
|
import * as vscode from 'vscode';
|
|
import { MdDefinitionProvider } from '../languageFeatures/definitionProvider';
|
|
import { MdLinkProvider } from '../languageFeatures/documentLinkProvider';
|
|
import { MdReferencesProvider } from '../languageFeatures/references';
|
|
import { githubSlugifier } from '../slugify';
|
|
import { InMemoryDocument } from '../util/inMemoryDocument';
|
|
import { MdWorkspaceContents } from '../workspaceContents';
|
|
import { createNewMarkdownEngine } from './engine';
|
|
import { InMemoryWorkspaceMarkdownDocuments } from './inMemoryWorkspace';
|
|
import { joinLines, noopToken, workspacePath } from './util';
|
|
|
|
|
|
function getDefinition(doc: InMemoryDocument, pos: vscode.Position, workspaceContents: MdWorkspaceContents) {
|
|
const engine = createNewMarkdownEngine();
|
|
const linkProvider = new MdLinkProvider(engine);
|
|
const referencesProvider = new MdReferencesProvider(linkProvider, workspaceContents, engine, githubSlugifier);
|
|
const provider = new MdDefinitionProvider(referencesProvider);
|
|
return provider.provideDefinition(doc, pos, noopToken);
|
|
}
|
|
|
|
function assertDefinitionsEqual(actualDef: vscode.Definition, ...expectedDefs: { uri: vscode.Uri; line: number; startCharacter?: number; endCharacter?: number }[]) {
|
|
const actualDefsArr = Array.isArray(actualDef) ? actualDef : [actualDef];
|
|
|
|
assert.strictEqual(actualDefsArr.length, expectedDefs.length, `Definition counts should match`);
|
|
|
|
for (let i = 0; i < actualDefsArr.length; ++i) {
|
|
const actual = actualDefsArr[i];
|
|
const expected = expectedDefs[i];
|
|
assert.strictEqual(actual.uri.toString(), expected.uri.toString(), `Definition '${i}' has expected document`);
|
|
assert.strictEqual(actual.range.start.line, expected.line, `Definition '${i}' has expected start line`);
|
|
assert.strictEqual(actual.range.end.line, expected.line, `Definition '${i}' has expected end line`);
|
|
if (typeof expected.startCharacter !== 'undefined') {
|
|
assert.strictEqual(actual.range.start.character, expected.startCharacter, `Definition '${i}' has expected start character`);
|
|
}
|
|
if (typeof expected.endCharacter !== 'undefined') {
|
|
assert.strictEqual(actual.range.end.character, expected.endCharacter, `Definition '${i}' has expected end character`);
|
|
}
|
|
}
|
|
}
|
|
|
|
suite('markdown: Go to definition', () => {
|
|
test('Should not return definition when on link text', async () => {
|
|
const doc = new InMemoryDocument(workspacePath('doc.md'), joinLines(
|
|
`[ref](#abc)`,
|
|
`[ref]: http://example.com`,
|
|
));
|
|
|
|
const defs = await getDefinition(doc, new vscode.Position(0, 1), new InMemoryWorkspaceMarkdownDocuments([doc]));
|
|
assert.deepStrictEqual(defs, undefined);
|
|
});
|
|
|
|
test('Should find definition links within file from link', async () => {
|
|
const docUri = workspacePath('doc.md');
|
|
const doc = new InMemoryDocument(docUri, joinLines(
|
|
`[link 1][abc]`, // trigger here
|
|
``,
|
|
`[abc]: https://example.com`,
|
|
));
|
|
|
|
const defs = await getDefinition(doc, new vscode.Position(0, 12), new InMemoryWorkspaceMarkdownDocuments([doc]));
|
|
assertDefinitionsEqual(defs!,
|
|
{ uri: docUri, line: 2 },
|
|
);
|
|
});
|
|
|
|
test('Should find definition links using shorthand', async () => {
|
|
const docUri = workspacePath('doc.md');
|
|
const doc = new InMemoryDocument(docUri, joinLines(
|
|
`[ref]`, // trigger 1
|
|
``,
|
|
`[yes][ref]`, // trigger 2
|
|
``,
|
|
`[ref]: /Hello.md` // trigger 3
|
|
));
|
|
|
|
{
|
|
const defs = await getDefinition(doc, new vscode.Position(0, 2), new InMemoryWorkspaceMarkdownDocuments([doc]));
|
|
assertDefinitionsEqual(defs!,
|
|
{ uri: docUri, line: 4 },
|
|
);
|
|
}
|
|
{
|
|
const defs = await getDefinition(doc, new vscode.Position(2, 7), new InMemoryWorkspaceMarkdownDocuments([doc]));
|
|
assertDefinitionsEqual(defs!,
|
|
{ uri: docUri, line: 4 },
|
|
);
|
|
}
|
|
{
|
|
const defs = await getDefinition(doc, new vscode.Position(4, 2), new InMemoryWorkspaceMarkdownDocuments([doc]));
|
|
assertDefinitionsEqual(defs!,
|
|
{ uri: docUri, line: 4 },
|
|
);
|
|
}
|
|
});
|
|
|
|
test('Should find definition links within file from definition', async () => {
|
|
const docUri = workspacePath('doc.md');
|
|
const doc = new InMemoryDocument(docUri, joinLines(
|
|
`[link 1][abc]`,
|
|
``,
|
|
`[abc]: https://example.com`, // trigger here
|
|
));
|
|
|
|
const defs = await getDefinition(doc, new vscode.Position(2, 3), new InMemoryWorkspaceMarkdownDocuments([doc]));
|
|
assertDefinitionsEqual(defs!,
|
|
{ uri: docUri, line: 2 },
|
|
);
|
|
});
|
|
|
|
test('Should not find definition links across files', async () => {
|
|
const docUri = workspacePath('doc.md');
|
|
const doc = new InMemoryDocument(docUri, joinLines(
|
|
`[link 1][abc]`,
|
|
``,
|
|
`[abc]: https://example.com`,
|
|
));
|
|
|
|
const defs = await getDefinition(doc, new vscode.Position(0, 12), new InMemoryWorkspaceMarkdownDocuments([
|
|
doc,
|
|
new InMemoryDocument(workspacePath('other.md'), joinLines(
|
|
`[link 1][abc]`,
|
|
``,
|
|
`[abc]: https://example.com?bad`,
|
|
))
|
|
]));
|
|
assertDefinitionsEqual(defs!,
|
|
{ uri: docUri, line: 2 },
|
|
);
|
|
});
|
|
});
|