Git Product home page Git Product logo

clion-macroformatter's People

Contributors

itechbear avatar milot-mirdita avatar youjumpiwatch avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

clion-macroformatter's Issues

Problem with raw string literals

I came across this while hunting a macro replacement issue in CLion itself.

Using googletest and nlohmann::json my initial working code looks like this

ASSERT_TRUE(root->setValue(json::parse(R"(["none"])")));

the replacement code looks like this

switch (0)
case 0:
default:
    if (const ::testing::AssertionResult gtest_ar_ = ::testing::AssertionResult((root->setValue(json::parse(R"(["none"])")))))
        ;
    else
        return ::testing::internal::AssertHelper(::testing::TestPartResult::kFatalFailure, "_file_name_", 305, ::testing::internal::GetBoolAssertionFailureMessage(gtest_ar_, "root->setValue(json::parse(R"(["none"]) "))", "false", "true").c_str()) = ::testing::Message()

Paste the code into the same function fails to compile though

/mnt/c/clion/broker/test/node_test.cpp: In member function 'virtual void NodeTest_setValue_Test::TestBody()':
/mnt/c/clion/broker/test/node_test.cpp:359:214: error: expression cannot be used as a function
         return ::testing::internal::AssertHelper(::testing::TestPartResult::kFatalFailure, "_file_name_", 305, ::testing::internal::GetBoolAssertionFailureMessage(gtest_ar_, "root->setValue(json::parse(R"(["none"]) "))", "false", "true").c_str()) = ::testing::Message();
                                                                                                                                                                                                                      ^
/mnt/c/clion/broker/test/node_test.cpp:359:49: error: expected primary-expression before '(' token
         return ::testing::internal::AssertHelper(::testing::TestPartResult::kFatalFailure, "_file_name_", 305, ::testing::internal::GetBoolAssertionFailureMessage(gtest_ar_, "root->setValue(json::parse(R"(["none"]) "))", "false", "true").c_str()) = ::testing::Message();
                                                 ^
/mnt/c/clion/broker/test/node_test.cpp:359:207: error: expected identifier before string constant
         return ::testing::internal::AssertHelper(::testing::TestPartResult::kFatalFailure, "_file_name_", 305, ::testing::internal::GetBoolAssertionFailureMessage(gtest_ar_, "root->setValue(json::parse(R"(["none"]) "))", "false", "true").c_str()) = ::testing::Message();
                                                                                                                                                                                                               ^
/mnt/c/clion/broker/test/node_test.cpp: In lambda function:
/mnt/c/clion/broker/test/node_test.cpp:359:214: error: expected '{' before ')' token
         return ::testing::internal::AssertHelper(::testing::TestPartResult::kFatalFailure, "_file_name_", 305, ::testing::internal::GetBoolAssertionFailureMessage(gtest_ar_, "root->setValue(json::parse(R"(["none"]) "))", "false", "true").c_str()) = ::testing::Message();
                                                                                                                                                                                                                      ^
/mnt/c/clion/broker/test/node_test.cpp: In member function 'virtual void NodeTest_setValue_Test::TestBody()':
/mnt/c/clion/broker/test/node_test.cpp:359:214: error: expression cannot be used as a function
/mnt/c/clion/broker/test/node_test.cpp:359:269: error: return-statement with a value, in function returning 'void' [-fpermissive]
         return ::testing::internal::AssertHelper(::testing::TestPartResult::kFatalFailure, "_file_name_", 305, ::testing::internal::GetBoolAssertionFailureMessage(gtest_ar_, "root->setValue(json::parse(R"(["none"]) "))", "false", "true").c_str()) = ::testing::Message();

