Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • 07:32
    cston synchronize #57295
  • 07:10
    CyrusNajmabadi commented #49954
  • 07:10
    cston synchronize #57295
  • 07:08
    abatishchev commented #49954
  • 07:05
    CyrusNajmabadi commented #49954
  • 07:05
    msftbot[bot] milestoned #58184
  • 07:04
    CyrusNajmabadi closed #58184
  • 07:04

    CyrusNajmabadi on main

    Add regex parser tests Merge pull request #58184 from … (compare)

  • 07:01
    kelicto closed #58155
  • 07:01
    kelicto commented #58155
  • 06:14
    davidwengier synchronize #58152
  • 06:06
    rui-ktei closed #58187
  • 06:06
    rui-ktei commented #58187
  • 05:43
    Youssef1313 synchronize #58154
  • 05:38
    DavidKarlas commented #58188
  • 05:36
    Youssef1313 synchronize #58173
  • 05:36
    Youssef1313 review_requested #58173
  • 05:36
    Youssef1313 review_requested #58173
  • 05:25
    Youssef1313 commented #58187
  • 05:23
    davidwengier closed #57996
CyrusNajmabadi
@CyrusNajmabadi
you can definitely file suggestion on this.
Hugh Gleaves
@Korporal
alright, I'll do that later, thanks Cyrus.
timiil
@timiil
hi,hi , i am trying do a task:
walk through a Lambda, get all MemberAccessSyntax
ExpressionSyntax es = SyntaxFactory.ParseExpression(expr); //expr is a string
any simple way to walkthough the 'es' that get all MemberAccessExpressionSyntax inside it ? we know that the a great deal of kind XXXXSyntax inside the tree...
Martin Vseticka
@MartyIX

Guys, I'm working on an analyzer which bans some APIs. So it basically goes through syntaxTree.GetRoot().DescendantNodes().OfType<IdentifierNameSyntax>() and checks INamespaceSymbol namespaceSymbol = semanticModel.GetSymbolInfo(node).Symbol?.ContainingNamespace;.

The function that does this is public IEnumerable<(IdentifierNameSyntax, INamespaceSymbol )> FindForbiddenIdentifiers(SemanticModel semanticModel). My implementation of the method does "yield return (node, @namespace);" so that FindForbiddenIdentifiers returns as soon as possible and a diagnostic can be reported to a Visual Studio user. My colleague would prefer FindForbiddenIdentifiers to return a list (as it is computed faster 240ms as opposed to 300ms with yield return- the intervals are taken from unit tests). Is there some recommendation what is better? I would expect that yield return should be used by default as I understand I don't really need an allocation for the returning list but still my implementation is "slower" in total.

Joe4evr
@Joe4evr

@MartyIX first consider: use of yield return will create a compiler-generated state machine, and you'll allocate that at runtime

the difference likely comes from the fact that the List can utilize a struct enumerator and all the items in the list are pre-computed, as opposed to yield return which lazily evaluates the next item in the sequence for every MoveNext

Martin Vseticka
@MartyIX
@Joe4evr Good point. So what is the preferred solution? Or what solution would you pick? (As a rule of thumb rather than "depends on the situation")
12 replies
Bernd Baumanns
@bernd5
If I query the IOperation of an FunctionPointer-InvocationExpressionSyntax, is it intended that I get a "NoneOperation"?
something like: functionPtrVariable(someArg1, someArg2)
I would expect an IInvocationOperation
Jesper Hansen
@jespersh
Hi, I'm having some success with Source Generators and I'm wondering where I can find the generated source in the Solution Explorer? I've been able to F12 to some source, but not all source has a call (signalr hub)
Oh, there in the Dependencies->Analysers->Project-with-source-generator. I swear it wasn't there a moment ago :)
Martin Vseticka
@MartyIX

Hi, I wonder, is it better to have as a rule of thumb:

#1 Dictionary<Key1, Dictionary<Key, Value>>

or

#2 Dictionary <string, Value> where key is string myKey = $"{enumValue1}-{enumValue2}"

?

First variant requires typically more code, the second is typically more comfortable to work with. That's one view. However, I wonder if I keep allocating myKeys again and again or if some string interning is helping me here...?

