Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion FSharp.Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@

<!-- other -->
<PropertyGroup>
<DebugType>full</DebugType>
<DebugType>portable</DebugType>
<MicroBuildAssemblyFileLanguage>fs</MicroBuildAssemblyFileLanguage>
<UseStandardResourceNames>false</UseStandardResourceNames>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
Expand Down
1 change: 1 addition & 0 deletions FSharp.Directory.Build.targets
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
</Target>

<Import Project="build\targets\AssemblyVersions.props" />
<Import Project="build\targets\ConvertPortablePdbs.targets" />
<Import Project="build\targets\GenerateAssemblyAttributes.targets" />
<Import Project="build\targets\GenerateInternalsVisibleTo.targets" />

Expand Down
1 change: 1 addition & 0 deletions NuGet.Config
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
<add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="myget.org roslyn tools" value="https://dotnet.myget.org/F/roslyn-tools/api/v3/index.json" />
<add key="myget.org roslyn" value="https://dotnet.myget.org/F/roslyn-for-vs-for-mac/api/v3/index.json" />
<add key="myget.org symreader-converter" value="https://dotnet.myget.org/F/symreader-converter/api/v3/index.json" />
</packageSources>

</configuration>
20 changes: 20 additions & 0 deletions build/targets/ConvertPortablePdbs.targets
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<Project>

<ItemGroup>
<PackageReference Include="Microsoft.DiaSymReader.Pdb2Pdb" Version="$(MicrosoftDiaSymReaderPdb2PdbPackageVersion)" />
</ItemGroup>

<Target Name="ConvertPortablePdbs"
AfterTargets="AfterBuild"
Condition="Exists('$(TargetPath)') AND ('$(DebugType)' == 'portable' OR '$(DebugType)' == 'embedded')">
<PropertyGroup>
<ConvertedPdbsDirectory>$(FinalOutputPath)\ConvertedPdbs</ConvertedPdbsDirectory>
<PdbConverterExe>$(NuGetPackageRoot)Microsoft.DiaSymReader.Pdb2Pdb\$(MicrosoftDiaSymReaderPdb2PdbPackageVersion)\tools\Pdb2Pdb.exe</PdbConverterExe>
<PdbConverterArgs>"$(TargetPath)" /out "$(ConvertedPdbsDirectory)\$(TargetName).pdb" /verbose /srcsvrvar SRC_INDEX=public</PdbConverterArgs>
</PropertyGroup>

<MakeDir Directories="$(ConvertedPdbsDirectory)" />
<Exec Command='"$(PdbConverterExe)" $(PdbConverterArgs)' />
</Target>

</Project>
1 change: 1 addition & 0 deletions build/targets/PackageVersions.props
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@

<!-- other packages -->
<MicrosoftCompositionPackageVersion>1.0.30</MicrosoftCompositionPackageVersion>
<MicrosoftDiaSymReaderPdb2PdbPackageVersion>1.1.0-roslyn-62714-01</MicrosoftDiaSymReaderPdb2PdbPackageVersion>
<MicrosoftMSXMLPackageVersion>8.0.0-alpha</MicrosoftMSXMLPackageVersion>
<MicrosoftVisualFSharpMSBuild150PackageVersion>1.0.1</MicrosoftVisualFSharpMSBuild150PackageVersion>
<NewtonsoftJsonPackageVersion>9.0.1</NewtonsoftJsonPackageVersion>
Expand Down
25 changes: 9 additions & 16 deletions src/absil/ilwritepdb.fs
Original file line number Diff line number Diff line change
Expand Up @@ -423,22 +423,15 @@ let generatePortablePdb (embedAllSource:bool) (embedSourceList:string list) (sou
list.ToArray() |> Array.sortWith<PdbMethodScope> scopeSorter

collectScopes scope |> Seq.iter(fun s ->
if s.Children.Length = 0 then
metadata.AddLocalScope(MetadataTokens.MethodDefinitionHandle(minfo.MethToken),
Unchecked.defaultof<ImportScopeHandle>,
nextHandle lastLocalVariableHandle,
Unchecked.defaultof<LocalConstantHandle>,
0, s.EndOffset - s.StartOffset ) |>ignore
else
metadata.AddLocalScope(MetadataTokens.MethodDefinitionHandle(minfo.MethToken),
Unchecked.defaultof<ImportScopeHandle>,
nextHandle lastLocalVariableHandle,
Unchecked.defaultof<LocalConstantHandle>,
s.StartOffset, s.EndOffset - s.StartOffset) |>ignore

for localVariable in s.Locals do
lastLocalVariableHandle <- metadata.AddLocalVariable(LocalVariableAttributes.None, localVariable.Index, metadata.GetOrAddString(localVariable.Name))
)
metadata.AddLocalScope(MetadataTokens.MethodDefinitionHandle(minfo.MethToken),
Unchecked.defaultof<ImportScopeHandle>,
nextHandle lastLocalVariableHandle,
Unchecked.defaultof<LocalConstantHandle>,
s.StartOffset, s.EndOffset - s.StartOffset ) |>ignore

for localVariable in s.Locals do
lastLocalVariableHandle <- metadata.AddLocalVariable(LocalVariableAttributes.None, localVariable.Index, metadata.GetOrAddString(localVariable.Name))
)

