Skip to content

Commit 0d24cd2

Browse files
authored
Relax minor sdk version number, fix more of nullability issues (#255)
* global.json: relax minor version number for sdk * src/CSharpLanguageServer/CSharpLanguageServer.fsproj: treat warnings as errors * Fix more of nullability issues
1 parent 667fcd4 commit 0d24cd2

File tree

7 files changed

+56
-17
lines changed

7 files changed

+56
-17
lines changed

global.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"sdk": {
3-
"version": "9.0.1",
3+
"version": "9.0",
44
"rollForward": "minor"
55
}
66
}

src/CSharpLanguageServer/CSharpLanguageServer.fsproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
<PackageReadmeFile>README.md</PackageReadmeFile>
1818
<ChangelogFile>CHANGELOG.md</ChangelogFile>
1919
<Nullable>enable</Nullable>
20+
<MSBuildTreatWarningsAsErrors>true</MSBuildTreatWarningsAsErrors>
2021
</PropertyGroup>
2122

2223
<ItemGroup>

src/CSharpLanguageServer/Handlers/Completion.fs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ module Completion =
4141
|> _.GetField("Empty", BindingFlags.Static|||BindingFlags.NonPublic)
4242
|> nonNull "Microsoft.CodeAnalysis.Options.OptionSet.Empty"
4343

44-
osEmptyOptionSetField.GetValue(null) :?> Microsoft.CodeAnalysis.Options.OptionSet
44+
osEmptyOptionSetField.GetValue(null)
45+
|> nonNull "Microsoft.CodeAnalysis.Options.OptionSet.Empty"
46+
:?> Microsoft.CodeAnalysis.Options.OptionSet
4547

4648
/// the type reflects on internal class Microsoft.CodeAnalysis.Completion.CompletionOptions
4749
/// see https://github.com/dotnet/roslyn/blob/main/src/Features/Core/Portable/Completion/CompletionOptions.cs
@@ -88,7 +90,7 @@ module Completion =
8890

8991
let parameters: obj array = [| doc; position; completionOptions.Object; emptyRoslynOptionSet; completionTrigger; null; ct |]
9092

91-
let result = getCompletionsAsync7MI.Invoke(service, parameters)
93+
let result = getCompletionsAsync7MI.Invoke(service, parameters) |> nonNull "result of getCompletionsAsync7MI"
9294

9395
(result :?> System.Threading.Tasks.Task<Microsoft.CodeAnalysis.Completion.CompletionList>)
9496
|> Async.AwaitTask

src/CSharpLanguageServer/Handlers/InlayHint.fs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,14 @@ module InlayHint =
9090

9191
let private toInlayHint (semanticModel: SemanticModel) (lines: TextLineCollection) (node: SyntaxNode): InlayHint option =
9292
let validateType (ty: ITypeSymbol | null) =
93-
if isNull ty || ty :? IErrorTypeSymbol || ty.Name = "var" then
94-
None
95-
else
96-
Some ty
93+
match ty |> Option.ofObj with
94+
| None -> None
95+
| Some ty ->
96+
if ty :? IErrorTypeSymbol || ty.Name = "var" then
97+
None
98+
else
99+
Some ty
100+
97101
let typeDisplayStyle = SymbolDisplayFormat(
98102
genericsOptions = SymbolDisplayGenericsOptions.IncludeTypeParameters,
99103
miscellaneousOptions = (SymbolDisplayMiscellaneousOptions.AllowDefaultLiteral ||| SymbolDisplayMiscellaneousOptions.IncludeNullableReferenceTypeModifier ||| SymbolDisplayMiscellaneousOptions.UseSpecialTypes))

src/CSharpLanguageServer/Logging.fs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,7 @@ module Providers =
535535
typedefof<bool>
536536
|]
537537
)
538+
|> nonNull "ndcContextType[.PushProperty]"
538539

539540
let nameParam = Expression.Parameter(typedefof<string>, "name")
540541

@@ -571,6 +572,7 @@ module Providers =
571572
typedefof<bool>
572573
|]
573574
)
575+
|> nonNull "logManagerType[.ForContext]"
574576

575577
let propertyNameParam = Expression.Parameter(typedefof<string>, "propertyName")
576578