CyrusNajmabadi
@CyrusNajmabadi
You will keep allocating keys.
2 replies
Alternative 3:
Dictionary<(string key1, string key2), Value>
43 replies
Martin Vseticka
@MartyIX
Thanks!
Hugh Gleaves
@Korporal
I have a solution that contains two projects, a library targeting netstandard 2.0 and a console app targeting .Net 5 that exercises the library.
The library when used from within the console app, generates source code, small files that contain a single class definition.
The console app can include these generated class files and can build and execute the code.
Now I want to dynamically load and execute the generated source within the console app (rather than building the console app with the file included)
But I get compile errors:
(19,34): error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
Hugh Gleaves
@Korporal
I already add a bunch of references including C:\Program Files\dotnet\shared\Microsoft.NETCore.App\5.0.11\System.Private.CoreLib.dll and C:\Program Files\dotnet\shared\Microsoft.NETCore.App\5.0.11\netstandard.dll
Hugh Gleaves
@Korporal
ok its working
I basically do dthis
                var colRefLocation = AppDomain.CurrentDomain.GetAssemblies().Single(a => a.GetName().Name == "System.Collections").Location;
                var stdRefLocation = AppDomain.CurrentDomain.GetAssemblies().Single(a => a.GetName().Name == "netstandard").Location;
                var sysrLocation = AppDomain.CurrentDomain.GetAssemblies().Single(a => a.GetName().Name == "System.Runtime").Location;
Antony Male
@canton7
@Korporal Using Roslyn, presumably? Look at https://github.com/jaredpar/basic-reference-assemblies for the correct set of reference assemblies for a given target
jamespgatt
@jamespgatt

Hi there, I have a solution that contains 3 projects:

  • a library (netstandard 2.0) that is using ISourceGenerator
  • a WebAPI project (net5.0) that has some controllers with actions
  • a Test (net5.0 with xunit) that has unit tests

Basically the flow I want to achieve is that the SourceGenerator class will analyse all action methods and generate a sample unit test [fact] for each action method.
However what I am realising is that SyntaxTrees only accesses one executing assembly at a time - i.e. if the source generator is being executed on the Test proj (even with WebAPI proj referenced), syntaxtrees for WebAPI are not accessible.

Is there a way around this?

CyrusNajmabadi
@CyrusNajmabadi
Nope
That's fundamental to analyzer and sg design.
They operate on one compilation at a time.
This models how compilation actually works. When you are compiling a project X, it's dependencies are passed to it as metadata references, not source code.
Yair Halberstadt
@YairHalberstadt
@jamespgatt you shouldn't need syntax trees for what you're doing - just MethodSymbols
jamespgatt
@jamespgatt
Thanks will check it out
suresh palepu
@satyasuresh:matrix.org
[m]

Hi All

I am trying to disable the "SA1101" stylecop warning in .net core

added below line the .ediitorconfig, but still showing the warining

Please help me on this

dotnet_diagnostic.SA1101.severity = none

a

Martin Vseticka
@MartyIX

Guys, I have NLog as dependency in my analyzer: https://github.com/dotnet/roslyn/discussions/56643#discussioncomment-1378880.

Now I wonder about this line <PackageReference Include="NLog" Version="4.7.5" PrivateAssets="all" GeneratePathProperty="true" /> in my analyzer project. Is it recommended to add PrivateAssets="all" or not? My fear is that NLog dependency ends up in CUSTOMER's project by transitivity rule. Is that reasonable fear or is it a nonsense?

Yair Halberstadt
@YairHalberstadt
Why don't you test. Setup a local folder as a nuget source, generate a nuget package and copy to that folder, reference the analayzer froma seperate project, and see what happens.
1 reply
Joe4evr
@Joe4evr
:arrow_up:
Yair Halberstadt
@YairHalberstadt
As an aside, I wish that roslyn passed in a logger to analyzers/source generators
Joe4evr
@Joe4evr
word
Antony Male
@canton7
There was a request for that
Martin Vseticka
@MartyIX
ok, so it seems to me that the reference is not propagated to the customer's project.
However, I have just found that other 3rd party dependencies leak into the customer's project thanks to my nuget packages :facepalm:
Benjamin
@benjamin-asdf
Hi, I'd like to get a recursive call graph of a method. Like all methods that it uses (down into other assemblies)
Elan Hasson
@elanhasson:matrix.org
[m]
Why are source generators only additive?
Joe4evr
@Joe4evr
because it's exponentially more complicated to spec order of execution when replacement is involved
Leandro T. C. Melo
@ltcmelo
hi...
I have an unexpected situation: an object propSym (of type IPropertySymbol) whose Name is null, ie, propSym.Name == null holds
I don't have any context about the source in question because this error is coming from a (customer) log
my understanding is that propSym.Name could return an empty string but not null