match minfo.RootScope with
| None -> ()
Expand Down
1 change: 1 addition & 0 deletions src/fsharp/NicePrint.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1970,6 +1970,7 @@ let isGeneratedExceptionField pos f = TastDefinitionPrinting.isGeneratedExce
let stringOfTyparConstraint denv tpc = stringOfTyparConstraints denv [tpc]
let stringOfTy denv x = x |> PrintTypes.layoutType denv |> showL
let prettyLayoutOfType denv x = x |> PrintTypes.prettyLayoutOfType denv
let prettyLayoutOfTypeNoCx denv x = x |> PrintTypes.prettyLayoutOfTypeNoConstraints denv
let prettyStringOfTy denv x = x |> PrintTypes.prettyLayoutOfType denv |> showL
let prettyStringOfTyNoCx denv x = x |> PrintTypes.prettyLayoutOfTypeNoConstraints denv |> showL
let stringOfRecdField denv x = x |> TastDefinitionPrinting.layoutRecdField false denv |> showL
Expand Down
11 changes: 11 additions & 0 deletions src/fsharp/service/service.fs
Original file line number Diff line number Diff line change
Expand Up @@ -908,6 +908,9 @@ type TypeCheckInfo
match item with
| Item.Types _ | Item.ModuleOrNamespaces _ -> true
| _ -> false

/// Find the most precise display context for the given line and column.
member __.GetBestDisplayEnvForPos cursorPos = GetBestEnvForPos cursorPos