@@ -637,7 +639,9 @@ module Providers =
637639
let loggerType = Type.GetType("Serilog.ILogger, Serilog")
638640
|> nonNull "Type.GetType('Serilog.ILogger, Serilog')"
639641

640-
let isEnabledMethodInfo = loggerType.GetMethod("IsEnabled", [| logEventLevelType |])
642+
let isEnabledMethodInfo =
643+
loggerType.GetMethod("IsEnabled", [| logEventLevelType |])
644+
|> nonNull "loggerType[.IsEnabled]"
641645

642646
let instanceParam = Expression.Parameter(typedefof<obj>)
643647

@@ -664,6 +668,7 @@ module Providers =
664668
typedefof<obj[]>
665669
|]
666670
)
671+
|> nonNull "loggerType[.Write]"
667672

668673
let messageParam = Expression.Parameter(typedefof<string>)
669674
let propertyValuesParam = Expression.Parameter(typedefof<obj[]>)
@@ -692,6 +697,7 @@ module Providers =
692697
typedefof<obj[]>
693698
|]
694699
)
700+
|> nonNull "loggerType[.Write]"
695701

696702
let exceptionParam = Expression.Parameter(typedefof<exn>)
697703

@@ -808,6 +814,7 @@ module Providers =
808814

809815
let createLoggerMethodInfo =
810816
factoryType.GetMethod("CreateLogger", [| typedefof<string> |])
817+
|> nonNull "factoryType[.CreateLogger]"
811818

812819
let instanceParam = Expression.Parameter(typedefof<ILoggerFactory>)
813820
let nameParam = Expression.Parameter(typedefof<string>)
@@ -862,12 +869,13 @@ module Providers =
862869
let levelCast = Expression.Convert(levelParam, logEventLevelType)
863870

864871
let isEnabled =
865-
let isEnabledMethodInfo = loggerType.GetMethod("IsEnabled", [| logEventLevelType |])
872+
let isEnabledMethodInfo =
873+
loggerType.GetMethod("IsEnabled", [| logEventLevelType |])
874+
|> nonNull "loggerType[.IsEnabled]"
866875

867876
let isEnabledMethodCall =
868877
Expression.Call(instanceCast, isEnabledMethodInfo, levelCast)
869878

870-
871879
Expression
872880
.Lambda<Func<ILogger, MicrosoftLogLevel, bool>>(isEnabledMethodCall, instanceParam, levelParam)
873881
.Compile()
@@ -892,6 +900,7 @@ module Providers =
892900
|],
893901
null
894902
)
903+
|> nonNull "loggerExtensions[.Log]"
895904

896905
let writeMethodExp =
897906
Expression.Call(
@@ -933,6 +942,7 @@ module Providers =
933942
null
934943

935944
)
945+
|> nonNull "loggerExtensions[.Log]"
936946

937947
let exnParam = Expression.Parameter(typedefof<exn>)
938948

src/CSharpLanguageServer/RoslynHelpers.fs

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@ type DocumentSymbolCollectorForMatchingSymbolName
5353
else
5454
suggestedLocations |> Seq.rev |> List.ofSeq
5555

56-
override __.Visit(node) =
56+
override __.Visit(node: SyntaxNode | null) =
57+
let node = node |> nonNull "node"
58+
5759
if sym.Kind = SymbolKind.Method then
5860
if node :? MethodDeclarationSyntax then
5961
let nodeMethodDecl = node :?> MethodDeclarationSyntax
@@ -251,7 +253,10 @@ type ExtractInterfaceOptionsServiceInterceptor (logMessage) =
251253
featuresAssembly.GetType("Microsoft.CodeAnalysis.ExtractInterface.ExtractInterfaceOptionsResult")
252254
|> nonNull "featuresAssembly.GetType('Microsoft.CodeAnalysis.ExtractInterface.ExtractInterfaceOptionsResult')"
253255

254-
let locationEnumType = extractInterfaceOptionsResultType.GetNestedType("ExtractLocation")
256+
let locationEnumType =
257+
extractInterfaceOptionsResultType.GetNestedType("ExtractLocation")
258+
|> nonNull "extractInterfaceOptionsResultType.GetNestedType('ExtractLocation')"
259+
255260
let location = Enum.Parse(locationEnumType, "NewFile") // or "SameFile"
256261

