@@ -17,7 +17,8 @@ export enum LaunchTargetKind {
1717 ProjectJson ,
1818 Folder ,
1919 Csx ,
20- Cake
20+ Cake ,
21+ LiveShare
2122}
2223
2324/**
@@ -31,6 +32,24 @@ export interface LaunchTarget {
3132 kind : LaunchTargetKind ;
3233}
3334
35+ export const vslsTarget : LaunchTarget = {
36+ label : "VSLS" ,
37+ description : "Visual Studio Live Share" ,
38+ directory : "" ,
39+ target : "" ,
40+ kind : LaunchTargetKind . LiveShare
41+ } ;
42+
43+ /** Live share scheme */
44+ export const vsls = 'vsls' ;
45+
46+ /*
47+ * File scheme for which OmniSharp language feature should be disabled
48+ */
49+ export const disabledSchemes = new Set ( [
50+ vsls ,
51+ ] ) ;
52+
3453/**
3554 * Returns a list of potential targets on which OmniSharp can be launched.
3655 * This includes `project.json` files, `*.sln` files (if any `*.csproj` files are found), and the root folder
@@ -55,7 +74,7 @@ export async function findLaunchTargets(options: Options): Promise<LaunchTarget[
5574 return resourcesToLaunchTargets ( projectFiles . concat ( csFiles ) ) ;
5675}
5776
58- function resourcesToLaunchTargets ( resources : vscode . Uri [ ] ) : LaunchTarget [ ] {
77+ export function resourcesToLaunchTargets ( resources : vscode . Uri [ ] ) : LaunchTarget [ ] {
5978 // The list of launch targets is calculated like so:
6079 // * If there are .csproj files, .sln files are considered as launch targets.
6180 // * Any project.json file is considered a launch target.
@@ -67,13 +86,20 @@ function resourcesToLaunchTargets(resources: vscode.Uri[]): LaunchTarget[] {
6786 // * It should be possible to choose a .sln file even when no .csproj files are found
6887 // within the root.
6988
70- if ( ! Array . isArray ( resources ) ) {
89+ if ( ! Array . isArray ( resources ) || resources . length === 0 ) {
7190 return [ ] ;
7291 }
7392
93+ // Since language server functionality is run on the server instance there is no need
94+ // to start OmniSharp on the LiveShare client.
95+ const localResources = resources . filter ( resource => ! disabledSchemes . has ( resource . scheme ) ) ;
96+ if ( localResources . length === 0 ) {
97+ return [ vslsTarget ] ;
98+ }
99+
74100 let workspaceFolderToUriMap = new Map < number , vscode . Uri [ ] > ( ) ;
75101
76- for ( let resource of resources ) {
102+ for ( let resource of localResources ) {
77103 let folder = vscode . workspace . getWorkspaceFolder ( resource ) ;
78104 if ( folder ) {
79105 let buckets : vscode . Uri [ ] ;
0 commit comments