member __.GetVisibleNamespacesAndModulesAtPosition(cursorPos: pos) : ModuleOrNamespaceRef list =
let (nenv, ad), m = GetBestEnvForPos cursorPos
Expand Down Expand Up @@ -1982,6 +1985,7 @@ type FSharpCheckFileResults(filename: string, errors: FSharpErrorInfo[], scopeOp
| _ ->
async.Return dflt


member info.GetToolTipText(line, colAtEndOfNames, lineStr, names, tokenTag, userOpName) =
info.GetStructuredToolTipText(line, colAtEndOfNames, lineStr, names, tokenTag, ?userOpName=userOpName)
|> Tooltips.Map Tooltips.ToFSharpToolTipText
Expand Down Expand Up @@ -2093,6 +2097,13 @@ type FSharpCheckFileResults(filename: string, errors: FSharpErrorInfo[], scopeOp
RequireCompilationThread ctok
scope.IsRelativeNameResolvableFromSymbol(pos, plid, symbol))

member info.GetDisplayEnvForPos(pos: pos) : Async<DisplayEnv option> =
let userOpName = "CodeLens"
reactorOp userOpName "GetDisplayContextAtPos" None (fun ctok scope ->
DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent ctok
let (nenv, _), _ = scope.GetBestDisplayEnvForPos pos
Some nenv.DisplayEnv)

member info.ImplementationFiles =
if not keepAssemblyContents then invalidOp "The 'keepAssemblyContents' flag must be set to true on the FSharpChecker in order to access the checked contents of assemblies"
scopeOptX
Expand Down
3 changes: 3 additions & 0 deletions src/fsharp/service/service.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,9 @@ type public FSharpCheckFileResults =

member internal GetVisibleNamespacesAndModulesAtPoint : pos -> Async<Tast.ModuleOrNamespaceRef[]>

/// Find the most precise display environment for the given line and column.
member internal GetDisplayEnvForPos : pos : pos -> Async<DisplayEnv option>

/// Determines if a long ident is resolvable at a specific point.
/// <param name="userOpName">An optional string used for tracing compiler operations associated with this request.</param>
member internal IsRelativeNameResolvable: cursorPos : pos * plid : string list * item: Item * ?userOpName: string -> Async<bool>
Expand Down
23 changes: 22 additions & 1 deletion src/fsharp/symbols/Symbols.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1844,6 +1844,23 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
prefix + x.LogicalName
with _ -> "??"

member x.FormatLayout (denv:FSharpDisplayContext) =
match x.IsMember, d with
| true, V v ->
NicePrint.prettyLayoutOfValOrMemberNoInst { (denv.Contents cenv.g) with showMemberContainers=true } v.Deref
| _,_ ->
checkIsResolved()
let ty =
match d with
| E e -> e.GetDelegateType(cenv.amap, range0)
| P p -> p.GetPropertyType(cenv.amap, range0)
| M m | C m ->
let rty = m.GetFSharpReturnTy(cenv.amap, range0, m.FormalMethodInst)
let argtysl = m.GetParamTypes(cenv.amap, range0, m.FormalMethodInst)
mkIteratedFunTy (List.map (mkRefTupledTy cenv.g) argtysl) rty
| V v -> v.TauType
NicePrint.prettyLayoutOfTypeNoCx (denv.Contents cenv.g) ty


and FSharpType(cenv, typ:TType) =

Expand Down Expand Up @@ -1989,7 +2006,11 @@ and FSharpType(cenv, typ:TType) =

member x.Format(denv: FSharpDisplayContext) =
protect <| fun () ->
NicePrint.prettyStringOfTyNoCx (denv.Contents cenv.g) typ
NicePrint.prettyStringOfTyNoCx (denv.Contents cenv.g) typ

member x.FormatLayout(denv: FSharpDisplayContext) =
protect <| fun () ->
NicePrint.prettyLayoutOfTypeNoCx (denv.Contents cenv.g) typ

override x.ToString() =
protect <| fun () ->
Expand Down
6 changes: 6 additions & 0 deletions src/fsharp/symbols/Symbols.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -819,6 +819,9 @@ and [<Class>] public FSharpMemberOrFunctionOrValue =

/// Indicates if this is a constructor.
member IsConstructor : bool

/// Format the type using the rules of the given display context
member FormatLayout : context: FSharpDisplayContext -> Layout


/// A subtype of FSharpSymbol that represents a parameter
Expand Down Expand Up @@ -931,6 +934,9 @@ and [<Class>] public FSharpType =
/// Format the type using the rules of the given display context
member Format : context: FSharpDisplayContext -> string

/// Format the type using the rules of the given display context
member FormatLayout : context: FSharpDisplayContext -> Layout

/// Instantiate generic type parameters in a type
member Instantiate : (FSharpGenericParameter * FSharpType) list -> FSharpType

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,9 @@
<Name>FSharp.Compiler.Private</Name>
<Project>{2e4d67b4-522d-4cf7-97e4-ba940f0b18f3}</Project>
</ProjectReference>
<ProjectReference Include="..\FSharp.Core\FSharp.Core.fsproj">
<ProjectReference Include="$(FSharpSourcesRoot)\fsharp\FSharp.Core\FSharp.Core.fsproj">
<Project>{DED3BBD7-53F4-428A-8C9F-27968E768605}</Project>
<Name>FSharp.Core</Name>
<Project>{ded3bbd7-53f4-428a-8c9f-27968e768605}</Project>
<Private>True</Private>
</ProjectReference>
</ItemGroup>
<Import Project="$(FSharpSourcesRoot)\FSharpSource.targets" />
Expand Down
Loading