257262
let workspacesAssembly = Assembly.Load("Microsoft.CodeAnalysis.Workspaces")
@@ -295,7 +300,9 @@ type MoveStaticMembersOptionsServiceInterceptor (_logMessage) =
295300
let argSelectedMembers = invocation.Arguments[2] :?> ImmutableArray<ISymbol>
296301

297302
let featuresAssembly = Assembly.Load("Microsoft.CodeAnalysis.Features")
298-
let msmOptionsType = featuresAssembly.GetType("Microsoft.CodeAnalysis.MoveStaticMembers.MoveStaticMembersOptions")
303+
let msmOptionsType =
304+
featuresAssembly.GetType("Microsoft.CodeAnalysis.MoveStaticMembers.MoveStaticMembersOptions")
305+
|> nonNull "typeof<Microsoft.CodeAnalysis.MoveStaticMembers.MoveStaticMembersOptions>"
299306

300307
let newStaticClassName = "NewStaticClass"
301308

@@ -796,7 +803,16 @@ let makeDocumentFromMetadata
796803
(l: Microsoft.CodeAnalysis.Location)
797804
(fullName: string) =
798805
let mdLocation = l
799-
let reference = compilation.GetMetadataReference(mdLocation.MetadataModule.ContainingAssembly)
806+
807+
let containingAssembly =
808+
mdLocation.MetadataModule
809+
|> nonNull "mdLocation.MetadataModule"
810+
|> _.ContainingAssembly
811+
812+
let reference =
813+
compilation.GetMetadataReference(containingAssembly)
814+
|> nonNull "compilation.GetMetadataReference(containingAssembly)"
815+
800816
let peReference = reference :?> PortableExecutableReference |> Option.ofObj
801817
let assemblyLocation = peReference |> Option.map (fun r -> r.FilePath) |> Option.defaultValue "???"
802818

@@ -813,7 +829,7 @@ let makeDocumentFromMetadata
813829

814830
let text = decompiler.DecompileTypeAsString(fullTypeName)
815831

816-
let mdDocumentFilename = $"$metadata$/projects/{project.Name}/assemblies/{mdLocation.MetadataModule.ContainingAssembly.Name}/symbols/{fullName}.cs"
832+
let mdDocumentFilename = $"$metadata$/projects/{project.Name}/assemblies/{containingAssembly.Name}/symbols/{fullName}.cs"
817833
let mdDocumentEmpty = project.AddDocument(mdDocumentFilename, String.Empty)
818834

819835
let mdDocument = SourceText.From(text) |> mdDocumentEmpty.WithText

src/CSharpLanguageServer/State/ServerRequestContext.fs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,13 @@ type ServerRequestContext (requestId: int, state: ServerState, emitServerEvent)
5656
let! compilation = project.GetCompilationAsync(ct) |> Async.AwaitTask
5757

5858
let fullName = sym |> getContainingTypeOrThis |> getFullReflectionName
59-
let uri = $"csharp:/metadata/projects/{project.Name}/assemblies/{l.MetadataModule.ContainingAssembly.Name}/symbols/{fullName}.cs"
59+
60+
let containingAssemblyName =
61+
l.MetadataModule
62+
|> nonNull "l.MetadataModule"
63+
|> _.ContainingAssembly.Name
64+
65+
let uri = $"csharp:/metadata/projects/{project.Name}/assemblies/{containingAssemblyName}/symbols/{fullName}.cs"
6066

6167
let mdDocument, stateChanges =
6268
match Map.tryFind uri state.DecompiledMetadata with
@@ -66,7 +72,7 @@ type ServerRequestContext (requestId: int, state: ServerState, emitServerEvent)
6672
let (documentFromMd, text) = makeDocumentFromMetadata compilation project l fullName
6773

6874
let csharpMetadata = { ProjectName = project.Name
69-
AssemblyName = l.MetadataModule.ContainingAssembly.Name
75+
AssemblyName = containingAssemblyName
7076
SymbolName = fullName
7177
Source = text }
7278
(documentFromMd, [

0 commit comments

Comments
 (0)