CLion shows the issue with the raw string literal (sorry for the hard to read image / and ignore the red .c_str() - that's the CLion issue I am hunting)

clion_macro_raw

Support Rider for Unreal Engine

CLion-MacroFormatter is an invaluable tool when using CLion for editing macro-heavy code.

Since Unreal-Engine-based code relies often on complex macros and the default macro expansion in Rider is similar to that of CLion (i.e. single-level expansion with no formatting), I think that this plugin will provide great value for the users of this new Jetbrains IDE.

Therefore, could you please make CLion-MacroFormatter available for the "Rider for Unreal Engine" IDE ? (https://www.jetbrains.com/lp/rider-unreal/)

Thank you in advance for considering this request!

ps: I understand that having "CLion" in the "CLion-MacroFormatter" name might seem odd if the plugin is enabled for Rider, but I think that users (such as myself) who get great value from this plugin can easily get over that ๐Ÿ˜‰

Write access is allowed from event dispatch thread only

Hi,

the following exception is being thrown from your extension in CLion:
"Write access is allowed from event dispatch thread only"
The stacktrace:

com.intellij.openapi.diagnostic.RuntimeExceptionWithAttachments: EventQueue.isDispatchThread()=false Toolkit.getEventQueue()=com.intellij.ide.IdeEventQueue@797c7ffb
Current thread: Thread[ApplicationImpl pooled thread 204,4,Idea Thread Group] 2132374727
SystemEventQueueThread: Thread[AWT-EventQueue-0,6,Idea Thread Group] 426179003
	at com.intellij.openapi.application.impl.ApplicationImpl.assertIsDispatchThread(ApplicationImpl.java:959)
	at com.intellij.openapi.application.impl.ApplicationImpl.startWrite(ApplicationImpl.java:1041)
	at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:883)
	at com.intellij.psi.impl.PsiDocumentManagerBase.handleCommitWithoutPsi(PsiDocumentManagerBase.java:956)
	at com.intellij.psi.impl.PsiDocumentManagerBase.documentChanged(PsiDocumentManagerBase.java:858)
	at com.intellij.psi.impl.PsiDocumentManagerImpl.documentChanged(PsiDocumentManagerImpl.java:84)
	at jdk.internal.reflect.GeneratedMethodAccessor122.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at com.intellij.util.EventDispatcher.dispatchVoidMethod(EventDispatcher.java:130)
	at com.intellij.util.EventDispatcher.access$000(EventDispatcher.java:24)
	at com.intellij.util.EventDispatcher$1.invoke(EventDispatcher.java:88)
	at com.sun.proxy.$Proxy75.documentChanged(Unknown Source)
	at com.intellij.openapi.editor.impl.DocumentImpl.changedUpdate(DocumentImpl.java:899)
	at com.intellij.openapi.editor.impl.DocumentImpl.updateText(DocumentImpl.java:803)
	at com.intellij.openapi.editor.impl.DocumentImpl.replaceString(DocumentImpl.java:668)
	at com.intellij.openapi.editor.impl.DocumentImpl.replaceString(DocumentImpl.java:615)
	at com.intellij.pom.wrappers.PsiEventWrapperAspect.lambda$promoteNonPhysicalChangesToDocument$0(PsiEventWrapperAspect.java:76)
	at com.intellij.psi.impl.PsiToDocumentSynchronizer.performAtomically(PsiToDocumentSynchronizer.java:126)
	at com.intellij.pom.wrappers.PsiEventWrapperAspect.promoteNonPhysicalChangesToDocument(PsiEventWrapperAspect.java:76)
	at com.intellij.pom.wrappers.PsiEventWrapperAspect.sendAfterEvents(PsiEventWrapperAspect.java:59)
	at com.intellij.pom.wrappers.PsiEventWrapperAspect.update(PsiEventWrapperAspect.java:52)
	at com.intellij.pom.core.impl.PomModelImpl.lambda$null$1(PomModelImpl.java:177)
	at com.intellij.psi.impl.DebugUtil.performPsiModification(DebugUtil.java:564)
	at com.intellij.pom.core.impl.PomModelImpl.lambda$runTransaction$2(PomModelImpl.java:144)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:585)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:531)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:59)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeNonCancelableSection(CoreProgressManager.java:191)
	at com.intellij.pom.core.impl.PomModelImpl.runTransaction(PomModelImpl.java:135)
	at com.intellij.psi.impl.source.tree.ChangeUtil.prepareAndRunChangeAction(ChangeUtil.java:149)
	at com.intellij.psi.impl.source.tree.CompositeElement.addChild(CompositeElement.java:596)
	at com.intellij.psi.formatter.FormatterUtil.addWhiteSpace(FormatterUtil.java:458)
	at com.intellij.psi.formatter.FormatterUtil.replaceWhiteSpace(FormatterUtil.java:350)
	at com.intellij.psi.formatter.PsiBasedFormattingModel.lambda$replaceWithPsiInLeaf$1(PsiBasedFormattingModel.java:147)
	at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl.lambda$performActionWithFormatterDisabled$6(CodeStyleManagerImpl.java:696)
	at com.intellij.psi.impl.source.PostprocessReformattingAspect.disablePostprocessFormattingInside(PostprocessReformattingAspect.java:108)
	at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl.lambda$performActionWithFormatterDisabled$8(CodeStyleManagerImpl.java:725)
	at com.intellij.formatting.FormatterImpl.runWithFormattingDisabled(FormatterImpl.java:682)
	at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl.performActionWithFormatterDisabled(CodeStyleManagerImpl.java:723)
	at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl.performActionWithFormatterDisabled(CodeStyleManagerImpl.java:695)
	at com.intellij.psi.formatter.PsiBasedFormattingModel.replaceWithPsiInLeaf(PsiBasedFormattingModel.java:146)
	at com.intellij.psi.formatter.PsiBasedFormattingModel.replaceWithPSI(PsiBasedFormattingModel.java:109)
	at com.intellij.psi.formatter.PsiBasedFormattingModel.replaceWhiteSpace(PsiBasedFormattingModel.java:67)
	at com.jetbrains.cidr.lang.formatting.OCPsiBasedFormattingModel.replaceWhiteSpace(OCPsiBasedFormattingModel.java:64)
	at com.intellij.formatting.engine.FormatProcessorUtils.replaceWhiteSpace(FormatProcessorUtils.java:45)
	at com.intellij.formatting.engine.ApplyChangesState.doIteration(ApplyChangesState.java:175)
	at com.intellij.formatting.engine.State.iteration(State.java:25)
	at com.intellij.formatting.engine.StateProcessor.iteration(StateProcessor.java:26)
	at com.intellij.formatting.FormatProcessor.iteration(FormatProcessor.java:107)
	at com.intellij.formatting.FormatterImpl$MyFormattingTask.iteration(FormatterImpl.java:705)
	at com.intellij.formatting.FormatterImpl.execute(FormatterImpl.java:274)
	at com.intellij.formatting.FormatterImpl.format(FormatterImpl.java:239)
	at com.intellij.psi.impl.source.codeStyle.CodeFormatterFacade.processRange(CodeFormatterFacade.java:118)
	at com.intellij.psi.impl.source.codeStyle.CodeFormatterFacade.processElement(CodeFormatterFacade.java:86)
	at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl.reformat(CodeStyleManagerImpl.java:90)
	at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl.reformat(CodeStyleManagerImpl.java:70)
	at com.jetbrains.cidr.lang.util.OCElementFactory.a(OCElementFactory.java:696)
	at com.intellij.psi.impl.source.PostprocessReformattingAspect.lambda$disablePostprocessFormattingInside$1(PostprocessReformattingAspect.java:100)
	at com.intellij.psi.impl.source.PostprocessReformattingAspect.disablePostprocessFormattingInside(PostprocessReformattingAspect.java:108)
	at com.intellij.psi.impl.source.PostprocessReformattingAspect.disablePostprocessFormattingInside(PostprocessReformattingAspect.java:99)
	at com.jetbrains.cidr.lang.util.OCElementFactory.codeFragment(OCElementFactory.java:695)
	at com.jetbrains.cidr.lang.util.OCElementFactory.codeFragment(OCElementFactory.java:655)
	at com.jetbrains.cidr.lang.util.OCElementFactory.typeCodeFragment(OCElementFactory.java:637)
	at com.jetbrains.cidr.lang.util.OCElementFactory.typeElementFromTextOrNull(OCElementFactory.java:555)
	at com.jetbrains.cidr.lang.util.OCElementFactory.typeElementFromText(OCElementFactory.java:550)
	at com.jetbrains.cidr.lang.util.OCDocUtil.getCanonicalName(OCDocUtil.java:157)
	at com.jetbrains.cidr.lang.util.OCDocUtil.getCanonicalPrefix(OCDocUtil.java:231)
	at com.jetbrains.cidr.lang.documentation.CidrDocumentationProvider.a(CidrDocumentationProvider.java:649)
	at com.jetbrains.cidr.lang.documentation.CidrDocumentationProvider.a(CidrDocumentationProvider.java:463)
	at com.jetbrains.cidr.lang.documentation.CidrDocumentationProvider.quickDocContent(CidrDocumentationProvider.java:296)
	at com.jetbrains.cidr.lang.documentation.CidrDocumentationProvider.getQuickNavigateInfo(CidrDocumentationProvider.java:86)
	at com.github.itechbear.macroformatter.provider.MacroDocumentationProvider.getQuickNavigateInfo(MacroDocumentationProvider.java:24)
	at com.intellij.lang.documentation.CompositeDocumentationProvider.getQuickNavigateInfo(CompositeDocumentationProvider.java:112)
	at com.intellij.codeInsight.navigation.CtrlMouseHandler.generateInfo(CtrlMouseHandler.java:266)
	at com.intellij.codeInsight.navigation.CtrlMouseHandler.access$1000(CtrlMouseHandler.java:86)
	at com.intellij.codeInsight.navigation.CtrlMouseHandler$InfoSingle.getInfo(CtrlMouseHandler.java:386)
	at com.intellij.codeInsight.navigation.CtrlMouseHandler$TooltipProvider.doExecute(CtrlMouseHandler.java:697)
	at com.intellij.codeInsight.navigation.CtrlMouseHandler$TooltipProvider.lambda$execute$0(CtrlMouseHandler.java:673)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.insideReadAction(NonBlockingReadActionImpl.java:286)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.lambda$null$3(NonBlockingReadActionImpl.java:255)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runWithWriteActionPriority$1(ProgressIndicatorUtils.java:127)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:163)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:585)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:531)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:59)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:150)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runWithWriteActionPriority(ProgressIndicatorUtils.java:116)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.lambda$null$4(NonBlockingReadActionImpl.java:255)
	at com.intellij.openapi.application.ReadAction.lambda$run$1(ReadAction.java:62)
	at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:825)
	at com.intellij.openapi.application.ReadAction.compute(ReadAction.java:69)
	at com.intellij.openapi.application.ReadAction.run(ReadAction.java:62)
	at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.lambda$transferToBgThread$5(NonBlockingReadActionImpl.java:254)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.